From 04458d00917f650f2af4887f327ebd6754858775 Mon Sep 17 00:00:00 2001 From: Sascha Grunert Date: Mon, 30 Jul 2018 21:03:22 +0200 Subject: [PATCH] Evolve to next generation webapp (#9) --- .circleci/config.yml | 112 + .github/tech_stack.mdd | 8 - .github/tech_stack.png | Bin 123996 -> 0 bytes .gitignore | 4 +- .rustfmt.toml | 13 + .travis.yml | 39 - Cargo.lock | 2382 +++++++++++++++++ Cargo.toml | 68 +- Config.toml | 9 +- Dockerfile.webapp => Dockerfile | 4 +- Dockerfile.build | 9 - Makefile | 77 +- README.md | 77 +- backend/Cargo.toml | 44 + backend/src/cbor.rs | 79 + .../executor.rs => backend/src/database.rs | 44 +- backend/src/http/login_credentials/mod.rs | 43 + backend/src/http/login_credentials/tests.rs | 61 + backend/src/http/login_session/mod.rs | 38 + backend/src/http/login_session/tests.rs | 58 + backend/src/http/logout/mod.rs | 36 + backend/src/http/logout/tests.rs | 41 + backend/src/http/mod.rs | 13 + backend/src/http/tests.rs | 25 + backend/src/lib.rs | 32 + {src/backend => backend/src}/main.rs | 4 +- .../server.rs => backend/src/server/mod.rs | 87 +- backend/src/server/tests.rs | 32 + backend/src/token/mod.rs | 67 + backend/src/token/tests.rs | 21 + backend/tests/server.rs | 155 ++ {tls => backend/tls}/crt.pem | 0 {tls => backend/tls}/key.pem | 0 ci/install_capnp | 8 - ci/install_cargo_web | 14 - diesel.toml | 2 +- frontend/Cargo.toml | 34 + build.rs => frontend/build.rs | 56 +- frontend/src/component/content.rs | 152 ++ frontend/src/component/login.rs | 176 ++ .../src/component}/mod.rs | 0 frontend/src/component/root.rs | 159 ++ frontend/src/lib.rs | 33 + {src/frontend => frontend/src}/main.rs | 13 +- frontend/src/route.rs | 49 + .../src/service}/cookie.rs | 14 +- frontend/src/service/log.rs | 62 + .../services => frontend/src/service}/mod.rs | 5 +- .../src/service}/router.rs | 40 +- frontend/src/service/session_timer.rs | 123 + frontend/src/service/uikit.rs | 39 + frontend/src/string.rs | 18 + {src/frontend => frontend/src}/style.scss | 0 frontend/static/css/style.css | 1 + frontend/static/favicon.ico | Bin 0 -> 198 bytes {static => frontend/static}/index.html | 6 +- .../2018-07-04-055234_create_sessions/up.sql | 2 +- src/backend/database/mod.rs | 5 - src/backend/database/models.rs | 9 - src/backend/mod.rs | 6 - src/backend/token.rs | 64 - src/backend/websocket.rs | 211 -- src/config.rs | 26 +- src/frontend/components/content.rs | 113 - src/frontend/components/login.rs | 159 -- src/frontend/components/root.rs | 142 - src/frontend/mod.rs | 5 - src/frontend/routes.rs | 107 - src/frontend/services/protocol.rs | 106 - src/frontend/services/websocket.rs | 93 - src/lib.rs | 82 +- src/protocol.capnp | 27 - src/protocol/mod.rs | 5 + src/protocol/model.rs | 13 + src/protocol/request.rs | 21 + src/protocol/response.rs | 11 + src/{backend/database => }/schema.rs | 6 +- static/css/style.css | 1 - tests/backend.rs | 224 -- 79 files changed, 4410 insertions(+), 1714 deletions(-) create mode 100644 .circleci/config.yml delete mode 100644 .github/tech_stack.mdd delete mode 100644 .github/tech_stack.png create mode 100644 .rustfmt.toml delete mode 100644 .travis.yml create mode 100644 Cargo.lock rename Dockerfile.webapp => Dockerfile (88%) delete mode 100644 Dockerfile.build create mode 100644 backend/Cargo.toml create mode 100644 backend/src/cbor.rs rename src/backend/database/executor.rs => backend/src/database.rs (60%) create mode 100644 backend/src/http/login_credentials/mod.rs create mode 100644 backend/src/http/login_credentials/tests.rs create mode 100644 backend/src/http/login_session/mod.rs create mode 100644 backend/src/http/login_session/tests.rs create mode 100644 backend/src/http/logout/mod.rs create mode 100644 backend/src/http/logout/tests.rs create mode 100644 backend/src/http/mod.rs create mode 100644 backend/src/http/tests.rs create mode 100644 backend/src/lib.rs rename {src/backend => backend/src}/main.rs (86%) rename src/backend/server.rs => backend/src/server/mod.rs (51%) create mode 100644 backend/src/server/tests.rs create mode 100644 backend/src/token/mod.rs create mode 100644 backend/src/token/tests.rs create mode 100644 backend/tests/server.rs rename {tls => backend/tls}/crt.pem (100%) rename {tls => backend/tls}/key.pem (100%) delete mode 100755 ci/install_capnp delete mode 100755 ci/install_cargo_web create mode 100644 frontend/Cargo.toml rename build.rs => frontend/build.rs (65%) create mode 100644 frontend/src/component/content.rs create mode 100644 frontend/src/component/login.rs rename {src/frontend/components => frontend/src/component}/mod.rs (100%) create mode 100644 frontend/src/component/root.rs create mode 100644 frontend/src/lib.rs rename {src/frontend => frontend/src}/main.rs (53%) create mode 100644 frontend/src/route.rs rename {src/frontend/services => frontend/src/service}/cookie.rs (83%) create mode 100644 frontend/src/service/log.rs rename {src/frontend/services => frontend/src/service}/mod.rs (55%) rename {src/frontend/services => frontend/src/service}/router.rs (89%) create mode 100644 frontend/src/service/session_timer.rs create mode 100644 frontend/src/service/uikit.rs create mode 100644 frontend/src/string.rs rename {src/frontend => frontend/src}/style.scss (100%) create mode 100644 frontend/static/css/style.css create mode 100644 frontend/static/favicon.ico rename {static => frontend/static}/index.html (75%) delete mode 100644 src/backend/database/mod.rs delete mode 100644 src/backend/database/models.rs delete mode 100644 src/backend/mod.rs delete mode 100644 src/backend/token.rs delete mode 100644 src/backend/websocket.rs delete mode 100644 src/frontend/components/content.rs delete mode 100644 src/frontend/components/login.rs delete mode 100644 src/frontend/components/root.rs delete mode 100644 src/frontend/mod.rs delete mode 100644 src/frontend/routes.rs delete mode 100644 src/frontend/services/protocol.rs delete mode 100644 src/frontend/services/websocket.rs delete mode 100644 src/protocol.capnp create mode 100644 src/protocol/mod.rs create mode 100644 src/protocol/model.rs create mode 100644 src/protocol/request.rs create mode 100644 src/protocol/response.rs rename src/{backend/database => }/schema.rs (68%) delete mode 100644 static/css/style.css delete mode 100644 tests/backend.rs diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000..3dc3e66b3 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,112 @@ +--- +version: 2 +defaults: &defaults + docker: + - image: saschagrunert/build-rust:latest +workflows: + version: 2 + pipeline: + jobs: + - build + - doc + - rustfmt + - clippy + - test +jobs: + build: + <<: *defaults + steps: + - checkout + - run: + name: Version information + command: | + rustc --version + rustup --version + cargo --version + - restore_cache: + keys: + - build-cache-{{ arch }}-{{ checksum "Cargo.lock" }} + - run: + name: Build all targets + command: make build-backend build-frontend + - save_cache: + paths: + - /root/.cargo/registry + - target + key: build-cache-{{ arch }}-{{ checksum "Cargo.lock" }} + doc: + <<: *defaults + steps: + - add_ssh_keys: + fingerprints: + - c2:05:c6:97:5c:9d:17:b7:c8:84:fa:6d:05:55:75:8a + - checkout + - run: + name: Setup git + command: | + git config --global user.email mail@saschagrunert.de + git config --global user.name "CircleCI" + - restore_cache: + keys: + - doc-cache-{{ arch }}-{{ checksum "Cargo.lock" }} + - run: + name: Build documentation + command: make build-doc + - save_cache: + paths: + - /root/.cargo/registry + - target + key: doc-cache-{{ arch }}-{{ checksum "Cargo.lock" }} + - run: + name: Deploy documentation + command: | + git fetch origin gh-pages + git checkout gh-pages + rm -rf doc + mv target/doc . + git add . + git diff-index --quiet HEAD || git commit -m 'Update documentation' + git push origin gh-pages + rustfmt: + <<: *defaults + steps: + - checkout + - run: + name: Rust Format + command: make lint-rustfmt + clippy: + <<: *defaults + steps: + - checkout + - restore_cache: + keys: + - clippy-cache-{{ arch }}-{{ checksum "Cargo.lock" }} + - run: + name: Clippy + command: make lint-clippy + - save_cache: + paths: + - /root/.cargo/registry + - target + key: clippy-cache-{{ arch }}-{{ checksum "Cargo.lock" }} + test: + docker: + - image: saschagrunert/build-rust:latest + - image: circleci/postgres:10.4-alpine + environment: + POSTGRES_USER: username + POSTGRES_DB: database + steps: + - checkout + - run: + name: Prepare database + command: | + sleep 10 + diesel migration run \ + --database-url postgres://username:@localhost/database + - run: + name: Run tests + command: make coverage + - run: + name: Upload coverage report + command: bash <(curl -s https://codecov.io/bash) diff --git a/.github/tech_stack.mdd b/.github/tech_stack.mdd deleted file mode 100644 index 02711b547..000000000 --- a/.github/tech_stack.mdd +++ /dev/null @@ -1,8 +0,0 @@ -graph TD -F[Frontend] --> Yew -F --> C[Cap'n Proto] -B[Backend] --> actix-web -B --> C -B --> D[Diesel] -D --> r2d2 -D --> PostgreSQL diff --git a/.github/tech_stack.png b/.github/tech_stack.png deleted file mode 100644 index 32db5be444914ef42717343f16947c71b7ad9814..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123996 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 /dev/null)" == "" ]]; then \ - docker build -f Dockerfile.build -t webapp-build . ;\ - fi # Build the backend docker run --rm -it -v $(PWD):/home/rust/src \ - webapp-build \ - cargo build \ - $(BACKEND_ARGS) \ - --bin backend + ekidd/rust-musl-builder:latest \ + cargo build $(BACKEND_ARGS) # Create the docker image from the executable docker build --no-cache \ --build-arg API_PORT=$(API_PORT) \ - -f Dockerfile.webapp \ -t webapp . -frontend: - cargo web start $(FRONTEND_ARGS) --auto-reload --host 0.0.0.0 +lint-clippy: + cargo clippy -- -D warnings + cargo clippy -p webapp-backend -- -D warnings + cargo clippy -p webapp-frontend -- -D warnings -run: startdb +lint-rustfmt: + cargo fmt + git diff --exit-code + +run-app: run-postgres docker run --rm \ --name webapp \ --network="host" \ -d webapp -startdb: +run-backend: run-postgres + cargo run $(BACKEND_ARGS) + +run-frontend: + cargo web start $(FRONTEND_ARGS) --auto-reload --host 0.0.0.0 + +run-postgres: if [ ! "$(shell docker ps -q -f name=postgres)" ]; then \ docker run --rm --name postgres \ -e POSTGRES_USER=$(PG_USERNAME) \ @@ -67,10 +92,18 @@ startdb: -e POSTGRES_DB=$(PG_DATABASE) \ -p 5432:5432 \ -d postgres ;\ - sleep 5 ;\ + while true; do \ + if docker logs postgres 2>&1 | grep -q "PostgreSQL init process complete"; then \ + break ;\ + fi \ + done ;\ + sleep 1; \ diesel migration run --database-url \ postgres://$(PG_USERNAME):$(PG_PASSWORD)@$(PG_HOST)/$(PG_DATABASE) ;\ fi -stopdb: +stop-app: stop-postgres + docker stop webapp + +stop-postgres: docker stop postgres diff --git a/README.md b/README.md index 895074241..801ea92c5 100644 --- a/README.md +++ b/README.md @@ -1,68 +1,71 @@ # WebApp.rs -[![Build Status](https://travis-ci.org/saschagrunert/webapp.rs.svg)](https://travis-ci.org/saschagrunert/webapp.rs) [![License MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/saschagrunert/webapp.rs/blob/master/LICENSE) [![Crates.io](https://img.shields.io/crates/v/webapp.svg)](https://crates.io/crates/webapp) + +[![CircleCI](https://circleci.com/gh/saschagrunert/webapp.rs.svg?style=svg)](https://circleci.com/gh/saschagrunert/webapp.rs) +[![Coverage](https://codecov.io/gh/saschagrunert/webapp.rs/branch/master/graph/badge.svg)](https://codecov.io/gh/saschagrunert/webapp.rs) +[![Doc](https://img.shields.io/badge/doc-webapp-orange.svg)](https://saschagrunert.github.io/webapp.rs/doc/webapp/index.html) +[![License MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/saschagrunert/webapp.rs/blob/master/LICENSE) +[![Crates.io](https://img.shields.io/crates/v/webapp.svg)](https://crates.io/crates/webapp) + ## A web application completely written in Rust -Target of this project is to write a complete web application including backend -and frontend within Rust. More background can be found -[on the related blog post](https://medium.com/@saschagrunert/a-web-application-completely-in-rust-6f6bdb6c4471). + +Target of this project is to write a complete web application including backend and frontend within Rust. + +### Blog Posts + +1. [A Web Application completely in Rust](https://medium.com/@saschagrunert/a-web-application-completely-in-rust-6f6bdb6c4471). ## Build -The following build dependencies needs to be fulfilled to support the full -feature set of this application: -- [cargo-web](https://github.com/koute/cargo-web) -- [capnproto](https://github.com/capnproto/capnproto) -- [diesel_cli](https://github.com/diesel-rs/diesel) -- [docker](https://github.com/docker/docker-ce) -- [postgresql (libpg)](https://www.postgresql.org/) +The following build dependencies needs to be fulfilled to support the full feature set of this application: -The app consist of a frontend and a backend. For getting started with hacking, -the backend can tested via `make backend`, whereas the frontend can be -tested with `make frontend`. You can adapt the application configuration -within `Config.toml` if needed. The basic frontend to backend technology stack -looks like this: +- [cargo-web](https://github.com/koute/cargo-web) +- [diesel_cli](https://github.com/diesel-rs/diesel) +- [docker](https://github.com/docker/docker-ce) +- [postgresql (libpg)](https://www.postgresql.org/) -![tech stack](.github/tech_stack.png "Technology Stack") +The app consist of a frontend and a backend. For getting started with hacking, the backend can tested via +`make run-backend`, whereas the frontend can be tested with `make run-frontend`. You can adapt the application +configuration within `Config.toml` if needed. ## Run -If both, the backend and frontend are running, you can visit the web application -at [`http://127.0.0.1:8000`](http://127.0.0.1:8000). After the successful -loading of the application you should see an authentication screen like this: -![authentication screen](.github/authentication_screen.png "Authentication Screen") +If both, the backend and frontend are running, you can visit the web application at +[`http://127.0.0.1:8000`](http://127.0.0.1:8000). After the successful loading of the application you should see an +authentication screen like this: -Now you are able to login with a matching username and password combination like -`me` (username) and `me` (password). There is currently no further user -authentication yet, but non matching combination will result in an -authentication failure. After the successfully login you should be able to see -the content of the application: +![authentication screen](.github/authentication_screen.png 'Authentication Screen') -![content screen](.github/content_screen.png "Content Screen") +Now you are able to login with a matching username and password combination like `me` (username) and `me` (password). +There is currently no further user authentication yet, but non matching combination will result in an authentication +failure. After the successfully login you should be able to see the content of the application: -The authentication should persist, even after a manual page reload. Logging out -of the application via the logout button should also work as intended. +![content screen](.github/content_screen.png 'Content Screen') + +The authentication should persist, even after a manual page reload. Logging out of the application via the logout button +should also work as intended. ### Control Flow + The complete control flow of the application looks like this: -![control screen](.github/flow_chart.png "Control Flow") +![control screen](.github/flow_chart.png 'Control Flow') ## Deploy + To deploy the application as a docker image, simply run: ```console make deploy ``` -After that you can run the application side by side with a PostgreSQL container -via: +After that you can run the application side by side with a PostgreSQL container via: ```console -make run +make run-app ``` -The application should now be accessible at -[`http://127.0.0.1:30080`](http://127.0.0.1:30080). +The application should now be accessible at [`http://127.0.0.1:30080`](http://127.0.0.1:30080). ## Contributing -You want to contribute to this project? Wow, thanks! So please just fork it and -send me a pull request. + +You want to contribute to this project? Wow, thanks! So please just fork it and send me a pull request. diff --git a/backend/Cargo.toml b/backend/Cargo.toml new file mode 100644 index 000000000..1ec4d84d1 --- /dev/null +++ b/backend/Cargo.toml @@ -0,0 +1,44 @@ +[package] +authors = ["Sascha Grunert "] +categories = ["web-programming"] +description = "A web application completely written in Rust" +documentation = "https://docs.rs/webapp" +homepage = "https://github.com/saschagrunert/webapp.rs" +keywords = ["web", "app", "website", "webapp", "wasm", "webassembly"] +license = "MIT" +name = "webapp-backend" +readme = "README.md" +repository = "https://github.com/saschagrunert/webapp.rs" +version = "0.1.0" + +[badges] +travis-ci = { repository = "saschagrunert/webapp.rs", branch = "master" } + +[[bin]] +name = "backend" +path = "src/main.rs" + +[dev-dependencies] +lazy_static = "1.0.2" +reqwest = "0.8.6" + +[dependencies] +actix = "0.7.2" +actix-web = { version = "=0.7.1", features = ["alpn"] } +bytes = "0.4.9" +diesel = { version = "1.3.2", features = ["r2d2", "postgres"] } +env_logger = "0.5.11" +failure = "0.1.1" +futures = "0.1.23" +jsonwebtoken = "4.0.1" +log = "0.4.3" +num_cpus = "1.8.0" +openssl = "0.10.10" +r2d2 = "0.8.2" +serde = "1.0.70" +serde_cbor = "0.8.2" +serde_derive = "1.0.70" +time = "0.1.40" +toml = "0.4.6" +uuid = { version = "0.6.5", features = ["v4"] } +webapp = { path = "..", features = ["backend"] } diff --git a/backend/src/cbor.rs b/backend/src/cbor.rs new file mode 100644 index 000000000..b0d2ae22d --- /dev/null +++ b/backend/src/cbor.rs @@ -0,0 +1,79 @@ +//! Cbor abstraction for HTTP message handling + +use actix_web::{ + dev::HttpResponseBuilder, + error::{Error as HttpError, PayloadError}, + http::header::CONTENT_TYPE, + HttpMessage, HttpRequest, HttpResponse, ResponseError, +}; +use bytes::BytesMut; +use futures::{Future, Poll, Stream}; +use serde::{de::DeserializeOwned, Serialize}; +use serde_cbor::{error::Error as SerdeError, from_slice, to_vec}; + +#[derive(Debug, Fail)] +pub enum CborError { + #[fail(display = "Payload read error: {}", _0)] + /// Payload error + Payload(#[cause] PayloadError), + + #[fail(display = "Serialization error: {}", _0)] + /// Serialize error + Serialize(#[cause] SerdeError), + + #[fail(display = "Deserialization error: {}", _0)] + /// Deserialize error + Deserialize(#[cause] SerdeError), +} + +impl ResponseError for CborError { + fn error_response(&self) -> HttpResponse { + HttpResponse::BadRequest().into() + } +} + +impl From for CborError { + fn from(err: SerdeError) -> CborError { + CborError::Deserialize(err) + } +} + +/// A wrapped request based on a future +pub struct CborRequest(Box>); + +impl CborRequest +where + T: DeserializeOwned + 'static, +{ + pub fn new(req: &HttpRequest) -> Self { + CborRequest(Box::new( + req.payload() + .map_err(CborError::Payload) + .fold(BytesMut::new(), move |mut body, chunk| { + body.extend_from_slice(&chunk); + Ok::<_, CborError>(body) + }).and_then(|body| Ok(from_slice(&body)?)), + )) + } +} + +impl Future for CborRequest { + type Error = CborError; + type Item = T; + + fn poll(&mut self) -> Poll { + self.0.poll() + } +} + +pub trait CborResponseBuilder { + fn cbor(&mut self, value: T) -> Result; +} + +impl CborResponseBuilder for HttpResponseBuilder { + fn cbor(&mut self, value: T) -> Result { + self.header(CONTENT_TYPE, "application/cbor"); + let body = to_vec(&value).map_err(CborError::Serialize)?; + Ok(self.body(body)) + } +} diff --git a/src/backend/database/executor.rs b/backend/src/database.rs similarity index 60% rename from src/backend/database/executor.rs rename to backend/src/database.rs index 4dcb9294f..66e110644 100644 --- a/src/backend/database/executor.rs +++ b/backend/src/database.rs @@ -1,10 +1,6 @@ //! Everything related to database handling use actix::prelude::*; -use backend::{ - database::{models::Session, schema::sessions::dsl::*}, - server::ServerError, -}; use diesel::{ delete, insert_into, prelude::*, @@ -12,6 +8,7 @@ use diesel::{ update, }; use failure::Error; +use webapp::{protocol::model::Session, schema::sessions::dsl::*}; /// The database executor actor pub struct DatabaseExecutor(pub Pool>); @@ -21,9 +18,7 @@ impl Actor for DatabaseExecutor { } /// The create session message -pub struct CreateSession { - pub id: String, -} +pub struct CreateSession(pub String); impl Message for CreateSession { type Result = Result; @@ -34,18 +29,20 @@ impl Handler for DatabaseExecutor { fn handle(&mut self, msg: CreateSession, _: &mut Self::Context) -> Self::Result { // Insert the session into the database - debug!("Creating new session: {}", msg.id); - insert_into(sessions) - .values(&Session { id: msg.id }) - .get_result::(&self.0.get()?) - .map_err(|_| ServerError::InsertToken.into()) + debug!("Creating new session: {}", msg.0); + Ok(insert_into(sessions) + .values(&Session { token: msg.0 }) + .get_result::(&self.0.get()?)?) } } /// The update session message pub struct UpdateSession { - pub old_id: String, - pub new_id: String, + /// The old session token + pub old_token: String, + + /// The new session token + pub new_token: String, } impl Message for UpdateSession { @@ -57,18 +54,15 @@ impl Handler for DatabaseExecutor { fn handle(&mut self, msg: UpdateSession, _: &mut Self::Context) -> Self::Result { // Update the session - debug!("Updating session: {}", msg.old_id); - update(sessions.filter(id.eq(&msg.old_id))) - .set(id.eq(&msg.new_id)) - .get_result::(&self.0.get()?) - .map_err(|_| ServerError::UpdateToken.into()) + debug!("Updating session: {}", msg.old_token); + Ok(update(sessions.filter(token.eq(&msg.old_token))) + .set(token.eq(&msg.new_token)) + .get_result::(&self.0.get()?)?) } } -/// The delete session message -pub struct DeleteSession { - pub id: String, -} +/// The delete session message, needs a token +pub struct DeleteSession(pub String); impl Message for DeleteSession { type Result = Result<(), Error>; @@ -79,8 +73,8 @@ impl Handler for DatabaseExecutor { fn handle(&mut self, msg: DeleteSession, _: &mut Self::Context) -> Self::Result { // Delete the session - debug!("Deleting session: {}", msg.id); - delete(sessions.filter(id.eq(&msg.id))).execute(&self.0.get()?)?; + debug!("Deleting session: {}", msg.0); + delete(sessions.filter(token.eq(&msg.0))).execute(&self.0.get()?)?; Ok(()) } } diff --git a/backend/src/http/login_credentials/mod.rs b/backend/src/http/login_credentials/mod.rs new file mode 100644 index 000000000..c856a9797 --- /dev/null +++ b/backend/src/http/login_credentials/mod.rs @@ -0,0 +1,43 @@ +//! The credential based login request + +use actix::{dev::ToEnvelope, prelude::*}; +use actix_web::{error::ErrorUnauthorized, AsyncResponder, HttpRequest, HttpResponse}; +use cbor::{CborRequest, CborResponseBuilder}; +use database::CreateSession; +use futures::Future; +use http::FutureResponse; +use server::State; +use token::Token; +use webapp::protocol::{request, response}; + +mod tests; + +pub fn login_credentials(http_request: &HttpRequest>) -> FutureResponse +where + T: Actor + Handler, + ::Context: ToEnvelope, +{ + let request_clone = http_request.clone(); + CborRequest::new(http_request) + .from_err() + // Verify username and password + .and_then(|request::LoginCredentials{username, password}| { + debug!("User {} is trying to login", username); + if username.is_empty() || password.is_empty() || username != password { + return Err(ErrorUnauthorized("wrong username or password")); + } + Ok(username) + }) + // Create a new token + .and_then(|username| Ok(Token::create(&username)?)) + // Update the session in the database + .and_then(move |token| { + request_clone + .state() + .database + .send(CreateSession(token)) + .from_err() + .and_then(|result| Ok(HttpResponse::Ok().cbor(response::Login(result?))?)) + }) + .responder() +} diff --git a/backend/src/http/login_credentials/tests.rs b/backend/src/http/login_credentials/tests.rs new file mode 100644 index 000000000..993677355 --- /dev/null +++ b/backend/src/http/login_credentials/tests.rs @@ -0,0 +1,61 @@ +//! The credential based login request tests + +#![cfg(test)] + +use actix::prelude::*; +use actix_web::test::TestServer; +use database::CreateSession; +use failure::Error; +use http::{ + login_credentials::login_credentials, + tests::{execute_request, state, DatabaseExecutorMock}, +}; +use serde_cbor::to_vec; +use token::Token; +use webapp::protocol::{model::Session, request}; + +impl Handler for DatabaseExecutorMock { + type Result = Result; + + fn handle(&mut self, _: CreateSession, _: &mut Self::Context) -> Self::Result { + Ok(Session { + token: Token::create("username").unwrap(), + }) + } +} + +fn create_testserver() -> TestServer { + TestServer::build_with_state(state).start(|app| app.handler(login_credentials)) +} + +#[test] +fn succeed_to_login_with_credentials() { + // Given + let mut server = create_testserver(); + let body = to_vec(&request::LoginCredentials { + username: "username".to_owned(), + password: "username".to_owned(), + }).unwrap(); + + // When + let response = execute_request(&mut server, body); + + // Then + assert!(response.status().is_success()); +} + +#[test] +fn fail_to_login_with_wrong_credentials() { + // Given + let mut server = create_testserver(); + let body = to_vec(&request::LoginCredentials { + username: "username".to_owned(), + password: "password".to_owned(), + }).unwrap(); + + // When + let response = execute_request(&mut server, body); + + // Then + assert_eq!(response.status().is_success(), false); +} diff --git a/backend/src/http/login_session/mod.rs b/backend/src/http/login_session/mod.rs new file mode 100644 index 000000000..73e8e3698 --- /dev/null +++ b/backend/src/http/login_session/mod.rs @@ -0,0 +1,38 @@ +//! The session based login request + +use actix::{dev::ToEnvelope, prelude::*}; +use actix_web::{AsyncResponder, HttpRequest, HttpResponse}; +use cbor::{CborRequest, CborResponseBuilder}; +use database::UpdateSession; +use futures::Future; +use http::FutureResponse; +use server::State; +use token::Token; +use webapp::protocol::{model::Session, request, response}; + +mod tests; + +pub fn login_session(http_request: &HttpRequest>) -> FutureResponse +where + T: Actor + Handler, + ::Context: ToEnvelope, +{ + let request_clone = http_request.clone(); + CborRequest::new(http_request) + .from_err() + // Create a new token for the already given one + .and_then(|request::LoginSession(Session{token})| { + debug!("Session token {} wants to be renewed", token); + Ok((Token::verify(&token)?, token)) + }) + // Update the session in the database + .and_then(move |(new_token, old_token)| { + request_clone + .state() + .database + .send(UpdateSession { old_token, new_token }) + .from_err() + .and_then(|result| Ok(HttpResponse::Ok().cbor(response::Login(result?))?)) + }) + .responder() +} diff --git a/backend/src/http/login_session/tests.rs b/backend/src/http/login_session/tests.rs new file mode 100644 index 000000000..02b93ca20 --- /dev/null +++ b/backend/src/http/login_session/tests.rs @@ -0,0 +1,58 @@ +//! The session based login request tests + +#![cfg(test)] + +use actix::prelude::*; +use actix_web::test::TestServer; +use database::UpdateSession; +use failure::Error; +use http::{ + login_session::login_session, + tests::{execute_request, state, DatabaseExecutorMock}, +}; +use serde_cbor::to_vec; +use token::Token; +use webapp::protocol::{model::Session, request}; + +impl Handler for DatabaseExecutorMock { + type Result = Result; + + fn handle(&mut self, _: UpdateSession, _: &mut Self::Context) -> Self::Result { + Ok(Session { + token: Token::create("username").unwrap(), + }) + } +} + +fn create_testserver() -> TestServer { + TestServer::build_with_state(state).start(|app| app.handler(login_session)) +} + +#[test] +fn succeed_to_login_with_session() { + // Given + let mut server = create_testserver(); + let token = Token::create("username").unwrap(); + let body = to_vec(&request::LoginSession(Session { token })).unwrap(); + + // When + let response = execute_request(&mut server, body); + + // Then + assert!(response.status().is_success()); +} + +#[test] +fn fail_to_login_with_wrong_session() { + // Given + let mut server = create_testserver(); + let body = to_vec(&request::LoginSession(Session { + token: "wrong".to_owned(), + })).unwrap(); + + // When + let response = execute_request(&mut server, body); + + // Then + assert_eq!(response.status().is_success(), false); +} diff --git a/backend/src/http/logout/mod.rs b/backend/src/http/logout/mod.rs new file mode 100644 index 000000000..ccaec0fe4 --- /dev/null +++ b/backend/src/http/logout/mod.rs @@ -0,0 +1,36 @@ +//! The logout request + +use actix::{dev::ToEnvelope, prelude::*}; +use actix_web::{AsyncResponder, HttpRequest, HttpResponse}; +use cbor::{CborRequest, CborResponseBuilder}; +use database::DeleteSession; +use futures::Future; +use http::FutureResponse; +use server::State; +use webapp::protocol::{model::Session, request, response}; + +mod tests; + +pub fn logout(http_request: &HttpRequest>) -> FutureResponse +where + T: Actor + Handler, + ::Context: ToEnvelope, +{ + let request_clone = http_request.clone(); + CborRequest::new(http_request) + .from_err() + // Remove the session from the database + .and_then(move |request::Logout(Session{token})| { + debug!("Session token {} wants to be logged out", token); + request_clone + .state() + .database + .send(DeleteSession(token)) + .from_err() + .and_then(|result| { + result?; + Ok(HttpResponse::Ok().cbor(response::Logout)?) + }) + }) + .responder() +} diff --git a/backend/src/http/logout/tests.rs b/backend/src/http/logout/tests.rs new file mode 100644 index 000000000..6b0328d17 --- /dev/null +++ b/backend/src/http/logout/tests.rs @@ -0,0 +1,41 @@ +//! The logout request test + +#![cfg(test)] + +use actix::prelude::*; +use actix_web::test::TestServer; +use database::DeleteSession; +use failure::Error; +use http::{ + logout::logout, + tests::{execute_request, state, DatabaseExecutorMock}, +}; +use serde_cbor::to_vec; +use webapp::protocol::{model::Session, request}; + +impl Handler for DatabaseExecutorMock { + type Result = Result<(), Error>; + + fn handle(&mut self, _: DeleteSession, _: &mut Self::Context) -> Self::Result { + Ok(()) + } +} + +fn create_testserver() -> TestServer { + TestServer::build_with_state(state).start(|app| app.handler(logout)) +} + +#[test] +fn succeed_to_logout() { + // Given + let mut server = create_testserver(); + let body = to_vec(&request::Logout(Session { + token: "any-token".to_owned(), + })).unwrap(); + + // When + let response = execute_request(&mut server, body); + + // Then + assert!(response.status().is_success()); +} diff --git a/backend/src/http/mod.rs b/backend/src/http/mod.rs new file mode 100644 index 000000000..26c6d7ad1 --- /dev/null +++ b/backend/src/http/mod.rs @@ -0,0 +1,13 @@ +//! HTTP message handling + +pub mod login_credentials; +pub mod login_session; +pub mod logout; +mod tests; + +pub use http::{login_credentials::login_credentials, login_session::login_session, logout::logout}; + +use actix_web::{error::Error, HttpResponse}; +use futures::Future; + +pub type FutureResponse = Box>; diff --git a/backend/src/http/tests.rs b/backend/src/http/tests.rs new file mode 100644 index 000000000..460960647 --- /dev/null +++ b/backend/src/http/tests.rs @@ -0,0 +1,25 @@ +//! HTTP message test abstraction + +#![cfg(test)] + +use actix::prelude::*; +use actix_web::{client::ClientResponse, test::TestServer}; +use server::State; + +/// The mock database executor actor +pub struct DatabaseExecutorMock; + +impl Actor for DatabaseExecutorMock { + type Context = SyncContext; +} + +pub fn state() -> State { + State { + database: SyncArbiter::start(1, move || DatabaseExecutorMock), + } +} + +pub fn execute_request(server: &mut TestServer, body: Vec) -> ClientResponse { + let request = server.post().body(body).unwrap(); + server.execute(request.send()).unwrap() +} diff --git a/backend/src/lib.rs b/backend/src/lib.rs new file mode 100644 index 000000000..a4c3a6dea --- /dev/null +++ b/backend/src/lib.rs @@ -0,0 +1,32 @@ +//! The main library interface + +#![deny(missing_docs)] + +extern crate actix; +extern crate actix_web; +extern crate bytes; +extern crate diesel; +#[macro_use] +extern crate failure; +extern crate futures; +extern crate jsonwebtoken; +#[macro_use] +extern crate log; +extern crate num_cpus; +extern crate openssl; +extern crate r2d2; +extern crate serde; +extern crate serde_cbor; +#[macro_use] +extern crate serde_derive; +extern crate time; +extern crate uuid; +extern crate webapp; + +mod cbor; +mod database; +mod http; +mod server; +mod token; + +pub use server::Server; diff --git a/src/backend/main.rs b/backend/src/main.rs similarity index 86% rename from src/backend/main.rs rename to backend/src/main.rs index bf1b3e1ed..cd7a9e727 100644 --- a/src/backend/main.rs +++ b/backend/src/main.rs @@ -2,10 +2,12 @@ extern crate env_logger; extern crate failure; extern crate toml; extern crate webapp; +extern crate webapp_backend; use failure::Error; use std::{env::set_var, fs::read_to_string, process::exit}; -use webapp::{config::Config, Server, CONFIG_FILENAME}; +use webapp::{config::Config, CONFIG_FILENAME}; +use webapp_backend::Server; fn main() -> Result<(), Error> { // Parse the configuration diff --git a/src/backend/server.rs b/backend/src/server/mod.rs similarity index 51% rename from src/backend/server.rs rename to backend/src/server/mod.rs index 952e3c65f..ddae3254b 100644 --- a/src/backend/server.rs +++ b/backend/src/server/mod.rs @@ -1,32 +1,22 @@ //! Everything related to the actual server implementation use actix::{prelude::*, SystemRunner}; -use actix_web::{fs, http, middleware, server, ws, App}; -use backend::{database::executor::DatabaseExecutor, websocket::WebSocket}; -use config::Config; +use actix_web::{ + fs::StaticFiles, + http::{self, header::CONTENT_TYPE}, + middleware::{self, cors::Cors}, + server, App, +}; +use database::DatabaseExecutor; use diesel::{prelude::*, r2d2::ConnectionManager}; use failure::Error; +use http::{login_credentials, login_session, logout}; use num_cpus; use openssl::ssl::{SslAcceptor, SslFiletype, SslMethod}; use r2d2::Pool; +use webapp::config::Config; -#[derive(Debug, Fail)] -pub enum ServerError { - #[fail(display = "wrong username or password")] - WrongUsernamePassword, - - #[fail(display = "unable to create token")] - CreateToken, - - #[fail(display = "unable to verify token")] - VerifyToken, - - #[fail(display = "unable to insert token into database")] - InsertToken, - - #[fail(display = "unable to update token within database")] - UpdateToken, -} +mod tests; /// The server instance pub struct Server { @@ -34,16 +24,19 @@ pub struct Server { } /// Shared mutable application state -pub struct State { - // The database connection - pub database: Addr, +pub struct State +where + T: Actor, +{ + /// The database connection + pub database: Addr, } impl Server { /// Create a new server instance pub fn new(config: &Config) -> Result { // Build a new actor system - let runner = actix::System::new("ws"); + let runner = actix::System::new("backend"); // Start database executor actors let database_url = format!( @@ -55,14 +48,23 @@ impl Server { let db_addr = SyncArbiter::start(num_cpus::get(), move || DatabaseExecutor(pool.clone())); // Create the server + let config_clone = config.clone(); let server = server::new(move || { App::with_state(State { database: db_addr.clone(), }).middleware(middleware::Logger::default()) - .resource("/ws", |r| { - r.method(http::Method::GET).f(|r| ws::start(r, WebSocket::new())) - }) - .handler("/", fs::StaticFiles::new("static").index_file("index.html")) + .configure(|app| { + Cors::for_app(app) + .allowed_methods(vec!["GET", "POST"]) + .allowed_header(CONTENT_TYPE) + .max_age(3600) + .resource(&config_clone.api.login_credentials, |r| { + r.method(http::Method::POST).f(login_credentials) + }).resource(&config_clone.api.login_session, |r| { + r.method(http::Method::POST).f(login_session) + }).resource(&config_clone.api.logout, |r| r.method(http::Method::POST).f(logout)) + .register() + }).handler("/", StaticFiles::new(".").unwrap().index_file("index.html")) }); // Create the server url from the given configuration @@ -86,32 +88,3 @@ impl Server { self.runner.run() } } - -#[cfg(test)] -mod tests { - extern crate toml; - - use super::*; - use std::fs::read_to_string; - use CONFIG_FILENAME; - - #[test] - fn succeed_to_create_a_server() { - let config: Config = toml::from_str(&read_to_string(CONFIG_FILENAME).unwrap()).unwrap(); - assert!(Server::new(&config).is_ok()); - } - - #[test] - fn fail_to_create_a_server_with_wrong_addr() { - let mut config: Config = toml::from_str(&read_to_string(CONFIG_FILENAME).unwrap()).unwrap(); - config.server.ip = "".to_owned(); - assert!(Server::new(&config).is_err()); - } - - #[test] - fn fail_to_create_a_server_with_wrong_port() { - let mut config: Config = toml::from_str(&read_to_string(CONFIG_FILENAME).unwrap()).unwrap(); - config.server.port = "10".to_owned(); - assert!(Server::new(&config).is_err()); - } -} diff --git a/backend/src/server/tests.rs b/backend/src/server/tests.rs new file mode 100644 index 000000000..64e7d2062 --- /dev/null +++ b/backend/src/server/tests.rs @@ -0,0 +1,32 @@ +//! The Server tests + +#![cfg(test)] + +extern crate toml; + +use server::Server; +use std::fs::read_to_string; +use webapp::{config::Config, CONFIG_FILENAME}; + +fn get_config() -> Config { + toml::from_str(&read_to_string(format!("../{}", CONFIG_FILENAME)).unwrap()).unwrap() +} + +#[test] +fn succeed_to_create_a_server() { + assert!(Server::new(&get_config()).is_ok()); +} + +#[test] +fn fail_to_create_a_server_with_wrong_addr() { + let mut config = get_config(); + config.server.ip = "".to_owned(); + assert!(Server::new(&config).is_err()); +} + +#[test] +fn fail_to_create_a_server_with_wrong_port() { + let mut config = get_config(); + config.server.port = "-1".to_owned(); + assert!(Server::new(&config).is_err()); +} diff --git a/backend/src/token/mod.rs b/backend/src/token/mod.rs new file mode 100644 index 000000000..aa4ede03c --- /dev/null +++ b/backend/src/token/mod.rs @@ -0,0 +1,67 @@ +//! Everything related to web token handling + +use actix_web::{HttpResponse, ResponseError}; +use jsonwebtoken::{decode, encode, Header, Validation}; +use time::get_time; +use uuid::Uuid; + +mod tests; + +const SECRET: &[u8] = b"my_secret"; + +#[derive(Debug, Fail)] +/// Token handling related errors +pub enum TokenError { + #[fail(display = "unable to create session token")] + /// Session token creation failed + Create, + + #[fail(display = "unable to verify session token")] + /// Session token verification failed + Verify, +} + +impl ResponseError for TokenError { + fn error_response(&self) -> HttpResponse { + match self { + TokenError::Create => HttpResponse::InternalServerError().into(), + TokenError::Verify => HttpResponse::Unauthorized().into(), + } + } +} + +#[derive(Deserialize, Serialize)] +/// A web token +pub struct Token { + /// The subject of the token + sub: String, + + /// The exipration date of the token + exp: i64, + + /// The issued at field + iat: i64, + + /// The token id + jti: String, +} + +impl Token { + /// Create a new default token for a given username + pub fn create(username: &str) -> Result { + const DEFAULT_TOKEN_VALIDITY: i64 = 3600; + let claim = Token { + sub: username.to_owned(), + exp: get_time().sec + DEFAULT_TOKEN_VALIDITY, + iat: get_time().sec, + jti: Uuid::new_v4().to_string(), + }; + encode(&Header::default(), &claim, SECRET).map_err(|_| TokenError::Create) + } + + /// Verify the validity of a token and get a new one + pub fn verify(token: &str) -> Result { + let data = decode::(token, SECRET, &Validation::default()).map_err(|_| TokenError::Verify)?; + Self::create(&data.claims.sub) + } +} diff --git a/backend/src/token/tests.rs b/backend/src/token/tests.rs new file mode 100644 index 000000000..682bda179 --- /dev/null +++ b/backend/src/token/tests.rs @@ -0,0 +1,21 @@ +//! Everything related to web token handling + +#![cfg(test)] + +use token::Token; + +#[test] +fn succeed_to_create_a_token() { + assert!(Token::create("").is_ok()); +} + +#[test] +fn succeed_to_verify_a_token() { + let sut = Token::create("").unwrap(); + assert!(Token::verify(&sut).is_ok()); +} + +#[test] +fn fail_to_verify_a_wrong_token() { + assert!(Token::verify("wrong").is_err()); +} diff --git a/backend/tests/server.rs b/backend/tests/server.rs new file mode 100644 index 000000000..f63c5aeeb --- /dev/null +++ b/backend/tests/server.rs @@ -0,0 +1,155 @@ +#[macro_use] +extern crate lazy_static; +extern crate reqwest; +extern crate serde_cbor; +extern crate toml; +extern crate webapp; +extern crate webapp_backend; + +use reqwest::{Client, StatusCode}; +use serde_cbor::{from_slice, to_vec}; +use std::{fs::read_to_string, sync::Mutex, thread, time::Duration}; +use webapp::{ + config::Config, + protocol::{model::Session, request, response}, + CONFIG_FILENAME, +}; +use webapp_backend::Server; + +lazy_static! { + static ref PORT: Mutex = Mutex::new(30000); +} + +fn create_testserver() -> (String, Config) { + // Create the server thread + let config_string = read_to_string(format!("../{}", CONFIG_FILENAME)).unwrap(); + let mut config: Config = toml::from_str(&config_string).unwrap(); + let mut port = PORT.lock().unwrap(); + *port += 1; + config.server.port = port.to_string(); + config.server.tls = false; + + let config_clone = config.clone(); + thread::spawn(move || Server::new(&config_clone).unwrap().start()); + + // Wait until the server is up + thread::sleep(Duration::from_millis(300)); + + (format!("http://{}:{}", config.server.ip, config.server.port), config) +} + +#[test] +fn succeed_to_login_with_credentials() { + // Given + let (url, config) = create_testserver(); + + // When + let request = to_vec(&request::LoginCredentials { + username: "username".to_owned(), + password: "username".to_owned(), + }).unwrap(); + let mut res = Client::new() + .post(&(url + &config.api.login_credentials)) + .body(request) + .send() + .unwrap(); + let mut body = vec![]; + res.copy_to(&mut body).unwrap(); + let response::Login(session) = from_slice(&body).unwrap(); + + // Then + assert!(res.status().is_success()); + assert_eq!(session.token.len(), 211); +} + +#[test] +fn fail_to_login_with_wrong_credentials() { + // Given + let (url, config) = create_testserver(); + + // When + let request = to_vec(&request::LoginCredentials { + username: "username".to_owned(), + password: "password".to_owned(), + }).unwrap(); + let res = Client::new() + .post(&(url + &config.api.login_credentials)) + .body(request) + .send() + .unwrap(); + + // Then + assert_eq!(res.status(), StatusCode::Unauthorized); +} + +#[test] +fn succeed_to_login_with_session() { + // Given + let (url, config) = create_testserver(); + + // When + let mut request = to_vec(&request::LoginCredentials { + username: "username".to_owned(), + password: "username".to_owned(), + }).unwrap(); + let mut res = Client::new() + .post(&(url.clone() + &config.api.login_credentials)) + .body(request) + .send() + .unwrap(); + let mut body = vec![]; + res.copy_to(&mut body).unwrap(); + let response::Login(session) = from_slice(&body).unwrap(); + + request = to_vec(&request::LoginSession(session)).unwrap(); + res = Client::new() + .post(&(url + &config.api.login_session)) + .body(request) + .send() + .unwrap(); + body.clear(); + res.copy_to(&mut body).unwrap(); + let response::Login(new_session) = from_slice(&body).unwrap(); + + // Then + assert!(res.status().is_success()); + assert_eq!(new_session.token.len(), 211); +} + +#[test] +fn fail_to_login_with_wrong_session() { + // Given + let (url, config) = create_testserver(); + + // When + let request = to_vec(&request::LoginSession(Session { + token: "wrong".to_owned(), + })).unwrap(); + let res = Client::new() + .post(&(url + &config.api.login_session)) + .body(request) + .send() + .unwrap(); + + // Then + assert_eq!(res.status(), StatusCode::Unauthorized); +} + +#[test] +fn succeed_to_logout() { + // Given + let (url, config) = create_testserver(); + + // When + let request = to_vec(&request::Logout(Session { + token: "wrong".to_owned(), + })).unwrap(); + let res = Client::new() + .post(&(url + &config.api.logout)) + .body(request) + .send() + .unwrap(); + + // Then + assert!(res.status().is_success()); +} diff --git a/tls/crt.pem b/backend/tls/crt.pem similarity index 100% rename from tls/crt.pem rename to backend/tls/crt.pem diff --git a/tls/key.pem b/backend/tls/key.pem similarity index 100% rename from tls/key.pem rename to backend/tls/key.pem diff --git a/ci/install_capnp b/ci/install_capnp deleted file mode 100755 index 559da4e60..000000000 --- a/ci/install_capnp +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -curl -O https://capnproto.org/capnproto-c++-0.6.1.tar.gz -tar zxf capnproto-c++-0.6.1.tar.gz -cd capnproto-c++-0.6.1 -./configure -sudo make -j8 install diff --git a/ci/install_cargo_web b/ci/install_cargo_web deleted file mode 100755 index 2aabcf869..000000000 --- a/ci/install_cargo_web +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -IFS=$'\n\t' - -CARGO_WEB_RELEASE=$(curl -L -s -H 'Accept: application/json' https://github.com/koute/cargo-web/releases/latest) -CARGO_WEB_VERSION=$(echo "$CARGO_WEB_RELEASE" | sed -e 's/.*"tag_name":"\([^"]*\)".*/\1/') -CARGO_WEB_URL="https://github.com/koute/cargo-web/releases/download/$CARGO_WEB_VERSION/cargo-web-x86_64-unknown-linux-gnu.gz" - -echo "Downloading cargo-web from: $CARGO_WEB_URL" -curl -L "$CARGO_WEB_URL" | gzip -d > cargo-web -chmod +x cargo-web - -mkdir -p ~/.cargo/bin -mv cargo-web ~/.cargo/bin diff --git a/diesel.toml b/diesel.toml index 73effa099..750e5ba85 100644 --- a/diesel.toml +++ b/diesel.toml @@ -1,3 +1,3 @@ [print_schema] -file = "src/backend/database/schema.rs" +file = "src/schema.rs" with_docs = true diff --git a/frontend/Cargo.toml b/frontend/Cargo.toml new file mode 100644 index 000000000..e2fd91709 --- /dev/null +++ b/frontend/Cargo.toml @@ -0,0 +1,34 @@ +[package] +authors = ["Sascha Grunert "] +categories = ["web-programming"] +description = "A web application completely written in Rust" +documentation = "https://docs.rs/webapp" +homepage = "https://github.com/saschagrunert/webapp.rs" +keywords = ["web", "app", "website", "webapp", "wasm", "webassembly"] +license = "MIT" +name = "webapp-frontend" +readme = "README.md" +repository = "https://github.com/saschagrunert/webapp.rs" +version = "0.1.0" + +[badges] +travis-ci = { repository = "saschagrunert/webapp.rs", branch = "master" } + +[[bin]] +name = "app" +path = "src/main.rs" + +[build-dependencies] +failure = "0.1.1" +sass-rs = "0.2.1" +toml = "0.4.6" +webapp = { path = ".." } + +[dependencies] +failure = "0.1.1" +log = "0.4.3" +serde = "1.0.70" +serde_derive = "1.0.70" +stdweb = "0.4.8" +webapp = { path = ".." } +yew = { git = "https://github.com/DenisKolodin/yew", features = ["cbor"] } diff --git a/build.rs b/frontend/build.rs similarity index 65% rename from build.rs rename to frontend/build.rs index 0b032f184..30dcc66fe 100644 --- a/build.rs +++ b/frontend/build.rs @@ -1,12 +1,8 @@ -extern crate capnpc; extern crate failure; extern crate sass_rs; extern crate toml; +extern crate webapp; -#[macro_use] -extern crate serde_derive; - -use capnpc::CompilerCommand; use failure::Error; use sass_rs::{compile_file, Options, OutputStyle}; use std::{ @@ -15,22 +11,19 @@ use std::{ path::{Path, PathBuf}, process::Command, }; +use webapp::{config::Config, CONFIG_FILENAME}; const REPOSITORY: &str = "https://github.com/uikit/uikit.git"; -const TAG: &str = "v3.0.0-rc.9"; +const TAG: &str = "v3.0.0-rc.10"; const CSS_FILE: &str = "style.css"; const SCSS_FILE: &str = "style.scss"; -const CAPNP_FILE: &str = "protocol.capnp"; pub fn main() -> Result<(), Error> { // Prepeare UIKit and build the complete style prepare_style()?; - // Compile capnp protocol definition - prepare_capnp()?; - - // Prepare the global project configuration - prepare_config()?; + // Prepare the API URL paths + prepare_api()?; Ok(()) } @@ -68,7 +61,7 @@ fn prepare_style() -> Result<(), Error> { // Copy the scss file into the output directory target.pop(); target.push(SCSS_FILE); - copy(format!("src/frontend/{}", SCSS_FILE), &target)?; + copy(format!("src/{}", SCSS_FILE), &target)?; // Build the file let mut options = Options::default(); @@ -87,35 +80,22 @@ fn prepare_style() -> Result<(), Error> { Ok(()) } -fn prepare_capnp() -> Result<(), Error> { - CompilerCommand::new() - .file(PathBuf::from("src").join(CAPNP_FILE)) - .run()?; - - Ok(()) -} +fn prepare_api() -> Result<(), Error> { + let config: Config = toml::from_str(&read_to_string(format!("../{}", CONFIG_FILENAME))?)?; -#[derive(Deserialize)] -struct Config { - server: Server, -} + let secure_protocol = if config.server.tls { "s" } else { "" }; + let api_url = format!("http{}://{}:{}", secure_protocol, config.server.ip, config.server.port); -#[derive(Deserialize)] -struct Server { - ip: String, - port: String, - tls: bool, -} - -fn prepare_config() -> Result<(), Error> { - let config: Config = toml::from_str(&read_to_string("Config.toml")?)?; - - // Set the websocket path directly within the build target - let ws_prot = if config.server.tls { "wss" } else { "ws" }; + println!("cargo:rustc-env=API_URL={}", api_url); + println!( + "cargo:rustc-env=API_URL_LOGIN_CREDENTIALS={}{}", + api_url, config.api.login_credentials + ); println!( - "cargo:rustc-env=WS_URL={}://{}:{}/ws", - ws_prot, config.server.ip, config.server.port + "cargo:rustc-env=API_URL_LOGIN_SESSION={}{}", + api_url, config.api.login_session ); + println!("cargo:rustc-env=API_URL_LOGOUT={}{}", api_url, config.api.logout); Ok(()) } diff --git a/frontend/src/component/content.rs b/frontend/src/component/content.rs new file mode 100644 index 000000000..3ca8ac56a --- /dev/null +++ b/frontend/src/component/content.rs @@ -0,0 +1,152 @@ +//! The Main Content component + +use failure::Error; +use route::RouterTarget; +use service::{ + cookie::CookieService, + router::{self, RouterAgent}, + session_timer::{self, SessionTimerAgent}, + uikit::{NotificationStatus, UIkitService}, +}; +use string::{REQUEST_ERROR, RESPONSE_ERROR, TEXT_CONTENT, TEXT_LOGOUT}; +use webapp::protocol::{model::Session, request, response}; +use yew::{ + format::Cbor, + prelude::*, + services::{ + fetch::{self, FetchTask}, + FetchService, + }, +}; +use API_URL_LOGOUT; +use SESSION_COOKIE; + +/// Data Model for the Content component +pub struct ContentComponent { + component_link: ComponentLink, + cookie_service: CookieService, + fetch_task: Option, + logout_button_disabled: bool, + router_agent: Box>>, + session_timer_agent: Box>, + uikit_service: UIkitService, +} + +/// Available message types to process +pub enum Message { + Fetch(fetch::Response>>), + Ignore, + LogoutRequest, +} + +impl Component for ContentComponent { + type Message = Message; + type Properties = (); + + /// Initialization routine + fn create(_: Self::Properties, link: ComponentLink) -> Self { + // Guard the authentication + let mut router_agent = RouterAgent::bridge(link.send_back(|_| Message::Ignore)); + let cookie_service = CookieService::new(); + let mut session_timer_agent = SessionTimerAgent::bridge(link.send_back(|_| Message::Ignore)); + if cookie_service.get(SESSION_COOKIE).is_err() { + info!("No session token found, routing back to login"); + router_agent.send(router::Request::ChangeRoute(RouterTarget::Login.into())); + } else { + // Start the timer to keep the session active + session_timer_agent.send(session_timer::Request::Start); + } + + // Return the component + Self { + component_link: link, + cookie_service, + fetch_task: None, + logout_button_disabled: false, + router_agent, + session_timer_agent, + uikit_service: UIkitService::new(), + } + } + + fn change(&mut self, _: Self::Properties) -> ShouldRender { + true + } + + /// Called everytime when messages are received + fn update(&mut self, msg: Self::Message) -> ShouldRender { + match msg { + Message::LogoutRequest => { + if let Ok(token) = self.cookie_service.get(SESSION_COOKIE) { + // Create the logout request + match fetch::Request::post(API_URL_LOGOUT).body(Cbor(&request::Logout(Session { + token: token.to_owned(), + }))) { + Ok(body) => { + // Disable user interaction + self.logout_button_disabled = true; + + // Send the request + self.fetch_task = Some( + FetchService::new().fetch_binary(body, self.component_link.send_back(Message::Fetch)), + ); + } + _ => { + error!("Unable to create logout request"); + self.uikit_service.notify(REQUEST_ERROR, &NotificationStatus::Danger); + } + } + } else { + // It should not happen but in case there is no session cookie on logout, route + // back to login + error!("No session cookie found"); + self.router_agent + .send(router::Request::ChangeRoute(RouterTarget::Login.into())); + } + } + + // The message for all fetch responses + Message::Fetch(response) => { + let (meta, Cbor(body)) = response.into_parts(); + + // Check the response type + if meta.status.is_success() { + match body { + Ok(response::Logout) => info!("Got valid logout response"), + _ => { + warn!("Got wrong logout response"); + self.uikit_service.notify(RESPONSE_ERROR, &NotificationStatus::Danger); + } + } + } else { + warn!("Logout failed with status: {}", meta.status); + } + + // Remove the existing cookie + self.cookie_service.remove(SESSION_COOKIE); + self.session_timer_agent.send(session_timer::Request::Stop); + self.router_agent + .send(router::Request::ChangeRoute(RouterTarget::Login.into())); + self.logout_button_disabled = true; + + // Remove the ongoing task + self.fetch_task = None; + } + Message::Ignore => {} + } + true + } +} + +impl Renderable for ContentComponent { + fn view(&self) -> Html { + html! { +
+

{TEXT_CONTENT}

+ +
+ } + } +} diff --git a/frontend/src/component/login.rs b/frontend/src/component/login.rs new file mode 100644 index 000000000..2b35f0ed0 --- /dev/null +++ b/frontend/src/component/login.rs @@ -0,0 +1,176 @@ +//! The Login component + +use failure::Error; +use route::RouterTarget; +use service::{ + cookie::CookieService, + router::{self, RouterAgent}, + uikit::{NotificationStatus, UIkitService}, +}; +use string::{AUTHENTICATION_ERROR, INPUT_PASSWORD, INPUT_USERNAME, REQUEST_ERROR, RESPONSE_ERROR, TEXT_LOGIN}; +use webapp::protocol::{model::Session, request, response}; +use yew::{ + format::Cbor, + prelude::*, + services::{ + fetch::{self, FetchTask}, + FetchService, + }, +}; +use API_URL_LOGIN_CREDENTIALS; +use SESSION_COOKIE; + +/// Data Model for the Login component +pub struct LoginComponent { + component_link: ComponentLink, + cookie_service: CookieService, + fetch_task: Option, + inputs_disabled: bool, + login_button_disabled: bool, + password: String, + router_agent: Box>>, + uikit_service: UIkitService, + username: String, +} + +/// Available message types to process +pub enum Message { + Fetch(fetch::Response>>), + Ignore, + LoginRequest, + UpdatePassword(String), + UpdateUsername(String), +} + +impl Component for LoginComponent { + type Message = Message; + type Properties = (); + + /// Initialization routine + fn create(_: Self::Properties, link: ComponentLink) -> Self { + // Return the component + Self { + cookie_service: CookieService::new(), + fetch_task: None, + inputs_disabled: false, + login_button_disabled: true, + password: String::new(), + router_agent: RouterAgent::bridge(link.send_back(|_| Message::Ignore)), + component_link: link, + uikit_service: UIkitService::new(), + username: String::new(), + } + } + + fn change(&mut self, _: Self::Properties) -> ShouldRender { + true + } + + /// Called everytime when messages are received + fn update(&mut self, msg: Self::Message) -> ShouldRender { + match msg { + // Login via username and password + Message::LoginRequest => { + match fetch::Request::post(API_URL_LOGIN_CREDENTIALS).body(Cbor(&request::LoginCredentials { + username: self.username.to_owned(), + password: self.password.to_owned(), + })) { + Ok(body) => { + // Disable user interaction + self.login_button_disabled = true; + self.inputs_disabled = true; + + // Send the request + self.fetch_task = + Some(FetchService::new().fetch_binary(body, self.component_link.send_back(Message::Fetch))); + } + _ => { + error!("Unable to create credentials login request"); + self.uikit_service.notify(REQUEST_ERROR, &NotificationStatus::Danger); + } + } + } + + Message::UpdateUsername(new_username) => { + self.username = new_username; + self.update_button_state(); + } + Message::UpdatePassword(new_password) => { + self.password = new_password; + self.update_button_state(); + } + + // The message for all fetch responses + Message::Fetch(response) => { + let (meta, Cbor(body)) = response.into_parts(); + + // Check the response type + if meta.status.is_success() { + match body { + Ok(response::Login(Session { token })) => { + info!("Credential based login succeed"); + + // Set the retrieved session cookie + self.cookie_service.set(SESSION_COOKIE, &token); + + // Route to the content component + self.router_agent + .send(router::Request::ChangeRoute(RouterTarget::Content.into())); + } + _ => { + warn!("Got wrong credentials login response"); + self.uikit_service.notify(RESPONSE_ERROR, &NotificationStatus::Danger); + } + } + } else { + // Authentication failed + warn!("Credentials login failed with status: {}", meta.status); + self.uikit_service + .notify(AUTHENTICATION_ERROR, &NotificationStatus::Warning); + self.login_button_disabled = false; + self.inputs_disabled = false; + } + + // Remove the ongoing task + self.fetch_task = None; + } + Message::Ignore => {} + } + true + } +} + +impl LoginComponent { + fn update_button_state(&mut self) { + self.login_button_disabled = self.username.is_empty() || self.password.is_empty(); + } +} + +impl Renderable for LoginComponent { + fn view(&self) -> Html { + html! { +
+

{TEXT_LOGIN}

+
+
+ + + +
+
+
+ } + } +} diff --git a/src/frontend/components/mod.rs b/frontend/src/component/mod.rs similarity index 100% rename from src/frontend/components/mod.rs rename to frontend/src/component/mod.rs diff --git a/frontend/src/component/root.rs b/frontend/src/component/root.rs new file mode 100644 index 000000000..a1f137349 --- /dev/null +++ b/frontend/src/component/root.rs @@ -0,0 +1,159 @@ +//! The Root component as main entry point of the frontend application + +use component::{content::ContentComponent, login::LoginComponent}; +use failure::Error; +use route::RouterTarget; +use service::{ + cookie::CookieService, + router::{self, Route, RouterAgent}, + uikit::{NotificationStatus, UIkitService}, +}; +use string::{REQUEST_ERROR, RESPONSE_ERROR}; +use webapp::protocol::{model::Session, request, response}; +use yew::{ + format::Cbor, + prelude::*, + services::{ + fetch::{self, FetchTask}, + FetchService, + }, +}; +use API_URL_LOGIN_SESSION; +use SESSION_COOKIE; + +/// Data Model for the Root Component +pub struct RootComponent { + child_component: RouterTarget, + cookie_service: CookieService, + fetch_task: Option, + router_agent: Box>>, + uikit_service: UIkitService, +} + +/// Available message types to process +pub enum Message { + Fetch(fetch::Response>>), + Route(Route<()>), +} + +impl Component for RootComponent { + type Message = Message; + type Properties = (); + + fn create(_: Self::Properties, link: ComponentLink) -> Self { + // Create needed services + let cookie_service = CookieService::new(); + let mut fetch_task = None; + let mut router_agent = RouterAgent::bridge(link.send_back(Message::Route)); + let uikit_service = UIkitService::new(); + + // Verify if a session cookie already exist and try to authenticate if so + if let Ok(token) = cookie_service.get(SESSION_COOKIE) { + match fetch::Request::post(API_URL_LOGIN_SESSION).body(Cbor(&request::LoginSession(Session { + token: token.to_owned(), + }))) { + Ok(body) => fetch_task = Some(FetchService::new().fetch_binary(body, link.send_back(Message::Fetch))), + Err(_) => { + error!("Unable to create session login request"); + uikit_service.notify(REQUEST_ERROR, &NotificationStatus::Danger); + cookie_service.remove(SESSION_COOKIE); + router_agent.send(router::Request::ChangeRoute(RouterTarget::Login.into())); + } + } + } else { + info!("No token found, routing to login"); + router_agent.send(router::Request::ChangeRoute(RouterTarget::Login.into())); + } + + // Return the component + Self { + child_component: RouterTarget::Loading, + cookie_service, + fetch_task, + router_agent, + uikit_service, + } + } + + fn change(&mut self, _: Self::Properties) -> ShouldRender { + true + } + + fn update(&mut self, msg: Self::Message) -> ShouldRender { + match msg { + // Route to the appropriate child component + Message::Route(route) => self.child_component = route.into(), + + // The message for all fetch responses + Message::Fetch(response) => { + let (meta, Cbor(body)) = response.into_parts(); + + // Check the response type + if meta.status.is_success() { + match body { + Ok(response::Login(Session { token })) => { + info!("Session based login succeed"); + + // Set the retrieved session cookie + self.cookie_service.set(SESSION_COOKIE, &token); + + // Route to the content component + self.router_agent + .send(router::Request::ChangeRoute(RouterTarget::Content.into())); + } + _ => { + // Send an error notification to the user on any failure + warn!("Got wrong session login response"); + self.uikit_service.notify(RESPONSE_ERROR, &NotificationStatus::Danger); + self.router_agent + .send(router::Request::ChangeRoute(RouterTarget::Login.into())); + } + } + } else { + // Remove the existing cookie + warn!("Session login failed with status: {}", meta.status); + self.cookie_service.remove(SESSION_COOKIE); + self.router_agent + .send(router::Request::ChangeRoute(RouterTarget::Login.into())); + } + + // Remove the ongoing task + self.fetch_task = None; + } + } + true + } +} + +impl Renderable for RootComponent { + fn view(&self) -> Html { + self.child_component.view() + } +} + +impl Renderable for RouterTarget { + fn view(&self) -> Html { + match *self { + RouterTarget::Loading => { + html! { +
+ } + } + RouterTarget::Login => { + html! { + + } + } + RouterTarget::Content => { + html! { + + } + } + RouterTarget::Error => { + html! { +
+ } + } + } + } +} diff --git a/frontend/src/lib.rs b/frontend/src/lib.rs new file mode 100644 index 000000000..b30fb61cd --- /dev/null +++ b/frontend/src/lib.rs @@ -0,0 +1,33 @@ +//! The main library interface + +#![deny(missing_docs)] +#![recursion_limit = "512"] + +#[macro_use] +extern crate failure; +#[macro_use] +extern crate log; +extern crate serde; +#[macro_use] +extern crate serde_derive; +#[macro_use] +extern crate stdweb; +extern crate webapp; +#[macro_use] +extern crate yew; + +mod component; +mod route; +mod service; +mod string; + +pub use component::root::RootComponent; +pub use service::log::init_logger; + +/// The global session cookie name +const SESSION_COOKIE: &str = "sessionToken"; + +/// The API URLs +const API_URL_LOGIN_CREDENTIALS: &str = env!("API_URL_LOGIN_CREDENTIALS"); +const API_URL_LOGIN_SESSION: &str = env!("API_URL_LOGIN_SESSION"); +const API_URL_LOGOUT: &str = env!("API_URL_LOGOUT"); diff --git a/src/frontend/main.rs b/frontend/src/main.rs similarity index 53% rename from src/frontend/main.rs rename to frontend/src/main.rs index 170f60fbb..5c5b0c670 100644 --- a/src/frontend/main.rs +++ b/frontend/src/main.rs @@ -1,16 +1,23 @@ -extern crate webapp; +extern crate failure; +extern crate webapp_frontend; extern crate yew; -use webapp::RootComponent; +use failure::Error; +use webapp_frontend::{init_logger, RootComponent}; use yew::prelude::*; -fn main() { +fn main() -> Result<(), Error> { // Initialize the application yew::initialize(); + // Initialize the logger + init_logger()?; + // Create a new app App::::new().mount_to_body(); // Run the application for development purposes yew::run_loop(); + + Ok(()) } diff --git a/frontend/src/route.rs b/frontend/src/route.rs new file mode 100644 index 000000000..71e71857a --- /dev/null +++ b/frontend/src/route.rs @@ -0,0 +1,49 @@ +//! All available routes within this application for fragment based routing + +use service::router::Route; +use std::convert::Into; + +macro_rules! routes { + ($($x:tt => $y:expr,)*) => ( + #[derive(Debug, PartialEq)] + /// Possible child components of this one + pub enum RouterTarget { + $($x,)* + } + + /// Convert a RouterTarget into a Route + impl Into> for RouterTarget where T: Default { + fn into(self) -> Route { + Route { + fragment: Some( + match self { + $(RouterTarget::$x => $y,)* + }.into(), + ), + ..Default::default() + } + } + } + + /// Convert a Route into a RouterTarget + impl Into for Route { + fn into(self) -> RouterTarget { + match self.fragment { + Some(f) => match f.as_str() { + $($y => RouterTarget::$x,)* + _ => RouterTarget::Error, + }, + _ => RouterTarget::Error, + } + } + } + ) +} + +/// Available routes +routes! { + Error => "/error", + Loading => "/loading", + Login => "/login", + Content => "/content", +} diff --git a/src/frontend/services/cookie.rs b/frontend/src/service/cookie.rs similarity index 83% rename from src/frontend/services/cookie.rs rename to frontend/src/service/cookie.rs index 7bc55c90d..3b29ec36d 100644 --- a/src/frontend/services/cookie.rs +++ b/frontend/src/service/cookie.rs @@ -17,7 +17,8 @@ impl CookieService { CookieService } - /// Set a cookie for a given name and value for a default validity of one year + /// Set a cookie for a given name and value for a default validity of one + /// year pub fn set(&self, name: &str, value: &str) { self.set_expiring(name, value, 365) } @@ -29,21 +30,20 @@ impl CookieService { cookies .iter() .filter_map(|x| { - let name_value: Vec<_> = x.split("=").collect(); + let name_value: Vec<_> = x.split('=').collect(); match name_value.get(0) { None => None, Some(c) => { - if *c == name { + if c.trim_left() == name { name_value.get(1).map(|x| (*x).to_owned()) } else { None } } } - }) - .collect::>() + }).collect::>() .pop() - .ok_or(CookieError::NotFound.into()) + .ok_or_else(|| CookieError::NotFound.into()) } /// Remove a cookie for a given name @@ -54,7 +54,7 @@ impl CookieService { /// Set a cookie for a given name, value and validity days fn set_expiring(&self, name: &str, value: &str, days: i32) { js! { - document.cookie = @{name} + "=" + (@{value} || "") + + document.cookie = @{name} + "=" + (@{value} || "") + ";max-age=" + (@{days} * 24 * 60 * 60) + ";path=/"; } } diff --git a/frontend/src/service/log.rs b/frontend/src/service/log.rs new file mode 100644 index 000000000..17083254e --- /dev/null +++ b/frontend/src/service/log.rs @@ -0,0 +1,62 @@ +//! The log service + +use failure::Error; +use log::{set_logger, set_max_level, Level, LevelFilter, Log, Metadata, Record}; + +/// The public static logger instance +static LOGGER: LogService = LogService; + +/// Initialize the static logger +pub fn init_logger() -> Result<(), Error> { + set_logger(&LOGGER) + .map(|()| set_max_level(LevelFilter::Trace)) + .map_err(|_| format_err!("Logger init failed")) +} + +/// The service used for logging purposes +struct LogService; + +impl Log for LogService { + fn enabled(&self, metadata: &Metadata) -> bool { + metadata.level() <= Level::Trace + } + + fn log(&self, record: &Record) { + // Verify that the logger is enabled + if self.enabled(record.metadata()) { + // Create the log entry + let mut log_entry = format!("%c{}: %c", record.level()); + + // Add file and line if available + if let (Some(file), Some(line)) = (record.file(), record.line()) { + log_entry += &format!("{}:{}: ", file, line); + } + + // Add the body + log_entry += &format!("{}", record.args()); + + // Log the entry + const BOLD: &str = "font-weight: bold"; + const NORMAL: &str = "font-weight: normal"; + match record.level() { + Level::Error => { + js! { console.error(@{log_entry}, @{BOLD}, @{NORMAL}) } + } + Level::Warn => { + js! { console.warn(@{log_entry}, @{BOLD}, @{NORMAL}) } + } + Level::Info => { + js! { console.log(@{log_entry}, @{BOLD}, @{NORMAL}) } + } + Level::Debug => { + js! { console.debug(@{log_entry}, @{BOLD}, @{NORMAL}) } + } + Level::Trace => { + js! { console.debug(@{log_entry}, @{BOLD}, @{NORMAL}) } + } + } + } + } + + fn flush(&self) {} +} diff --git a/src/frontend/services/mod.rs b/frontend/src/service/mod.rs similarity index 55% rename from src/frontend/services/mod.rs rename to frontend/src/service/mod.rs index c2a4f8a6c..782fe988a 100644 --- a/src/frontend/services/mod.rs +++ b/frontend/src/service/mod.rs @@ -1,6 +1,7 @@ //! The main frontend services pub mod cookie; -pub mod protocol; +pub mod log; pub mod router; -pub mod websocket; +pub mod session_timer; +pub mod uikit; diff --git a/src/frontend/services/router.rs b/frontend/src/service/router.rs similarity index 89% rename from src/frontend/services/router.rs rename to frontend/src/service/router.rs index 6327633ce..007d8640b 100644 --- a/src/frontend/services/router.rs +++ b/frontend/src/service/router.rs @@ -63,9 +63,9 @@ where } fn get_route_from_location(location: &Location) -> String { - let path = location.pathname().unwrap_or("".to_owned()); - let query = location.search().unwrap_or("".to_owned()); - let fragment = location.hash().unwrap_or("".to_owned()); + let path = location.pathname().unwrap_or_else(|_| "".to_owned()); + let query = location.search().unwrap_or_else(|_| "".to_owned()); + let fragment = location.hash().unwrap_or_else(|_| "".to_owned()); format!( "{path}{query}{fragment}", path = path, @@ -95,6 +95,15 @@ where } } +impl Default for RouterService +where + T: JsSerialize + Clone + TryFrom + 'static, +{ + fn default() -> Self { + RouterService::new() + } +} + #[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)] pub struct Route { pub path_segments: Vec, @@ -124,7 +133,7 @@ where pub fn current_route(route_service: &RouterService) -> Result { // guaranteed to always start with a '/' let path = route_service.get_path()?; - let mut path_segments: Vec = path.split("/").map(String::from).collect(); + let mut path_segments: Vec = path.split('/').map(String::from).collect(); // remove empty string that is split from the first '/' path_segments.remove(0); @@ -168,10 +177,6 @@ pub enum Request { /// components to the route change. ChangeRoute(Route), - /// Changes the route using a RouteInfo struct, but does not alert - /// connected components to the route change. - ChangeRouteNoBroadcast(Route), - /// Retrieve the current route request GetCurrentRoute, } @@ -196,15 +201,14 @@ impl Agent for RouterAgent where for<'de> T: JsSerialize + Clone + Debug + TryFrom + Default + Serialize + Deserialize<'de> + 'static, { - type Reach = Context; - type Message = Message; type Input = Request; + type Message = Message; type Output = Route; + type Reach = Context; fn create(link: AgentLink) -> Self { - let callback = - link.send_back(|route_changed: (String, T)| Message::BrowserNavigationRouteChanged(route_changed)); - let mut route_service = RouterService::new(); + let callback = link.send_back(Message::BrowserNavigationRouteChanged); + let mut route_service = RouterService::default(); route_service.register_callback(callback); Self { @@ -219,7 +223,7 @@ where Message::BrowserNavigationRouteChanged((_route_string, state)) => { if let Ok(mut route) = Route::current_route(&self.route_service) { route.state = state; - for sub in self.subscribers.iter() { + for sub in &self.subscribers { self.link.response(*sub, route.clone()); } } @@ -236,15 +240,11 @@ where // get the new route. This will contain a default state object if let Ok(route) = Route::current_route(&self.route_service) { // broadcast it to all listening components - for sub in self.subscribers.iter() { + for sub in &self.subscribers { self.link.response(*sub, route.clone()); } } } - Request::ChangeRouteNoBroadcast(route) => { - let route_string: String = route.to_route_string(); - self.route_service.set_route(&route_string, route.state); - } Request::GetCurrentRoute => { if let Ok(route) = Route::current_route(&self.route_service) { self.link.response(who, route.clone()); @@ -253,10 +253,12 @@ where } } + /// Add a client to the pool of connections of this agent fn connected(&mut self, id: HandlerId) { self.subscribers.insert(id); } + /// Remove a client from the pool of connections of this agent fn disconnected(&mut self, id: HandlerId) { self.subscribers.remove(&id); } diff --git a/frontend/src/service/session_timer.rs b/frontend/src/service/session_timer.rs new file mode 100644 index 000000000..d6e6fa618 --- /dev/null +++ b/frontend/src/service/session_timer.rs @@ -0,0 +1,123 @@ +//! The SessionTimer agent + +use failure::Error; +use service::cookie::CookieService; +use std::time::Duration; +use webapp::protocol::{model::Session, request, response}; +use yew::{ + format::Cbor, + prelude::{worker::*, *}, + services::{ + fetch::{self, FetchService, FetchTask}, + IntervalService, Task, + }, +}; +use API_URL_LOGIN_SESSION; +use SESSION_COOKIE; + +/// Possible message types +pub enum Message { + Fetch(fetch::Response>>), + Update, +} + +#[derive(Deserialize, Serialize)] +/// Available timer requests +pub enum Request { + Start, + Stop, +} + +impl Transferable for Request {} + +#[derive(Deserialize, Serialize)] +/// Available reducer requests +pub struct Response; + +impl Transferable for Response {} + +pub struct SessionTimerAgent { + agent_link: AgentLink, + callback: Callback<()>, + cookie_service: CookieService, + fetch_task: Option, + timer_task: Option>, +} + +impl Agent for SessionTimerAgent { + type Input = Request; + type Message = Message; + type Output = Response; + type Reach = Context; + + /// Creates a new SessionTimerAgent + fn create(link: AgentLink) -> Self { + Self { + callback: link.send_back(|_| Message::Update), + agent_link: link, + cookie_service: CookieService::new(), + fetch_task: None, + timer_task: None, + } + } + + /// Internal update mechanism based on messages + fn update(&mut self, msg: Self::Message) { + match msg { + Message::Update => { + info!("Updating current session"); + if let Ok(token) = self.cookie_service.get(SESSION_COOKIE) { + match fetch::Request::post(API_URL_LOGIN_SESSION).body(Cbor(&request::LoginSession(Session { + token: token.to_owned(), + }))) { + Ok(body) => { + self.fetch_task = + Some(FetchService::new().fetch_binary(body, self.agent_link.send_back(Message::Fetch))) + } + Err(_) => { + warn!("Unable to create scheduled session login request"); + } + } + } + } + Message::Fetch(response) => { + let (meta, Cbor(body)) = response.into_parts(); + + // Check the response type + if meta.status.is_success() { + match body { + Ok(response::Login(Session { token })) => { + info!("Scheduled session based login succeed"); + + // Set the retrieved session cookie + self.cookie_service.set(SESSION_COOKIE, &token); + } + _ => warn!("Got wrong scheduled session login response"), + } + } else { + // Authentication failed + info!("Scheduled session login failed with status: {}", meta.status); + } + + // Remove the ongoing task + self.fetch_task = None; + } + } + } + + /// Handle incoming data requests + fn handle(&mut self, msg: Self::Input, _: HandlerId) { + match msg { + Request::Start => { + let handle = IntervalService::new().spawn(Duration::from_secs(10), self.callback.clone()); + self.timer_task = Some(Box::new(handle)); + } + Request::Stop => { + if let Some(mut task) = self.timer_task.take() { + task.cancel(); + self.timer_task = None; + } + } + } + } +} diff --git a/frontend/src/service/uikit.rs b/frontend/src/service/uikit.rs new file mode 100644 index 000000000..aa984b9e9 --- /dev/null +++ b/frontend/src/service/uikit.rs @@ -0,0 +1,39 @@ +//! UIkit related helpers + +use std::fmt; + +/// The UIkit service +pub struct UIkitService; + +/// Possible status for notifications +pub enum NotificationStatus { + Warning, + Danger, +} + +impl fmt::Display for NotificationStatus { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { + NotificationStatus::Warning => write!(f, "warning"), + NotificationStatus::Danger => write!(f, "danger"), + } + } +} + +impl UIkitService { + /// Create a new UIkitService instance + pub fn new() -> Self { + Self {} + } + + /// Create a new notification + pub fn notify(&self, message: &str, status: &NotificationStatus) { + js! { + UIkit.notification({ + message: @{message}, + status: @{status.to_string()}, + timeout: 3000, + }); + }; + } +} diff --git a/frontend/src/string.rs b/frontend/src/string.rs new file mode 100644 index 000000000..b1b2f6ad4 --- /dev/null +++ b/frontend/src/string.rs @@ -0,0 +1,18 @@ +//! String representations for the user interface + +macro_rules! strings { + ($($name:ident => $content:expr,)*) => ( + $(pub const $name: &str = $content;)* + ) +} + +strings! { + AUTHENTICATION_ERROR => "Authentication failed", + INPUT_PASSWORD => "Password", + INPUT_USERNAME => "Username", + REQUEST_ERROR => "Failed to send request to server", + RESPONSE_ERROR => "Failed to retrieve valid server response", + TEXT_CONTENT => "Content", + TEXT_LOGIN => "Login", + TEXT_LOGOUT => "Logout", +} diff --git a/src/frontend/style.scss b/frontend/src/style.scss similarity index 100% rename from src/frontend/style.scss rename to frontend/src/style.scss diff --git a/frontend/static/css/style.css b/frontend/static/css/style.css new file mode 100644 index 000000000..bae5452fa --- /dev/null +++ b/frontend/static/css/style.css @@ -0,0 +1 @@ +html{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:16px;font-weight:normal;line-height:1.5;-webkit-text-size-adjust:100%;background:#fff;color:#666}body{margin:0}a{-webkit-text-decoration-skip:objects}a:active,a:hover{outline:none}a,.uk-link{color:#1e87f0;text-decoration:none;cursor:pointer}a:hover,.uk-link:hover{color:#0f6ecd;text-decoration:underline}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}:not(pre)>code,:not(pre)>kbd,:not(pre)>samp{font-family:Consolas,monaco,monospace;font-size:.875rem;color:#f0506e;white-space:nowrap;padding:2px 6px;background:#f8f8f8}em{color:#f0506e}ins{background:#ffd;color:#666;text-decoration:none}mark{background:#ffd;color:#666}q{font-style:italic}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}audio,canvas,iframe,img,svg,video{vertical-align:middle}audio,canvas,img,video{max-width:100%;height:auto;box-sizing:border-box}svg:not(:root){overflow:hidden}img:not([src]){visibility:hidden}p,ul,ol,dl,pre,address,fieldset,figure{margin:0 0 20px 0}*+p,*+ul,*+ol,*+dl,*+pre,*+address,*+fieldset,*+figure{margin-top:20px}h1,.uk-h1,h2,.uk-h2,h3,.uk-h3,h4,.uk-h4,h5,.uk-h5,h6,.uk-h6{margin:0 0 20px 0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:normal;color:#333;text-transform:none}*+h1,*+.uk-h1,*+h2,*+.uk-h2,*+h3,*+.uk-h3,*+h4,*+.uk-h4,*+h5,*+.uk-h5,*+h6,*+.uk-h6{margin-top:40px}h1,.uk-h1{font-size:2.23125rem;line-height:1.2}h2,.uk-h2{font-size:1.7rem;line-height:1.3}h3,.uk-h3{font-size:1.5rem;line-height:1.4}h4,.uk-h4{font-size:1.25rem;line-height:1.4}h5,.uk-h5{font-size:16px;line-height:1.4}h6,.uk-h6{font-size:.875rem;line-height:1.4}@media (min-width: 960px){h1,.uk-h1{font-size:2.625rem}h2,.uk-h2{font-size:2rem}}ul,ol{padding-left:30px}ul>li>ul,ul>li>ol,ol>li>ol,ol>li>ul{margin:0}dt{font-weight:bold}dd{margin-left:0}hr,.uk-hr{box-sizing:content-box;height:0;overflow:visible;text-align:inherit;margin:0 0 20px 0;border:0;border-top:1px solid #e5e5e5}*+hr,*+.uk-hr{margin-top:20px}address{font-style:normal}blockquote{margin:0 0 20px 0;font-size:1.25rem;line-height:1.5;font-style:italic;color:#333}*+blockquote{margin-top:20px}blockquote p:last-of-type{margin-bottom:0}blockquote footer{margin-top:10px;font-size:.875rem;line-height:1.5;color:#666}blockquote footer::before{content:"— "}pre{font:.875rem / 1.5 Consolas,monaco,monospace;color:#666;-moz-tab-size:4;tab-size:4;overflow:auto;padding:10px;border:1px solid #e5e5e5;border-radius:3px;background:#fff}pre code{font-family:Consolas,monaco,monospace}::-moz-selection{background:#39f;color:#fff;text-shadow:none}::selection{background:#39f;color:#fff;text-shadow:none}details,main{display:block}summary{display:list-item}template{display:none}iframe{border:0}a,area,button,input,label,select,summary,textarea{touch-action:manipulation}.var-media-s::before{content:"640px"}.var-media-m::before{content:"960px"}.var-media-l::before{content:"1200px"}.var-media-xl::before{content:"1600px"}a.uk-link-muted,.uk-link-muted a{color:#999}a.uk-link-muted:hover,.uk-link-muted a:hover{color:#666}a.uk-link-text:not(:hover),.uk-link-text a:not(:hover){color:inherit}a.uk-link-text:hover,.uk-link-text a:hover{color:#999}a.uk-link-heading:not(:hover),.uk-link-heading a:not(:hover){color:inherit}a.uk-link-heading:hover,.uk-link-heading a:hover{color:#1e87f0;text-decoration:none}a.uk-link-reset,a.uk-link-reset:hover,.uk-link-reset a,.uk-link-reset a:hover{color:inherit !important;text-decoration:none !important}.uk-heading-primary{font-size:3rem;line-height:1.2}@media (min-width: 960px){.uk-heading-primary{font-size:3.375rem}}@media (min-width: 1200px){.uk-heading-primary{font-size:3.75rem;line-height:1.1}}.uk-heading-hero{font-size:4rem;line-height:1.1}@media (min-width: 960px){.uk-heading-hero{font-size:6rem;line-height:1}}@media (min-width: 1200px){.uk-heading-hero{font-size:8rem;line-height:1}}.uk-heading-divider{padding-bottom:10px;border-bottom:1px solid #e5e5e5}.uk-heading-bullet{position:relative}.uk-heading-bullet::before{content:"";display:inline-block;position:relative;top:calc(-0.1 * 1em);vertical-align:middle;height:.9em;margin-right:10px;border-left:5px solid #e5e5e5}.uk-heading-line{overflow:hidden}.uk-heading-line>*{display:inline-block;position:relative}.uk-heading-line>::before,.uk-heading-line>::after{content:"";position:absolute;top:calc(50% - (1px / 2));width:2000px;border-bottom:1px solid #e5e5e5}.uk-heading-line>::before{right:100%;margin-right:.6em}.uk-heading-line>::after{left:100%;margin-left:.6em}[class*='uk-divider']{border:none;margin-bottom:20px}*+[class*='uk-divider']{margin-top:20px}.uk-divider-icon{position:relative;height:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22%23e5e5e5%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:50% 50%}.uk-divider-icon::before,.uk-divider-icon::after{content:"";position:absolute;top:50%;max-width:calc(50% - (50px / 2));border-bottom:1px solid #e5e5e5}.uk-divider-icon::before{right:calc(50% + (50px / 2));width:100%}.uk-divider-icon::after{left:calc(50% + (50px / 2));width:100%}.uk-divider-small{line-height:0}.uk-divider-small::after{content:"";display:inline-block;width:100px;max-width:100%;border-top:1px solid #e5e5e5;vertical-align:top}.uk-list{padding:0;list-style:none}.uk-list>li::before,.uk-list>li::after{content:"";display:table}.uk-list>li::after{clear:both}.uk-list>li>:last-child{margin-bottom:0}.uk-list ul{margin:0;padding-left:30px;list-style:none}.uk-list>li:nth-child(n+2),.uk-list>li>ul{margin-top:10px}.uk-list-divider>li:nth-child(n+2){margin-top:10px;padding-top:10px;border-top:1px solid #e5e5e5}.uk-list-striped>li{padding:10px 10px}.uk-list-striped>li:nth-of-type(odd){border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5}.uk-list-striped>li:nth-of-type(odd){background:#f8f8f8}.uk-list-striped>li:nth-child(n+2){margin-top:0}.uk-list-bullet>li{position:relative;padding-left:calc(1.5em + 10px)}.uk-list-bullet>li::before{content:"";position:absolute;top:0;left:0;width:1.5em;height:1.5em;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%;float:left}.uk-list-large>li:nth-child(n+2),.uk-list-large>li>ul{margin-top:20px}.uk-list-large.uk-list-divider>li:nth-child(n+2){margin-top:20px;padding-top:20px}.uk-list-large.uk-list-striped>li{padding:20px 10px}.uk-list-large.uk-list-striped>li:nth-of-type(odd){border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5}.uk-list-large.uk-list-striped>li:nth-child(n+2){margin-top:0}.uk-description-list>dt{color:#333;font-size:.875rem;font-weight:normal;text-transform:uppercase}.uk-description-list>dt:nth-child(n+2){margin-top:20px}.uk-description-list-divider>dt:nth-child(n+2){margin-top:20px;padding-top:20px;border-top:1px solid #e5e5e5}.uk-table{border-collapse:collapse;border-spacing:0;width:100%;margin-bottom:20px}*+.uk-table{margin-top:20px}.uk-table th{padding:16px 12px;text-align:left;vertical-align:bottom;font-size:.875rem;font-weight:normal;color:#999;text-transform:uppercase}.uk-table td{padding:16px 12px;vertical-align:top}.uk-table td>:last-child{margin-bottom:0}.uk-table tfoot{font-size:.875rem}.uk-table caption{font-size:.875rem;text-align:left;color:#999}.uk-table-middle,.uk-table-middle td{vertical-align:middle !important}.uk-table-divider>tr:not(:first-child),.uk-table-divider>:not(:first-child)>tr,.uk-table-divider>:first-child>tr:not(:first-child){border-top:1px solid #e5e5e5}.uk-table-striped>tr:nth-of-type(odd),.uk-table-striped tbody tr:nth-of-type(odd){background:#f8f8f8;border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5}.uk-table-hover>tr:hover,.uk-table-hover tbody tr:hover{background:#ffd}.uk-table>tr.uk-active,.uk-table tbody tr.uk-active{background:#ffd}.uk-table-small th,.uk-table-small td{padding:10px 12px}.uk-table-large th,.uk-table-large td{padding:22px 12px}.uk-table-justify th:first-child,.uk-table-justify td:first-child{padding-left:0}.uk-table-justify th:last-child,.uk-table-justify td:last-child{padding-right:0}.uk-table-shrink{width:1px}.uk-table-expand{min-width:150px}.uk-table-link{padding:0 !important}.uk-table-link>a{display:block;padding:16px 12px}.uk-table-small .uk-table-link>a{padding:10px 12px}@media (max-width: 959px){.uk-table-responsive,.uk-table-responsive tbody,.uk-table-responsive th,.uk-table-responsive td,.uk-table-responsive tr{display:block}.uk-table-responsive thead{display:none}.uk-table-responsive th,.uk-table-responsive td{width:auto !important;max-width:none !important;min-width:0 !important;overflow:visible !important;white-space:normal !important}.uk-table-responsive th:not(:first-child):not(.uk-table-link),.uk-table-responsive td:not(:first-child):not(.uk-table-link),.uk-table-responsive .uk-table-link:not(:first-child)>a{padding-top:5px !important}.uk-table-responsive th:not(:last-child):not(.uk-table-link),.uk-table-responsive td:not(:last-child):not(.uk-table-link),.uk-table-responsive .uk-table-link:not(:last-child)>a{padding-bottom:5px !important}.uk-table-justify.uk-table-responsive th,.uk-table-justify.uk-table-responsive td{padding-left:0;padding-right:0}}.uk-table tbody tr{transition:background-color 0.1s linear}.uk-icon{margin:0;border:none;border-radius:0;overflow:visible;font:inherit;color:inherit;text-transform:none;padding:0;background-color:transparent;display:inline-block;fill:currentcolor;line-height:0}button.uk-icon:not(:disabled){cursor:pointer}.uk-icon::-moz-focus-inner{border:0;padding:0}.uk-icon [fill*='#']:not(.uk-preserve),.uk-icon [FILL*='#']:not(.uk-preserve){fill:currentcolor}.uk-icon [stroke*='#']:not(.uk-preserve),.uk-icon [STROKE*='#']:not(.uk-preserve){stroke:currentcolor}.uk-icon>*{transform:translate(0, 0)}.uk-icon-image{width:20px;height:20px;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;vertical-align:middle}.uk-icon-link{color:#999}.uk-icon-link:hover,.uk-icon-link:focus{color:#666;outline:none}.uk-icon-link:active,.uk-active>.uk-icon-link{color:#595959}.uk-icon-button{box-sizing:border-box;width:36px;height:36px;border-radius:500px;background:#f8f8f8;color:#999;vertical-align:middle;display:inline-flex;justify-content:center;align-items:center;transition:0.1s ease-in-out;transition-property:color, background-color}.uk-icon-button:hover,.uk-icon-button:focus{background-color:#ebebeb;color:#666;outline:none}.uk-icon-button:active,.uk-active>.uk-icon-button{background-color:#dfdfdf;color:#666}.uk-range{box-sizing:border-box;margin:0;vertical-align:middle;max-width:100%;width:100%;-webkit-appearance:none;background:transparent;padding:0}.uk-range:focus{outline:none}.uk-range::-moz-focus-outer{border:none}.uk-range::-ms-track{height:15px;background:transparent;border-color:transparent;color:transparent}.uk-range:not(:disabled)::-webkit-slider-thumb{cursor:pointer}.uk-range:not(:disabled)::-moz-range-thumb{cursor:pointer}.uk-range:not(:disabled)::-ms-thumb{cursor:pointer}.uk-range::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-7px;height:15px;width:15px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-range::-moz-range-thumb{border:none;height:15px;width:15px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-range::-ms-thumb{margin-top:0}.uk-range::-ms-thumb{border:none;height:15px;width:15px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-range::-ms-tooltip{display:none}.uk-range::-webkit-slider-runnable-track{height:3px;background:#ebebeb;border-radius:500px}.uk-range:focus::-webkit-slider-runnable-track,.uk-range:active::-webkit-slider-runnable-track{background:#d2d2d2}.uk-range::-moz-range-track{height:3px;background:#ebebeb;border-radius:500px}.uk-range:focus::-moz-range-track{background:#d2d2d2}.uk-range::-ms-fill-lower,.uk-range::-ms-fill-upper{height:3px;background:#ebebeb;border-radius:500px}.uk-range:focus::-ms-fill-lower,.uk-range:focus::-ms-fill-upper{background:#d2d2d2}.uk-input,.uk-select,.uk-textarea,.uk-radio,.uk-checkbox{box-sizing:border-box;margin:0;border-radius:0;font:inherit}.uk-input{overflow:visible}.uk-select{text-transform:none}.uk-select optgroup{font:inherit;font-weight:bold}.uk-textarea{overflow:auto}.uk-input[type="search"]::-webkit-search-cancel-button,.uk-input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}.uk-input[type="number"]::-webkit-inner-spin-button,.uk-input[type="number"]::-webkit-outer-spin-button{height:auto}.uk-input::-moz-placeholder,.uk-textarea::-moz-placeholder{opacity:1}.uk-radio:not(:disabled),.uk-checkbox:not(:disabled){cursor:pointer}.uk-fieldset{border:none;margin:0;padding:0}.uk-input,.uk-textarea{-webkit-appearance:none}.uk-input,.uk-select,.uk-textarea{max-width:100%;width:100%;border:0 none;padding:0 10px;background:#fff;color:#666;border:1px solid #e5e5e5;transition:0.2s ease-in-out;transition-property:color, background-color, border}.uk-input,.uk-select:not([multiple]):not([size]){height:40px;vertical-align:middle;display:inline-block}.uk-input:not(input),.uk-select:not(select){line-height:38px}.uk-select[multiple],.uk-select[size],.uk-textarea{padding-top:4px;padding-bottom:4px;vertical-align:top}.uk-input:focus,.uk-select:focus,.uk-textarea:focus{outline:none;background-color:#fff;color:#666;border-color:#1e87f0}.uk-input:disabled,.uk-select:disabled,.uk-textarea:disabled{background-color:#f8f8f8;color:#999;border-color:#e5e5e5}.uk-input:-ms-input-placeholder{color:#999 !important}.uk-input::placeholder{color:#999}.uk-textarea:-ms-input-placeholder{color:#999 !important}.uk-textarea::placeholder{color:#999}.uk-form-small{font-size:.875rem}.uk-form-small:not(textarea):not([multiple]):not([size]){height:30px;padding-left:8px;padding-right:8px}.uk-form-small:not(select):not(input):not(textarea){line-height:28px}.uk-form-large{font-size:1.25rem}.uk-form-large:not(textarea):not([multiple]):not([size]){height:55px;padding-left:12px;padding-right:12px}.uk-form-large:not(select):not(input):not(textarea){line-height:53px}.uk-form-danger,.uk-form-danger:focus{color:#f0506e;border-color:#f0506e}.uk-form-success,.uk-form-success:focus{color:#32d296;border-color:#32d296}.uk-form-blank{background:none;border-color:transparent}.uk-form-blank:focus{border-color:#e5e5e5;border-style:dashed}input.uk-form-width-xsmall{width:50px}select.uk-form-width-xsmall{width:75px}.uk-form-width-small{width:130px}.uk-form-width-medium{width:200px}.uk-form-width-large{width:500px}.uk-select:not([multiple]):not([size]){-webkit-appearance:none;-moz-appearance:none;padding-right:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:100% 50%}.uk-select:not([multiple]):not([size])::-ms-expand{display:none}.uk-select:not([multiple]):not([size]) option{color:#444}.uk-select:not([multiple]):not([size]):disabled{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-radio,.uk-checkbox{display:inline-block;height:16px;width:16px;overflow:hidden;margin-top:-4px;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;background-color:rgba(0,0,0,0);background-repeat:no-repeat;background-position:50% 50%;border:1px solid #ccc;transition:0.2s ease-in-out;transition-property:background-color, border}.uk-radio{border-radius:50%}.uk-radio:focus,.uk-checkbox:focus{outline:none;border-color:#1e87f0}.uk-radio:checked,.uk-checkbox:checked,.uk-checkbox:indeterminate{background-color:#1e87f0;border-color:rgba(0,0,0,0)}.uk-radio:checked:focus,.uk-checkbox:checked:focus,.uk-checkbox:indeterminate:focus{background-color:#0e6ecd}.uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23fff%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23fff%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23fff%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-radio:disabled,.uk-checkbox:disabled{background-color:#f8f8f8;border-color:#e5e5e5}.uk-radio:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23999%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:disabled:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23999%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-legend{width:100%;color:inherit;padding:0;font-size:1.5rem;line-height:1.4}.uk-form-custom{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-form-custom select,.uk-form-custom input[type="file"]{position:absolute;top:0;z-index:1;width:100%;height:100%;left:0;-webkit-appearance:none;opacity:0;cursor:pointer}.uk-form-custom input[type="file"]{font-size:500px;overflow:hidden}.uk-form-label{color:#333;font-size:.875rem}.uk-form-stacked .uk-form-label{display:block;margin-bottom:5px}@media (max-width: 959px){.uk-form-horizontal .uk-form-label{display:block;margin-bottom:5px}}@media (min-width: 960px){.uk-form-horizontal .uk-form-label{width:200px;margin-top:7px;float:left}.uk-form-horizontal .uk-form-controls{margin-left:215px}.uk-form-horizontal .uk-form-controls-text{padding-top:7px}}.uk-form-icon{position:absolute;top:0;bottom:0;left:0;width:40px;display:inline-flex;justify-content:center;align-items:center;color:#999}.uk-form-icon:hover{color:#666}.uk-form-icon:not(a):not(button):not(input){pointer-events:none}.uk-form-icon:not(.uk-form-icon-flip) ~ .uk-input{padding-left:40px !important}.uk-form-icon-flip{right:0;left:auto}.uk-form-icon-flip ~ .uk-input{padding-right:40px !important}.uk-button{margin:0;border:none;border-radius:0;overflow:visible;font:inherit;color:inherit;text-transform:none;display:inline-block;box-sizing:border-box;padding:0 30px;vertical-align:middle;font-size:.875rem;line-height:38px;text-align:center;text-decoration:none;text-transform:uppercase;transition:0.1s ease-in-out;transition-property:color, background-color, border-color}.uk-button:not(:disabled){cursor:pointer}.uk-button::-moz-focus-inner{border:0;padding:0}.uk-button:hover{text-decoration:none}.uk-button:focus{outline:none}.uk-button-default{background-color:rgba(0,0,0,0);color:#333;border:1px solid #e5e5e5}.uk-button-default:hover,.uk-button-default:focus{background-color:rgba(0,0,0,0);color:#333;border-color:#b2b2b2}.uk-button-default:active,.uk-button-default.uk-active{background-color:rgba(0,0,0,0);color:#333;border-color:#999}.uk-button-primary{background-color:#1e87f0;color:#fff;border:1px solid transparent}.uk-button-primary:hover,.uk-button-primary:focus{background-color:#0f7ae5;color:#fff}.uk-button-primary:active,.uk-button-primary.uk-active{background-color:#0e6ecd;color:#fff}.uk-button-secondary{background-color:#222;color:#fff;border:1px solid transparent}.uk-button-secondary:hover,.uk-button-secondary:focus{background-color:#151515;color:#fff}.uk-button-secondary:active,.uk-button-secondary.uk-active{background-color:#090909;color:#fff}.uk-button-danger{background-color:#f0506e;color:#fff;border:1px solid transparent}.uk-button-danger:hover,.uk-button-danger:focus{background-color:#ee395b;color:#fff}.uk-button-danger:active,.uk-button-danger.uk-active{background-color:#ec2147;color:#fff}.uk-button-default:disabled,.uk-button-primary:disabled,.uk-button-secondary:disabled,.uk-button-danger:disabled{background-color:rgba(0,0,0,0);color:#999;border-color:#e5e5e5}.uk-button-small{padding:0 15px;line-height:28px;font-size:.875rem}.uk-button-large{padding:0 40px;line-height:53px;font-size:.875rem}.uk-button-text{padding:0;line-height:1.5;background:none;color:#333;position:relative}.uk-button-text::before{content:"";position:absolute;bottom:0;left:0;right:100%;border-bottom:1px solid #333;transition:right 0.3s ease-out}.uk-button-text:hover,.uk-button-text:focus{color:#333}.uk-button-text:hover::before,.uk-button-text:focus::before{right:0}.uk-button-text:disabled{color:#999}.uk-button-text:disabled::before{display:none}.uk-button-link{padding:0;line-height:1.5;background:none;color:#1e87f0}.uk-button-link:hover,.uk-button-link:focus{color:#0f6ecd;text-decoration:underline}.uk-button-link:disabled{color:#999;text-decoration:none}.uk-button-group{display:inline-flex;vertical-align:middle;position:relative}.uk-button-group>.uk-button:nth-child(n+2),.uk-button-group>div:nth-child(n+2) .uk-button{margin-left:-1px}.uk-button-group .uk-button:hover,.uk-button-group .uk-button:focus,.uk-button-group .uk-button:active,.uk-button-group .uk-button.uk-active{position:relative;z-index:1}.uk-section{box-sizing:border-box;padding-top:40px;padding-bottom:40px}@media (min-width: 960px){.uk-section{padding-top:70px;padding-bottom:70px}}.uk-section::before,.uk-section::after{content:"";display:table}.uk-section::after{clear:both}.uk-section>:last-child{margin-bottom:0}.uk-section-xsmall{padding-top:20px;padding-bottom:20px}.uk-section-small{padding-top:40px;padding-bottom:40px}.uk-section-large{padding-top:70px;padding-bottom:70px}@media (min-width: 960px){.uk-section-large{padding-top:140px;padding-bottom:140px}}.uk-section-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width: 960px){.uk-section-xlarge{padding-top:210px;padding-bottom:210px}}.uk-section-default{background:#fff}.uk-section-muted{background:#f8f8f8}.uk-section-primary{background:#1e87f0}.uk-section-secondary{background:#222}.uk-container{box-sizing:content-box;max-width:1200px;margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}@media (min-width: 640px){.uk-container{padding-left:30px;padding-right:30px}}@media (min-width: 960px){.uk-container{padding-left:40px;padding-right:40px}}.uk-container::before,.uk-container::after{content:"";display:table}.uk-container::after{clear:both}.uk-container>:last-child{margin-bottom:0}.uk-container .uk-container{padding-left:0;padding-right:0}.uk-container-xsmall{max-width:750px}.uk-container-small{max-width:900px}.uk-container-large{max-width:1600px}.uk-container-expand{max-width:none}.uk-grid{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none}.uk-grid>*{margin:0}.uk-grid>*>:last-child{margin-bottom:0}.uk-grid{margin-left:-30px}.uk-grid>*{padding-left:30px}.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin,*+.uk-grid-margin{margin-top:30px}@media (min-width: 1200px){.uk-grid{margin-left:-40px}.uk-grid>*{padding-left:40px}.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin,*+.uk-grid-margin{margin-top:40px}}.uk-grid-small{margin-left:-15px}.uk-grid-small>*{padding-left:15px}.uk-grid+.uk-grid-small,.uk-grid-small>.uk-grid-margin,*+.uk-grid-margin-small{margin-top:15px}.uk-grid-medium{margin-left:-30px}.uk-grid-medium>*{padding-left:30px}.uk-grid+.uk-grid-medium,.uk-grid-medium>.uk-grid-margin,*+.uk-grid-margin-medium{margin-top:30px}.uk-grid-large{margin-left:-40px}.uk-grid-large>*{padding-left:40px}.uk-grid+.uk-grid-large,.uk-grid-large>.uk-grid-margin,*+.uk-grid-margin-large{margin-top:40px}@media (min-width: 1200px){.uk-grid-large{margin-left:-70px}.uk-grid-large>*{padding-left:70px}.uk-grid+.uk-grid-large,.uk-grid-large>.uk-grid-margin,*+.uk-grid-margin-large{margin-top:70px}}.uk-grid-collapse{margin-left:0}.uk-grid-collapse>*{padding-left:0}.uk-grid+.uk-grid-collapse,.uk-grid-collapse>.uk-grid-margin{margin-top:0}.uk-grid-divider>*{position:relative}.uk-grid-divider>:not(.uk-first-column)::before{content:"";position:absolute;top:0;bottom:0;border-left:1px solid #e5e5e5}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{content:"";position:absolute;left:0;right:0;border-top:1px solid #e5e5e5}.uk-grid-divider{margin-left:-60px}.uk-grid-divider>*{padding-left:60px}.uk-grid-divider>:not(.uk-first-column)::before{left:30px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-30px;left:60px}@media (min-width: 1200px){.uk-grid-divider{margin-left:-80px}.uk-grid-divider>*{padding-left:80px}.uk-grid-divider>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}}.uk-grid-divider.uk-grid-small{margin-left:-30px}.uk-grid-divider.uk-grid-small>*{padding-left:30px}.uk-grid-divider.uk-grid-small>:not(.uk-first-column)::before{left:15px}.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin{margin-top:30px}.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin::before{top:-15px;left:30px}.uk-grid-divider.uk-grid-medium{margin-left:-60px}.uk-grid-divider.uk-grid-medium>*{padding-left:60px}.uk-grid-divider.uk-grid-medium>:not(.uk-first-column)::before{left:30px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin::before{top:-30px;left:60px}.uk-grid-divider.uk-grid-large{margin-left:-80px}.uk-grid-divider.uk-grid-large>*{padding-left:80px}.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}@media (min-width: 1200px){.uk-grid-divider.uk-grid-large{margin-left:-140px}.uk-grid-divider.uk-grid-large>*{padding-left:140px}.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before{left:70px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin{margin-top:140px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-70px;left:140px}}.uk-grid-match>*,.uk-grid-item-match{display:flex;flex-wrap:wrap}.uk-grid-match>*>:not([class*='uk-width']),.uk-grid-item-match>:not([class*='uk-width']){box-sizing:border-box;width:100%;flex:auto}.uk-tile{position:relative;box-sizing:border-box;padding-left:15px;padding-right:15px;padding-top:40px;padding-bottom:40px}@media (min-width: 640px){.uk-tile{padding-left:30px;padding-right:30px}}@media (min-width: 960px){.uk-tile{padding-left:40px;padding-right:40px;padding-top:70px;padding-bottom:70px}}.uk-tile::before,.uk-tile::after{content:"";display:table}.uk-tile::after{clear:both}.uk-tile>:last-child{margin-bottom:0}.uk-tile-xsmall{padding-top:20px;padding-bottom:20px}.uk-tile-small{padding-top:40px;padding-bottom:40px}.uk-tile-large{padding-top:70px;padding-bottom:70px}@media (min-width: 960px){.uk-tile-large{padding-top:140px;padding-bottom:140px}}.uk-tile-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width: 960px){.uk-tile-xlarge{padding-top:210px;padding-bottom:210px}}.uk-tile-default{background:#fff}.uk-tile-muted{background:#f8f8f8}.uk-tile-primary{background:#1e87f0}.uk-tile-secondary{background:#222}.uk-card{position:relative;box-sizing:border-box;transition:box-shadow 0.1s ease-in-out}.uk-card-body{padding:30px 30px}.uk-card-header{padding:15px 30px}.uk-card-footer{padding:15px 30px}@media (min-width: 1200px){.uk-card-body{padding:40px 40px}.uk-card-header{padding:20px 40px}.uk-card-footer{padding:20px 40px}}.uk-card-body::before,.uk-card-body::after,.uk-card-header::before,.uk-card-header::after,.uk-card-footer::before,.uk-card-footer::after{content:"";display:table}.uk-card-body::after,.uk-card-header::after,.uk-card-footer::after{clear:both}.uk-card-body>:last-child,.uk-card-header>:last-child,.uk-card-footer>:last-child{margin-bottom:0}.uk-card-title{font-size:1.5rem;line-height:1.4}.uk-card-badge{position:absolute;top:30px;right:30px;z-index:1}.uk-card-badge:first-child+*{margin-top:0}.uk-card-hover:not(.uk-card-default):not(.uk-card-primary):not(.uk-card-secondary):hover{background:#fff;box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-card-default{background:#fff;color:#666;box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-card-default .uk-card-title{color:#333}.uk-card-default.uk-card-hover:hover{background-color:#fff;box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-card-default .uk-card-header{border-bottom:1px solid #e5e5e5}.uk-card-default .uk-card-footer{border-top:1px solid #e5e5e5}.uk-card-primary{background:#1e87f0;color:#fff;box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-card-primary .uk-card-title{color:#fff}.uk-card-primary.uk-card-hover:hover{background-color:#1e87f0;box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-card-secondary{background:#222;color:#fff;box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-card-secondary .uk-card-title{color:#fff}.uk-card-secondary.uk-card-hover:hover{background-color:#222;box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-card-small.uk-card-body,.uk-card-small .uk-card-body{padding:20px 20px}.uk-card-small .uk-card-header{padding:13px 20px}.uk-card-small .uk-card-footer{padding:13px 20px}@media (min-width: 1200px){.uk-card-large.uk-card-body,.uk-card-large .uk-card-body{padding:70px 70px}.uk-card-large .uk-card-header{padding:35px 70px}.uk-card-large .uk-card-footer{padding:35px 70px}}.uk-card-body>.uk-nav-default{margin-left:-30px;margin-right:-30px}.uk-card-body>.uk-nav-default:only-child{margin-top:-15px;margin-bottom:-15px}.uk-card-body .uk-nav-default>li>a,.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-body .uk-nav-default .uk-nav-divider{padding-left:30px;padding-right:30px}.uk-card-body .uk-nav-default .uk-nav-sub{padding-left:45px}@media (min-width: 1200px){.uk-card-body>.uk-nav-default{margin-left:-40px;margin-right:-40px}.uk-card-body>.uk-nav-default:only-child{margin-top:-25px;margin-bottom:-25px}.uk-card-body .uk-nav-default>li>a,.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-body .uk-nav-default .uk-nav-divider{padding-left:40px;padding-right:40px}.uk-card-body .uk-nav-default .uk-nav-sub{padding-left:55px}}.uk-card-small>.uk-nav-default{margin-left:-20px;margin-right:-20px}.uk-card-small>.uk-nav-default:only-child{margin-top:-5px;margin-bottom:-5px}.uk-card-small .uk-nav-default>li>a,.uk-card-small .uk-nav-default .uk-nav-header,.uk-card-small .uk-nav-default .uk-nav-divider{padding-left:20px;padding-right:20px}.uk-card-small .uk-nav-default .uk-nav-sub{padding-left:35px}@media (min-width: 1200px){.uk-card-large>.uk-nav-default{margin:0}.uk-card-large>.uk-nav-default:only-child{margin:0}.uk-card-large .uk-nav-default>li>a,.uk-card-large .uk-nav-default .uk-nav-header,.uk-card-large .uk-nav-default .uk-nav-divider{padding-left:0;padding-right:0}.uk-card-large .uk-nav-default .uk-nav-sub{padding-left:15px}}.uk-close{color:#999;transition:0.1s ease-in-out;transition-property:color, opacity}.uk-close:hover,.uk-close:focus{color:#666;outline:none}.uk-spinner>*{animation:uk-spinner-rotate 1.4s linear infinite}@keyframes uk-spinner-rotate{0%{transform:rotate(0deg)}100%{transform:rotate(270deg)}}.uk-spinner>*>*{stroke-dasharray:88px;stroke-dashoffset:0;transform-origin:center;animation:uk-spinner-dash 1.4s ease-in-out infinite;stroke-width:1;stroke-linecap:round}@keyframes uk-spinner-dash{0%{stroke-dashoffset:88px}50%{stroke-dashoffset:22px;transform:rotate(135deg)}100%{stroke-dashoffset:88px;transform:rotate(450deg)}}.uk-totop{padding:5px;color:#999;transition:color 0.1s ease-in-out}.uk-totop:hover,.uk-totop:focus{color:#666;outline:none}.uk-totop:active{color:#333}.uk-marker{padding:5px;background:#222;color:#fff;border-radius:500px}.uk-marker:hover,.uk-marker:focus{color:#fff;outline:none}.uk-alert{position:relative;margin-bottom:20px;padding:15px 29px 15px 15px;background:#f8f8f8;color:#666}*+.uk-alert{margin-top:20px}.uk-alert>:last-child{margin-bottom:0}.uk-alert-close{position:absolute;top:20px;right:15px;color:inherit;opacity:.4}.uk-alert-close:first-child+*{margin-top:0}.uk-alert-close:hover,.uk-alert-close:focus{color:inherit;opacity:.8}.uk-alert-primary{background:#d8eafc;color:#1e87f0}.uk-alert-success{background:#edfbf6;color:#32d296}.uk-alert-warning{background:#fef5ee;color:#faa05a}.uk-alert-danger{background:#fef4f6;color:#f0506e}.uk-alert h1,.uk-alert h2,.uk-alert h3,.uk-alert h4,.uk-alert h5,.uk-alert h6{color:inherit}.uk-alert a:not([class]){color:inherit;text-decoration:underline}.uk-alert a:not([class]):hover{color:inherit;text-decoration:underline}.uk-badge{box-sizing:border-box;min-width:22px;height:22px;padding:0 5px;border-radius:500px;vertical-align:middle;background:#1e87f0;color:#fff;font-size:.875rem;display:inline-flex;justify-content:center;align-items:center}.uk-badge:hover,.uk-badge:focus{color:#fff;text-decoration:none;outline:none}.uk-label{display:inline-block;padding:0 10px;background:#1e87f0;line-height:1.5;font-size:.875rem;color:#fff;vertical-align:middle;white-space:nowrap;border-radius:2px;text-transform:uppercase}.uk-label-success{background-color:#32d296;color:#fff}.uk-label-warning{background-color:#faa05a;color:#fff}.uk-label-danger{background-color:#f0506e;color:#fff}.uk-overlay{padding:30px 30px}.uk-overlay>:last-child{margin-bottom:0}.uk-overlay-default{background:rgba(255,255,255,0.8)}.uk-overlay-primary{background:rgba(34,34,34,0.8)}.uk-article::before,.uk-article::after{content:"";display:table}.uk-article::after{clear:both}.uk-article>:last-child{margin-bottom:0}.uk-article+.uk-article{margin-top:70px}.uk-article-title{font-size:2.23125rem;line-height:1.2}@media (min-width: 960px){.uk-article-title{font-size:2.625rem}}.uk-article-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-article-meta a{color:#999}.uk-article-meta a:hover{color:#666;text-decoration:none}.uk-comment-body{overflow-wrap:break-word;word-wrap:break-word}.uk-comment-header{margin-bottom:20px}.uk-comment-body::before,.uk-comment-body::after,.uk-comment-header::before,.uk-comment-header::after{content:"";display:table}.uk-comment-body::after,.uk-comment-header::after{clear:both}.uk-comment-body>:last-child,.uk-comment-header>:last-child{margin-bottom:0}.uk-comment-title{font-size:1.25rem;line-height:1.4}.uk-comment-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-comment-list{padding:0;list-style:none}.uk-comment-list>:nth-child(n+2){margin-top:70px}.uk-comment-list .uk-comment ~ ul{margin:70px 0 0 0;padding-left:30px;list-style:none}@media (min-width: 960px){.uk-comment-list .uk-comment ~ ul{padding-left:100px}}.uk-comment-list .uk-comment ~ ul>:nth-child(n+2){margin-top:70px}.uk-comment-primary{padding:30px;background-color:#f8f8f8}.uk-search{display:inline-block;position:relative;max-width:100%;margin:0}.uk-search-input::-webkit-search-cancel-button,.uk-search-input::-webkit-search-decoration{-webkit-appearance:none}.uk-search-input::-moz-placeholder{opacity:1}.uk-search-input{box-sizing:border-box;margin:0;border-radius:0;font:inherit;overflow:visible;-webkit-appearance:none;vertical-align:middle;width:100%;border:none;color:#666}.uk-search-input:focus{outline:none}.uk-search-input:-ms-input-placeholder{color:#999 !important}.uk-search-input::placeholder{color:#999}.uk-search-icon:focus{outline:none}.uk-search .uk-search-icon{position:absolute;top:0;bottom:0;left:0;display:inline-flex;justify-content:center;align-items:center;color:#999}.uk-search .uk-search-icon:hover{color:#999}.uk-search .uk-search-icon:not(a):not(button):not(input){pointer-events:none}.uk-search .uk-search-icon-flip{right:0;left:auto}.uk-search-default{width:180px}.uk-search-default .uk-search-input{height:40px;padding-left:6px;padding-right:6px;background:rgba(0,0,0,0);border:1px solid #e5e5e5}.uk-search-default .uk-search-input:focus{background-color:rgba(0,0,0,0)}.uk-search-default .uk-search-icon{width:40px}.uk-search-default .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input{padding-left:40px}.uk-search-default .uk-search-icon-flip ~ .uk-search-input{padding-right:40px}.uk-search-navbar{width:400px}.uk-search-navbar .uk-search-input{height:40px;background:rgba(0,0,0,0);font-size:1.5rem}.uk-search-navbar .uk-search-icon{width:40px}.uk-search-navbar .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input{padding-left:40px}.uk-search-navbar .uk-search-icon-flip ~ .uk-search-input{padding-right:40px}.uk-search-large{width:500px}.uk-search-large .uk-search-input{height:80px;background:rgba(0,0,0,0);font-size:2.625rem}.uk-search-large .uk-search-icon{width:80px}.uk-search-large .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input{padding-left:80px}.uk-search-large .uk-search-icon-flip ~ .uk-search-input{padding-right:80px}.uk-search-toggle{color:#999}.uk-search-toggle:hover,.uk-search-toggle:focus{color:#666}.uk-nav,.uk-nav ul{margin:0;padding:0;list-style:none}.uk-nav li>a{display:block;text-decoration:none}.uk-nav li>a:focus{outline:none}.uk-nav>li>a{padding:5px 0}ul.uk-nav-sub{padding:5px 0 5px 15px}.uk-nav-sub ul{padding-left:15px}.uk-nav-sub a{padding:2px 0}.uk-nav-parent-icon>.uk-parent>a::after{content:"";width:1.5em;height:1.5em;float:right;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23666%22%20stroke-width%3D%221.1%22%20points%3D%2210%201%204%207%2010%2013%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-nav-parent-icon>.uk-parent.uk-open>a::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23666%22%20stroke-width%3D%221.1%22%20points%3D%221%204%207%2010%2013%204%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-nav-header{padding:5px 0;text-transform:uppercase;font-size:.875rem}.uk-nav-header:not(:first-child){margin-top:20px}.uk-nav-divider{margin:5px 0}.uk-nav-default{font-size:.875rem}.uk-nav-default>li>a{color:#999}.uk-nav-default>li>a:hover,.uk-nav-default>li>a:focus{color:#666}.uk-nav-default>li.uk-active>a{color:#333}.uk-nav-default .uk-nav-header{color:#333}.uk-nav-default .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-default .uk-nav-sub a{color:#999}.uk-nav-default .uk-nav-sub a:hover,.uk-nav-default .uk-nav-sub a:focus{color:#666}.uk-nav-primary>li>a{font-size:1.5rem;line-height:1.5;color:#999}.uk-nav-primary>li>a:hover,.uk-nav-primary>li>a:focus{color:#666}.uk-nav-primary>li.uk-active>a{color:#333}.uk-nav-primary .uk-nav-header{color:#333}.uk-nav-primary .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-primary .uk-nav-sub a{color:#999}.uk-nav-primary .uk-nav-sub a:hover,.uk-nav-primary .uk-nav-sub a:focus{color:#666}.uk-nav-center{text-align:center}.uk-nav-center .uk-nav-sub,.uk-nav-center .uk-nav-sub ul{padding-left:0}.uk-nav-center.uk-nav-parent-icon>.uk-parent>a::after{position:absolute}.uk-navbar{display:flex;position:relative}.uk-navbar-container:not(.uk-navbar-transparent){background:#f8f8f8}.uk-navbar-container>::before,.uk-navbar-container>::after{display:none !important}.uk-navbar-left,.uk-navbar-right,.uk-navbar-center,.uk-navbar-center-left>*,.uk-navbar-center-right>*{display:flex;align-items:center}.uk-navbar-right{margin-left:auto}.uk-navbar-center:only-child{margin-left:auto;margin-right:auto;position:relative}.uk-navbar-center:not(:only-child){position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);z-index:990}.uk-navbar-center:not(:only-child) .uk-navbar-nav>li>a,.uk-navbar-center:not(:only-child) .uk-navbar-item,.uk-navbar-center:not(:only-child) .uk-navbar-toggle{white-space:nowrap}.uk-navbar-center-left,.uk-navbar-center-right{position:absolute;top:0}.uk-navbar-center-left{right:100%}.uk-navbar-center-right{left:100%}[class*='uk-navbar-center-'] .uk-navbar-nav>li>a,[class*='uk-navbar-center-'] .uk-navbar-item,[class*='uk-navbar-center-'] .uk-navbar-toggle{white-space:nowrap}.uk-navbar-nav{display:flex;margin:0;padding:0;list-style:none}.uk-navbar-left,.uk-navbar-right,.uk-navbar-center:only-child{flex-wrap:wrap}.uk-navbar-nav>li>a,.uk-navbar-item,.uk-navbar-toggle{display:flex;justify-content:center;align-items:center;box-sizing:border-box;height:80px;padding:0 15px;font-size:.875rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;text-decoration:none}.uk-navbar-nav>li>a{color:#999;text-transform:uppercase;transition:0.1s ease-in-out;transition-property:color, background-color}.uk-navbar-nav>li:hover>a,.uk-navbar-nav>li>a:focus,.uk-navbar-nav>li>a.uk-open{color:#666;outline:none}.uk-navbar-nav>li>a:active{color:#333}.uk-navbar-nav>li.uk-active>a{color:#333}.uk-navbar-item{color:#666}.uk-navbar-toggle{color:#999}.uk-navbar-toggle:hover,.uk-navbar-toggle:focus,.uk-navbar-toggle.uk-open{color:#666;outline:none;text-decoration:none}.uk-navbar-subtitle{font-size:.875rem}.uk-navbar-dropdown{display:none;position:absolute;z-index:1020;box-sizing:border-box;width:200px;padding:25px;background:#fff;color:#666;box-shadow:0 5px 12px rgba(0,0,0,0.15)}.uk-navbar-dropdown.uk-open{display:block}[class*='uk-navbar-dropdown-top']{margin-top:-15px}[class*='uk-navbar-dropdown-bottom']{margin-top:15px}[class*='uk-navbar-dropdown-left']{margin-left:-15px}[class*='uk-navbar-dropdown-right']{margin-left:15px}.uk-navbar-dropdown-grid{margin-left:-50px}.uk-navbar-dropdown-grid>*{padding-left:50px}.uk-navbar-dropdown-grid>.uk-grid-margin{margin-top:50px}.uk-navbar-dropdown-stack .uk-navbar-dropdown-grid>*{width:100% !important}.uk-navbar-dropdown-width-2:not(.uk-navbar-dropdown-stack){width:400px}.uk-navbar-dropdown-width-3:not(.uk-navbar-dropdown-stack){width:600px}.uk-navbar-dropdown-width-4:not(.uk-navbar-dropdown-stack){width:800px}.uk-navbar-dropdown-width-5:not(.uk-navbar-dropdown-stack){width:1000px}.uk-navbar-dropdown-dropbar{margin-top:0;margin-bottom:0;box-shadow:none}.uk-navbar-dropdown-nav{font-size:.875rem}.uk-navbar-dropdown-nav>li>a{color:#999}.uk-navbar-dropdown-nav>li>a:hover,.uk-navbar-dropdown-nav>li>a:focus{color:#666}.uk-navbar-dropdown-nav>li.uk-active>a{color:#333}.uk-navbar-dropdown-nav .uk-nav-header{color:#333}.uk-navbar-dropdown-nav .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-navbar-dropdown-nav .uk-nav-sub a{color:#999}.uk-navbar-dropdown-nav .uk-nav-sub a:hover,.uk-navbar-dropdown-nav .uk-nav-sub a:focus{color:#666}.uk-navbar-dropbar{background:#fff}.uk-navbar-dropbar-slide{position:absolute;z-index:980;left:0;right:0;box-shadow:0 5px 7px rgba(0,0,0,0.05)}.uk-navbar-container>.uk-container .uk-navbar-left{margin-left:-15px;margin-right:-15px}.uk-navbar-container>.uk-container .uk-navbar-right{margin-right:-15px}.uk-navbar-dropdown-grid>*{position:relative}.uk-navbar-dropdown-grid>:not(.uk-first-column)::before{content:"";position:absolute;top:0;bottom:0;left:25px;border-left:1px solid #e5e5e5}.uk-navbar-dropdown-grid.uk-grid-stack>.uk-grid-margin::before{content:"";position:absolute;top:-25px;left:50px;right:0;border-top:1px solid #e5e5e5}.uk-subnav{display:flex;flex-wrap:wrap;margin-left:-20px;padding:0;list-style:none}.uk-subnav>*{flex:none;padding-left:20px;position:relative}.uk-subnav>*>:first-child{display:block;color:#999;font-size:.875rem;text-transform:uppercase;transition:0.1s ease-in-out;transition-property:color, background-color}.uk-subnav>*>a:hover,.uk-subnav>*>a:focus{color:#666;text-decoration:none;outline:none}.uk-subnav>.uk-active>a{color:#333}.uk-subnav-divider>*{display:flex;align-items:center}.uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{content:"";height:1.5em;margin-left:0px;margin-right:20px;border-left:1px solid #e5e5e5}.uk-subnav-pill>*>:first-child{padding:5px 10px;background:rgba(0,0,0,0);color:#999}.uk-subnav-pill>*>a:hover,.uk-subnav-pill>*>a:focus{background-color:#f8f8f8;color:#666}.uk-subnav-pill>*>a:active{background-color:#f8f8f8;color:#666}.uk-subnav-pill>.uk-active>a{background-color:#1e87f0;color:#fff}.uk-subnav>.uk-disabled>a{color:#999}.uk-breadcrumb{display:flex;flex-wrap:wrap;padding:0;list-style:none}.uk-breadcrumb>*{flex:none}.uk-breadcrumb>*>*{display:inline-block;font-size:.875rem;color:#999}.uk-breadcrumb>*>:hover,.uk-breadcrumb>*>:focus{color:#666;text-decoration:none}.uk-breadcrumb>:last-child>*{color:#666}.uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{content:"/";display:inline-block;margin:0 20px;color:#999}.uk-pagination{display:flex;flex-wrap:wrap;margin-left:-20px;padding:0;list-style:none}.uk-pagination>*{flex:none;padding-left:20px;position:relative}.uk-pagination>*>*{display:block;color:#999;transition:color 0.1s ease-in-out}.uk-pagination>*>:hover,.uk-pagination>*>:focus{color:#666;text-decoration:none}.uk-pagination>.uk-active>*{color:#666}.uk-pagination>.uk-disabled>*{color:#999}.uk-tab{display:flex;flex-wrap:wrap;margin-left:-20px;padding:0;list-style:none;position:relative}.uk-tab::before{content:"";position:absolute;bottom:0;left:20px;right:0;border-bottom:1px solid #e5e5e5}.uk-tab>*{flex:none;padding-left:20px;position:relative}.uk-tab>*>a{display:block;text-align:center;padding:5px 10px;color:#999;border-bottom:1px solid transparent;font-size:.875rem;text-transform:uppercase;transition:color 0.1s ease-in-out}.uk-tab>*>a:hover,.uk-tab>*>a:focus{color:#666;text-decoration:none}.uk-tab>.uk-active>a{color:#333;border-color:#1e87f0}.uk-tab>.uk-disabled>a{color:#999}.uk-tab-bottom::before{top:0;bottom:auto}.uk-tab-bottom>*>a{border-top:1px solid transparent;border-bottom:none}.uk-tab-left,.uk-tab-right{flex-direction:column;margin-left:0}.uk-tab-left>*,.uk-tab-right>*{padding-left:0}.uk-tab-left::before{top:0;bottom:0;left:auto;right:0;border-left:1px solid #e5e5e5;border-bottom:none}.uk-tab-right::before{top:0;bottom:0;left:0;right:auto;border-left:1px solid #e5e5e5;border-bottom:none}.uk-tab-left>*>a{text-align:left;border-right:1px solid transparent;border-bottom:none}.uk-tab-right>*>a{text-align:left;border-left:1px solid transparent;border-bottom:none}.uk-tab .uk-dropdown{margin-left:30px}.uk-slidenav{padding:5px 10px;color:rgba(102,102,102,0.5);transition:color 0.1s ease-in-out}.uk-slidenav:hover,.uk-slidenav:focus{color:rgba(102,102,102,0.9);outline:none}.uk-slidenav:active{color:rgba(102,102,102,0.5)}.uk-slidenav-large{padding:10px 10px}.uk-slidenav-container{display:flex}.uk-dotnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-12px}.uk-dotnav>*{flex:none;padding-left:12px}.uk-dotnav>*>*{display:block;box-sizing:border-box;width:10px;height:10px;border-radius:50%;background:rgba(0,0,0,0);text-indent:100%;overflow:hidden;white-space:nowrap;border:1px solid rgba(102,102,102,0.4);transition:0.2s ease-in-out;transition-property:background-color, border-color}.uk-dotnav>*>:hover,.uk-dotnav>*>:focus{background-color:rgba(102,102,102,0.6);outline:none;border-color:rgba(0,0,0,0)}.uk-dotnav>*>:active{background-color:rgba(102,102,102,0.2);border-color:rgba(0,0,0,0)}.uk-dotnav>.uk-active>*{background-color:rgba(102,102,102,0.6);border-color:rgba(0,0,0,0)}.uk-dotnav-vertical{flex-direction:column;margin-left:0;margin-top:-12px}.uk-dotnav-vertical>*{padding-left:0;padding-top:12px}.uk-thumbnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-15px}.uk-thumbnav>*{padding-left:15px}.uk-thumbnav>*>*{display:inline-block;position:relative}.uk-thumbnav>*>*::after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(255,255,255,0.4);transition:background-color 0.1s ease-in-out}.uk-thumbnav>*>:hover,.uk-thumbnav>*>:focus{outline:none}.uk-thumbnav>*>:hover::after,.uk-thumbnav>*>:focus::after{background-color:rgba(0,0,0,0)}.uk-thumbnav>.uk-active>*::after{background-color:rgba(0,0,0,0)}.uk-thumbnav-vertical{flex-direction:column;margin-left:0;margin-top:-15px}.uk-thumbnav-vertical>*{padding-left:0;padding-top:15px}.uk-accordion{padding:0;list-style:none}.uk-accordion>:nth-child(n+2){margin-top:20px}.uk-accordion-title{display:block;font-size:1.25rem;line-height:1.4;color:#333;overflow:hidden}.uk-accordion-title::after{content:"";width:1.4em;height:1.4em;float:right;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-open>.uk-accordion-title::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-accordion-title:hover,.uk-accordion-title:focus{color:#666;text-decoration:none;outline:none}.uk-accordion-content{margin-top:20px}.uk-accordion-content::before,.uk-accordion-content::after{content:"";display:table}.uk-accordion-content::after{clear:both}.uk-accordion-content>:last-child{margin-bottom:0}.uk-drop{display:none;position:absolute;z-index:1020;box-sizing:border-box;width:300px}.uk-drop.uk-open{display:block}[class*='uk-drop-top']{margin-top:-20px}[class*='uk-drop-bottom']{margin-top:20px}[class*='uk-drop-left']{margin-left:-20px}[class*='uk-drop-right']{margin-left:20px}.uk-drop-stack .uk-drop-grid>*{width:100% !important}.uk-dropdown{display:none;position:absolute;z-index:1020;box-sizing:border-box;min-width:200px;padding:25px;background:#fff;color:#666;box-shadow:0 5px 12px rgba(0,0,0,0.15)}.uk-dropdown.uk-open{display:block}.uk-dropdown-nav{white-space:nowrap;font-size:.875rem}.uk-dropdown-nav>li>a{color:#999}.uk-dropdown-nav>li>a:hover,.uk-dropdown-nav>li>a:focus,.uk-dropdown-nav>li.uk-active>a{color:#666}.uk-dropdown-nav .uk-nav-header{color:#333}.uk-dropdown-nav .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-dropdown-nav .uk-nav-sub a{color:#999}.uk-dropdown-nav .uk-nav-sub a:hover,.uk-dropdown-nav .uk-nav-sub a:focus{color:#666}[class*='uk-dropdown-top']{margin-top:-10px}[class*='uk-dropdown-bottom']{margin-top:10px}[class*='uk-dropdown-left']{margin-left:-10px}[class*='uk-dropdown-right']{margin-left:10px}.uk-dropdown-stack .uk-dropdown-grid>*{width:100% !important}.uk-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:15px 15px;background:rgba(0,0,0,0.6);opacity:0;transition:opacity 0.15s linear}@media (min-width: 640px){.uk-modal{padding:50px 30px}}@media (min-width: 960px){.uk-modal{padding-left:40px;padding-right:40px}}.uk-modal.uk-open{opacity:1}.uk-modal-page{overflow:hidden}.uk-modal-dialog{position:relative;box-sizing:border-box;margin:0 auto;width:600px;max-width:calc(100% - 0.01px) !important;background:#fff;opacity:0;transform:translateY(-100px);transition:0.3s linear;transition-property:opacity, transform}.uk-open>.uk-modal-dialog{opacity:1;transform:translateY(0)}.uk-modal-container .uk-modal-dialog{width:1200px}.uk-modal-full{padding:0;background:none}.uk-modal-full .uk-modal-dialog{margin:0;width:100%;max-width:100%;transform:translateY(0)}.uk-modal-body{padding:30px 30px}.uk-modal-header{padding:15px 30px;background:#fff;border-bottom:1px solid #e5e5e5}.uk-modal-footer{padding:15px 30px;background:#fff;border-top:1px solid #e5e5e5}.uk-modal-body::before,.uk-modal-body::after,.uk-modal-header::before,.uk-modal-header::after,.uk-modal-footer::before,.uk-modal-footer::after{content:"";display:table}.uk-modal-body::after,.uk-modal-header::after,.uk-modal-footer::after{clear:both}.uk-modal-body>:last-child,.uk-modal-header>:last-child,.uk-modal-footer>:last-child{margin-bottom:0}.uk-modal-title{font-size:2rem;line-height:1.3}[class*='uk-modal-close-']{position:absolute;z-index:1010;top:10px;right:10px;padding:5px}[class*='uk-modal-close-']:first-child+*{margin-top:0}.uk-modal-close-outside{top:0;right:-5px;transform:translate(0, -100%);color:#fff}.uk-modal-close-outside:hover{color:#fff}@media (min-width: 960px){.uk-modal-close-outside{right:0;transform:translate(100%, -100%)}}.uk-modal-close-full{top:0;right:0;padding:20px;background:#fff}.uk-lightbox{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;background:#000;opacity:0;transition:opacity 0.15s linear}.uk-lightbox.uk-open{display:block;opacity:1}.uk-lightbox-page{overflow:hidden}.uk-lightbox-items>*{position:absolute;top:0;right:0;bottom:0;left:0;display:none;justify-content:center;align-items:center;color:rgba(255,255,255,0.7);will-change:transform, opacity}.uk-lightbox-items>*>*{max-width:100vw;max-height:100vh}.uk-lightbox-items>*>:not(iframe){width:auto;height:auto}.uk-lightbox-items>.uk-active{display:flex}.uk-lightbox-toolbar{padding:10px 10px;background:rgba(0,0,0,0.3);color:rgba(255,255,255,0.7)}.uk-lightbox-toolbar *{color:rgba(255,255,255,0.7)}.uk-lightbox-toolbar-icon{padding:5px;color:rgba(255,255,255,0.7)}.uk-lightbox-toolbar-icon:hover{color:#fff}.uk-lightbox-button{box-sizing:border-box;width:50px;height:50px;background:rgba(0,0,0,0.3);color:rgba(255,255,255,0.7);display:inline-flex;justify-content:center;align-items:center}.uk-lightbox-button:hover{color:#fff}.uk-lightbox-iframe{width:80%;height:80%}.uk-slideshow{-webkit-tap-highlight-color:transparent}.uk-slideshow-items{position:relative;z-index:0;margin:0;padding:0;list-style:none;overflow:hidden;-webkit-touch-callout:none}.uk-slideshow-items>*{position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden;will-change:transform, opacity;touch-action:pan-y}.uk-slideshow-items>:not(.uk-active){display:none}.uk-slider{-webkit-tap-highlight-color:transparent}.uk-slider-container{overflow:hidden}.uk-slider-items{will-change:transform;position:relative}.uk-slider-items:not(.uk-grid){display:flex;margin:0;padding:0;list-style:none;-webkit-touch-callout:none}.uk-slider-items.uk-grid{flex-wrap:nowrap}.uk-slider-items>*{flex:none;position:relative;touch-action:pan-y}.uk-sticky-fixed{z-index:980;box-sizing:border-box;margin:0 !important;-webkit-backface-visibility:hidden;backface-visibility:hidden}.uk-sticky[class*='uk-animation-']{animation-duration:.2s}.uk-sticky.uk-animation-reverse{animation-duration:.2s}.uk-offcanvas{display:none;position:fixed;top:0;bottom:0;left:0;z-index:1000}.uk-offcanvas-flip .uk-offcanvas{right:0;left:auto}.uk-offcanvas-bar{position:absolute;top:0;bottom:0;left:0;box-sizing:border-box;width:270px;padding:20px 20px;background:#222;overflow-y:auto;-webkit-overflow-scrolling:touch;transform:translateX(-100%)}@media (min-width: 960px){.uk-offcanvas-bar{width:350px;padding:40px 40px}}.uk-offcanvas-flip .uk-offcanvas-bar{left:auto;right:0;transform:translateX(100%)}.uk-open>.uk-offcanvas-bar{transform:translateX(0)}.uk-offcanvas-bar-animation{transition:transform 0.3s ease-out}.uk-offcanvas-reveal{position:absolute;top:0;bottom:0;left:0;width:0;overflow:hidden;transition:width 0.3s ease-out}.uk-offcanvas-reveal .uk-offcanvas-bar{transform:translateX(0)}.uk-open>.uk-offcanvas-reveal{width:270px}@media (min-width: 960px){.uk-open>.uk-offcanvas-reveal{width:350px}}.uk-offcanvas-flip .uk-offcanvas-reveal{right:0;left:auto}.uk-offcanvas-close{position:absolute;z-index:1000;top:20px;right:20px;padding:5px}.uk-offcanvas-overlay{width:100vw;touch-action:none}.uk-offcanvas-overlay::before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(0,0,0,0.1);opacity:0;transition:opacity 0.15s linear}.uk-offcanvas-overlay.uk-open::before{opacity:1}.uk-offcanvas-page,.uk-offcanvas-container{overflow-x:hidden}.uk-offcanvas-container-overlay{overflow:hidden}.uk-offcanvas-container .uk-offcanvas-content{position:relative;left:0;transition:left 0.3s ease-out;-webkit-overflow-scrolling:touch}.uk-offcanvas-overlay .uk-offcanvas-content{overflow-y:hidden}:not(.uk-offcanvas-flip)>.uk-offcanvas-content-animation{left:270px}.uk-offcanvas-flip>.uk-offcanvas-content-animation{left:-270px}@media (min-width: 960px){:not(.uk-offcanvas-flip)>.uk-offcanvas-content-animation{left:350px}.uk-offcanvas-flip>.uk-offcanvas-content-animation{left:-350px}}.uk-switcher{margin:0;padding:0;list-style:none}.uk-switcher>:not(.uk-active){display:none}.uk-switcher>*>:last-child{margin-bottom:0}.uk-leader{overflow:hidden}.uk-leader-fill::after{display:inline-block;margin-left:15px;width:0;content:attr(data-fill);white-space:nowrap}.uk-leader-fill.uk-leader-hide::after{display:none}.var-leader-fill::before{content:"."}.uk-iconnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-10px}.uk-iconnav>*{flex:none;padding-left:10px}.uk-iconnav>*>a{display:block;color:#999}.uk-iconnav>*>a:hover,.uk-iconnav>*>a:focus{color:#666;outline:none}.uk-iconnav>.uk-active>a{color:#666}.uk-iconnav-vertical{flex-direction:column;margin-left:0;margin-top:-10px}.uk-iconnav-vertical>*{padding-left:0;padding-top:10px}.uk-notification{position:fixed;top:10px;left:10px;z-index:1040;box-sizing:border-box;width:350px}.uk-notification-top-right,.uk-notification-bottom-right{left:auto;right:10px}.uk-notification-top-center,.uk-notification-bottom-center{left:50%;margin-left:-175px}.uk-notification-bottom-left,.uk-notification-bottom-right,.uk-notification-bottom-center{top:auto;bottom:10px}@media (max-width: 639px){.uk-notification{left:10px;right:10px;width:auto;margin:0}}.uk-notification-message{position:relative;margin-bottom:10px;padding:15px;background:#f8f8f8;color:#666;font-size:1.25rem;line-height:1.4;cursor:pointer}.uk-notification-close{display:none;position:absolute;top:20px;right:15px}.uk-notification-message:hover .uk-notification-close{display:block}.uk-notification-message-primary{color:#1e87f0}.uk-notification-message-success{color:#32d296}.uk-notification-message-warning{color:#faa05a}.uk-notification-message-danger{color:#f0506e}.uk-tooltip{display:none;position:absolute;z-index:1030;box-sizing:border-box;max-width:200px;padding:3px 6px;background:#666;border-radius:2px;color:#fff;font-size:12px}.uk-tooltip.uk-active{display:block}[class*='uk-tooltip-top']{margin-top:-10px}[class*='uk-tooltip-bottom']{margin-top:10px}[class*='uk-tooltip-left']{margin-left:-10px}[class*='uk-tooltip-right']{margin-left:10px}.uk-placeholder{margin-bottom:20px;padding:30px 30px;background:rgba(0,0,0,0);border:1px dashed #e5e5e5}*+.uk-placeholder{margin-top:20px}.uk-placeholder>:last-child{margin-bottom:0}.uk-progress{vertical-align:baseline;-webkit-appearance:none;-moz-appearance:none;display:block;width:100%;border:0;background-color:#f8f8f8;margin-bottom:20px;height:15px;border-radius:500px;overflow:hidden}*+.uk-progress{margin-top:20px}.uk-progress:indeterminate{color:transparent}.uk-progress::-webkit-progress-bar{background-color:#f8f8f8;border-radius:500px;overflow:hidden}.uk-progress:indeterminate::-moz-progress-bar{width:0}.uk-progress::-webkit-progress-value{background-color:#1e87f0;transition:width 0.6s ease}.uk-progress::-moz-progress-bar{background-color:#1e87f0}.uk-progress::-ms-fill{background-color:#1e87f0;transition:width 0.6s ease;border:0}.uk-sortable{position:relative}.uk-sortable>*{touch-action:none}.uk-sortable svg{pointer-events:none}.uk-sortable>:last-child{margin-bottom:0}.uk-sortable-drag{position:absolute !important;z-index:1050 !important;pointer-events:none}.uk-sortable-placeholder{opacity:0}.uk-sortable-empty{min-height:50px}.uk-sortable-handle:hover{cursor:move}.uk-countdown-number,.uk-countdown-separator{line-height:70px}.uk-countdown-number{font-size:2rem}@media (min-width: 640px){.uk-countdown-number{font-size:4rem}}@media (min-width: 960px){.uk-countdown-number{font-size:6rem}}.uk-countdown-separator{font-size:1rem}@media (min-width: 640px){.uk-countdown-separator{font-size:2rem}}@media (min-width: 960px){.uk-countdown-separator{font-size:3rem}}[class*='uk-animation-']{animation-duration:.5s;animation-timing-function:ease-out;animation-fill-mode:both}.uk-animation-reverse{animation-direction:reverse;animation-timing-function:ease-in}.uk-animation-fade{animation-name:uk-fade;animation-duration:.8s;animation-timing-function:linear}.uk-animation-scale-up{animation-name:uk-fade-scale-02}.uk-animation-scale-down{animation-name:uk-fade-scale-18}.uk-animation-slide-top{animation-name:uk-fade-top}.uk-animation-slide-bottom{animation-name:uk-fade-bottom}.uk-animation-slide-left{animation-name:uk-fade-left}.uk-animation-slide-right{animation-name:uk-fade-right}.uk-animation-slide-top-small{animation-name:uk-fade-top-small}.uk-animation-slide-bottom-small{animation-name:uk-fade-bottom-small}.uk-animation-slide-left-small{animation-name:uk-fade-left-small}.uk-animation-slide-right-small{animation-name:uk-fade-right-small}.uk-animation-slide-top-medium{animation-name:uk-fade-top-medium}.uk-animation-slide-bottom-medium{animation-name:uk-fade-bottom-medium}.uk-animation-slide-left-medium{animation-name:uk-fade-left-medium}.uk-animation-slide-right-medium{animation-name:uk-fade-right-medium}.uk-animation-kenburns{animation-name:uk-scale-kenburns;animation-duration:15s}.uk-animation-shake{animation-name:uk-shake}.uk-animation-fast{animation-duration:.1s}.uk-animation-toggle:not(:hover):not(.uk-hover) [class*='uk-animation-']{animation-name:none}@keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@keyframes uk-fade-top{0%{opacity:0;transform:translateY(-100%)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-bottom{0%{opacity:0;transform:translateY(100%)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-left{0%{opacity:0;transform:translateX(-100%)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-right{0%{opacity:0;transform:translateX(100%)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-top-small{0%{opacity:0;transform:translateY(-10px)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-bottom-small{0%{opacity:0;transform:translateY(10px)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-left-small{0%{opacity:0;transform:translateX(-10px)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-right-small{0%{opacity:0;transform:translateX(10px)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-top-medium{0%{opacity:0;transform:translateY(-50px)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-bottom-medium{0%{opacity:0;transform:translateY(50px)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-left-medium{0%{opacity:0;transform:translateX(-50px)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-right-medium{0%{opacity:0;transform:translateX(50px)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-scale-02{0%{opacity:0;transform:scale(0.2)}100%{opacity:1;transform:scale(1)}}@keyframes uk-fade-scale-18{0%{opacity:0;transform:scale(1.8)}100%{opacity:1;transform:scale(1)}}@keyframes uk-scale-kenburns{0%{transform:scale(1)}100%{transform:scale(1.2)}}@keyframes uk-shake{0%,100%{transform:translateX(0)}10%{transform:translateX(-9px)}20%{transform:translateX(8px)}30%{transform:translateX(-7px)}40%{transform:translateX(6px)}50%{transform:translateX(-5px)}60%{transform:translateX(4px)}70%{transform:translateX(-3px)}80%{transform:translateX(2px)}90%{transform:translateX(-1px)}}[class*='uk-child-width']>*{box-sizing:border-box;width:100%}.uk-child-width-1-2>*{width:50%}.uk-child-width-1-3>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4>*{width:25%}.uk-child-width-1-5>*{width:20%}.uk-child-width-1-6>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto>*{width:auto}.uk-child-width-expand>*{width:1px}.uk-child-width-expand>:not([class*='uk-width']){flex:1;min-width:0;flex-basis:1px}@media (min-width: 640px){.uk-child-width-1-1\@s>*{width:100%}.uk-child-width-1-2\@s>*{width:50%}.uk-child-width-1-3\@s>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@s>*{width:25%}.uk-child-width-1-5\@s>*{width:20%}.uk-child-width-1-6\@s>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@s>*{width:auto}.uk-child-width-expand\@s>*{width:1px}.uk-child-width-expand\@s>:not([class*='uk-width']){flex:1;min-width:0;flex-basis:1px}}@media (min-width: 960px){.uk-child-width-1-1\@m>*{width:100%}.uk-child-width-1-2\@m>*{width:50%}.uk-child-width-1-3\@m>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@m>*{width:25%}.uk-child-width-1-5\@m>*{width:20%}.uk-child-width-1-6\@m>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@m>*{width:auto}.uk-child-width-expand\@m>*{width:1px}.uk-child-width-expand\@m>:not([class*='uk-width']){flex:1;min-width:0;flex-basis:1px}}@media (min-width: 1200px){.uk-child-width-1-1\@l>*{width:100%}.uk-child-width-1-2\@l>*{width:50%}.uk-child-width-1-3\@l>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@l>*{width:25%}.uk-child-width-1-5\@l>*{width:20%}.uk-child-width-1-6\@l>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@l>*{width:auto}.uk-child-width-expand\@l>*{width:1px}.uk-child-width-expand\@l>:not([class*='uk-width']){flex:1;min-width:0;flex-basis:1px}}@media (min-width: 1600px){.uk-child-width-1-1\@xl>*{width:100%}.uk-child-width-1-2\@xl>*{width:50%}.uk-child-width-1-3\@xl>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@xl>*{width:25%}.uk-child-width-1-5\@xl>*{width:20%}.uk-child-width-1-6\@xl>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@xl>*{width:auto}.uk-child-width-expand\@xl>*{width:1px}.uk-child-width-expand\@xl>:not([class*='uk-width']){flex:1;min-width:0;flex-basis:1px}}[class*='uk-width']{box-sizing:border-box;width:100%;max-width:100%}.uk-width-1-2{width:50%}.uk-width-1-3{width:calc(100% * 1 / 3.001)}.uk-width-2-3{width:calc(100% * 2 / 3.001)}.uk-width-1-4{width:25%}.uk-width-3-4{width:75%}.uk-width-1-5{width:20%}.uk-width-2-5{width:40%}.uk-width-3-5{width:60%}.uk-width-4-5{width:80%}.uk-width-1-6{width:calc(100% * 1 / 6.001)}.uk-width-5-6{width:calc(100% * 5 / 6.001)}.uk-width-small{width:150px}.uk-width-medium{width:300px}.uk-width-large{width:450px}.uk-width-xlarge{width:600px}.uk-width-xxlarge{width:750px}.uk-width-auto{width:auto}.uk-width-expand{width:1px;flex:1;min-width:0;flex-basis:1px}@media (min-width: 640px){.uk-width-1-1\@s{width:100%}.uk-width-1-2\@s{width:50%}.uk-width-1-3\@s{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@s{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@s{width:25%}.uk-width-3-4\@s{width:75%}.uk-width-1-5\@s{width:20%}.uk-width-2-5\@s{width:40%}.uk-width-3-5\@s{width:60%}.uk-width-4-5\@s{width:80%}.uk-width-1-6\@s{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@s{width:calc(100% * 5 / 6.001)}.uk-width-small\@s{width:150px}.uk-width-medium\@s{width:300px}.uk-width-large\@s{width:450px}.uk-width-xlarge\@s{width:600px}.uk-width-xxlarge\@s{width:750px}.uk-width-auto\@s{width:auto}.uk-width-expand\@s{width:1px;flex:1;min-width:0;flex-basis:1px}}@media (min-width: 960px){.uk-width-1-1\@m{width:100%}.uk-width-1-2\@m{width:50%}.uk-width-1-3\@m{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@m{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@m{width:25%}.uk-width-3-4\@m{width:75%}.uk-width-1-5\@m{width:20%}.uk-width-2-5\@m{width:40%}.uk-width-3-5\@m{width:60%}.uk-width-4-5\@m{width:80%}.uk-width-1-6\@m{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@m{width:calc(100% * 5 / 6.001)}.uk-width-small\@m{width:150px}.uk-width-medium\@m{width:300px}.uk-width-large\@m{width:450px}.uk-width-xlarge\@m{width:600px}.uk-width-xxlarge\@m{width:750px}.uk-width-auto\@m{width:auto}.uk-width-expand\@m{width:1px;flex:1;min-width:0;flex-basis:1px}}@media (min-width: 1200px){.uk-width-1-1\@l{width:100%}.uk-width-1-2\@l{width:50%}.uk-width-1-3\@l{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@l{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@l{width:25%}.uk-width-3-4\@l{width:75%}.uk-width-1-5\@l{width:20%}.uk-width-2-5\@l{width:40%}.uk-width-3-5\@l{width:60%}.uk-width-4-5\@l{width:80%}.uk-width-1-6\@l{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@l{width:calc(100% * 5 / 6.001)}.uk-width-small\@l{width:150px}.uk-width-medium\@l{width:300px}.uk-width-large\@l{width:450px}.uk-width-xlarge\@l{width:600px}.uk-width-xxlarge\@l{width:750px}.uk-width-auto\@l{width:auto}.uk-width-expand\@l{width:1px;flex:1;min-width:0;flex-basis:1px}}@media (min-width: 1600px){.uk-width-1-1\@xl{width:100%}.uk-width-1-2\@xl{width:50%}.uk-width-1-3\@xl{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@xl{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@xl{width:25%}.uk-width-3-4\@xl{width:75%}.uk-width-1-5\@xl{width:20%}.uk-width-2-5\@xl{width:40%}.uk-width-3-5\@xl{width:60%}.uk-width-4-5\@xl{width:80%}.uk-width-1-6\@xl{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@xl{width:calc(100% * 5 / 6.001)}.uk-width-small\@xl{width:150px}.uk-width-medium\@xl{width:300px}.uk-width-large\@xl{width:450px}.uk-width-xlarge\@xl{width:600px}.uk-width-xxlarge\@xl{width:750px}.uk-width-auto\@xl{width:auto}.uk-width-expand\@xl{width:1px;flex:1;min-width:0;flex-basis:1px}}[class*='uk-height']{box-sizing:border-box}.uk-height-1-1{height:100%}.uk-height-viewport{min-height:100vh}.uk-height-small{height:150px}.uk-height-medium{height:300px}.uk-height-large{height:450px}.uk-height-max-small{max-height:150px}.uk-height-max-medium{max-height:300px}.uk-height-max-large{max-height:450px}.uk-text-lead{font-size:1.5rem;line-height:1.5;color:#333}.uk-text-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-text-meta a{color:#999}.uk-text-meta a:hover{color:#666;text-decoration:none}.uk-text-small{font-size:.875rem;line-height:1.5}.uk-text-large{font-size:1.5rem;line-height:1.5}.uk-text-bold{font-weight:bolder}.uk-text-uppercase{text-transform:uppercase !important}.uk-text-capitalize{text-transform:capitalize !important}.uk-text-lowercase{text-transform:lowercase !important}.uk-text-muted{color:#999 !important}.uk-text-primary{color:#1e87f0 !important}.uk-text-success{color:#32d296 !important}.uk-text-warning{color:#faa05a !important}.uk-text-danger{color:#f0506e !important}.uk-text-background{-webkit-background-clip:text;-webkit-text-fill-color:transparent;display:inline-block;color:#1e87f0 !important}@supports (-webkit-background-clip: text){.uk-text-background{background-color:#1e87f0}}.uk-text-left{text-align:left !important}.uk-text-right{text-align:right !important}.uk-text-center{text-align:center !important}.uk-text-justify{text-align:justify !important}@media (min-width: 640px){.uk-text-left\@s{text-align:left !important}.uk-text-right\@s{text-align:right !important}.uk-text-center\@s{text-align:center !important}}@media (min-width: 960px){.uk-text-left\@m{text-align:left !important}.uk-text-right\@m{text-align:right !important}.uk-text-center\@m{text-align:center !important}}@media (min-width: 1200px){.uk-text-left\@l{text-align:left !important}.uk-text-right\@l{text-align:right !important}.uk-text-center\@l{text-align:center !important}}@media (min-width: 1600px){.uk-text-left\@xl{text-align:left !important}.uk-text-right\@xl{text-align:right !important}.uk-text-center\@xl{text-align:center !important}}.uk-text-top{vertical-align:top !important}.uk-text-middle{vertical-align:middle !important}.uk-text-bottom{vertical-align:bottom !important}.uk-text-baseline{vertical-align:baseline !important}.uk-text-nowrap{white-space:nowrap}.uk-text-truncate{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}th.uk-text-truncate,td.uk-text-truncate{max-width:0}.uk-text-break{overflow-wrap:break-word;word-wrap:break-word}th.uk-text-break,td.uk-text-break{word-break:break-all}[class*='uk-column-']{column-gap:30px}@media (min-width: 1200px){[class*='uk-column-']{column-gap:40px}}[class*='uk-column-'] img{transform:translate3d(0, 0, 0)}.uk-column-divider{column-rule:1px solid #e5e5e5;column-gap:60px}@media (min-width: 1200px){.uk-column-divider{column-gap:80px}}.uk-column-1-2{column-count:2}.uk-column-1-3{column-count:3}.uk-column-1-4{column-count:4}.uk-column-1-5{column-count:5}.uk-column-1-6{column-count:6}@media (min-width: 640px){.uk-column-1-2\@s{column-count:2}.uk-column-1-3\@s{column-count:3}.uk-column-1-4\@s{column-count:4}.uk-column-1-5\@s{column-count:5}.uk-column-1-6\@s{column-count:6}}@media (min-width: 960px){.uk-column-1-2\@m{column-count:2}.uk-column-1-3\@m{column-count:3}.uk-column-1-4\@m{column-count:4}.uk-column-1-5\@m{column-count:5}.uk-column-1-6\@m{column-count:6}}@media (min-width: 1200px){.uk-column-1-2\@l{column-count:2}.uk-column-1-3\@l{column-count:3}.uk-column-1-4\@l{column-count:4}.uk-column-1-5\@l{column-count:5}.uk-column-1-6\@l{column-count:6}}@media (min-width: 1600px){.uk-column-1-2\@xl{column-count:2}.uk-column-1-3\@xl{column-count:3}.uk-column-1-4\@xl{column-count:4}.uk-column-1-5\@xl{column-count:5}.uk-column-1-6\@xl{column-count:6}}.uk-column-span{column-span:all}.uk-cover{max-width:none;position:absolute;left:50%;top:50%;transform:translate(-50%, -50%)}iframe.uk-cover{pointer-events:none}.uk-cover-container{overflow:hidden;position:relative}.uk-background-default{background-color:#fff}.uk-background-muted{background-color:#f8f8f8}.uk-background-primary{background-color:#1e87f0}.uk-background-secondary{background-color:#222}.uk-background-cover,.uk-background-contain{background-position:50% 50%;background-repeat:no-repeat}.uk-background-cover{background-size:cover}.uk-background-contain{background-size:contain}.uk-background-top-left{background-position:0 0}.uk-background-top-center{background-position:50% 0}.uk-background-top-right{background-position:100% 0}.uk-background-center-left{background-position:0 50%}.uk-background-center-center{background-position:50% 50%}.uk-background-center-right{background-position:100% 50%}.uk-background-bottom-left{background-position:0 100%}.uk-background-bottom-center{background-position:50% 100%}.uk-background-bottom-right{background-position:100% 100%}.uk-background-norepeat{background-repeat:no-repeat}.uk-background-fixed{background-attachment:fixed;backface-visibility:hidden}@media (pointer: coarse){.uk-background-fixed{background-attachment:scroll}}@media (max-width: 639px){.uk-background-image\@s{background-image:none !important}}@media (max-width: 959px){.uk-background-image\@m{background-image:none !important}}@media (max-width: 1199px){.uk-background-image\@l{background-image:none !important}}@media (max-width: 1599px){.uk-background-image\@xl{background-image:none !important}}.uk-background-blend-multiply{background-blend-mode:multiply}.uk-background-blend-screen{background-blend-mode:screen}.uk-background-blend-overlay{background-blend-mode:overlay}.uk-background-blend-darken{background-blend-mode:darken}.uk-background-blend-lighten{background-blend-mode:lighten}.uk-background-blend-color-dodge{background-blend-mode:color-dodge}.uk-background-blend-color-burn{background-blend-mode:color-burn}.uk-background-blend-hard-light{background-blend-mode:hard-light}.uk-background-blend-soft-light{background-blend-mode:soft-light}.uk-background-blend-difference{background-blend-mode:difference}.uk-background-blend-exclusion{background-blend-mode:exclusion}.uk-background-blend-hue{background-blend-mode:hue}.uk-background-blend-saturation{background-blend-mode:saturation}.uk-background-blend-color{background-blend-mode:color}.uk-background-blend-luminosity{background-blend-mode:luminosity}[class*='uk-align']{display:block;margin-bottom:30px}*+[class*='uk-align']{margin-top:30px}.uk-align-center{margin-left:auto;margin-right:auto}.uk-align-left{margin-top:0;margin-right:30px;float:left}.uk-align-right{margin-top:0;margin-left:30px;float:right}@media (min-width: 640px){.uk-align-left\@s{margin-top:0;margin-right:30px;float:left}.uk-align-right\@s{margin-top:0;margin-left:30px;float:right}}@media (min-width: 960px){.uk-align-left\@m{margin-top:0;margin-right:30px;float:left}.uk-align-right\@m{margin-top:0;margin-left:30px;float:right}}@media (min-width: 1200px){.uk-align-left\@l{margin-top:0;float:left}.uk-align-right\@l{margin-top:0;float:right}.uk-align-left,.uk-align-left\@s,.uk-align-left\@m,.uk-align-left\@l{margin-right:40px}.uk-align-right,.uk-align-right\@s,.uk-align-right\@m,.uk-align-right\@l{margin-left:40px}}@media (min-width: 1600px){.uk-align-left\@xl{margin-top:0;margin-right:40px;float:left}.uk-align-right\@xl{margin-top:0;margin-left:40px;float:right}}.uk-svg,.uk-svg:not(.uk-preserve) [fill*='#']:not(.uk-preserve),.uk-svg:not(.uk-preserve) [FILL*='#']:not(.uk-preserve){fill:currentcolor}.uk-svg:not(.uk-preserve) [stroke*='#']:not(.uk-preserve),.uk-svg:not(.uk-preserve) [STROKE*='#']:not(.uk-preserve){stroke:currentcolor}.uk-svg{transform:translate(0, 0)}.uk-panel{position:relative;box-sizing:border-box}.uk-panel::before,.uk-panel::after{content:"";display:table}.uk-panel::after{clear:both}.uk-panel>:last-child{margin-bottom:0}.uk-panel-scrollable{height:170px;padding:10px;border:1px solid #e5e5e5;overflow:auto;-webkit-overflow-scrolling:touch;resize:both}.uk-clearfix::before{content:"";display:table-cell}.uk-clearfix::after{content:"";display:table;clear:both}.uk-float-left{float:left}.uk-float-right{float:right}[class*='uk-float-']{max-width:100%}.uk-overflow-hidden{overflow:hidden}.uk-overflow-auto{overflow:auto;-webkit-overflow-scrolling:touch}.uk-overflow-auto>:last-child{margin-bottom:0}.uk-resize{resize:both}.uk-resize-vertical{resize:vertical}.uk-display-block{display:block !important}.uk-display-inline{display:inline !important}.uk-display-inline-block{display:inline-block !important}[class*='uk-inline']{display:inline-block;position:relative;max-width:100%;vertical-align:middle;-webkit-backface-visibility:hidden}.uk-inline-clip{overflow:hidden}.uk-preserve-width,.uk-preserve-width audio,.uk-preserve-width canvas,.uk-preserve-width img,.uk-preserve-width svg,.uk-preserve-width video{max-width:none}.uk-responsive-width,.uk-responsive-height{box-sizing:border-box}.uk-responsive-width{max-width:100% !important;height:auto}.uk-responsive-height{max-height:100%;width:auto;max-width:none}.uk-border-circle{border-radius:50%}.uk-border-rounded{border-radius:5px}.uk-inline-clip[class*='uk-border-']{-webkit-transform:translateZ(0)}.uk-box-shadow-small{box-shadow:0 2px 8px rgba(0,0,0,0.08)}.uk-box-shadow-medium{box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-box-shadow-large{box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-box-shadow-xlarge{box-shadow:0 28px 50px rgba(0,0,0,0.16)}[class*='uk-box-shadow-hover']{transition:box-shadow .1s ease-in-out}.uk-box-shadow-hover-small:hover{box-shadow:0 2px 8px rgba(0,0,0,0.08)}.uk-box-shadow-hover-medium:hover{box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-box-shadow-hover-large:hover{box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-box-shadow-hover-xlarge:hover{box-shadow:0 28px 50px rgba(0,0,0,0.16)}@supports (filter: blur(0)){.uk-box-shadow-bottom{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-box-shadow-bottom::before{content:'';position:absolute;bottom:-30px;left:0;right:0;height:30px;border-radius:100%;background:#444;filter:blur(20px)}.uk-box-shadow-bottom>*{position:relative}}.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{display:block;margin-right:10px;float:left;font-size:4.5em;line-height:1;margin-bottom:-2px}@-moz-document url-prefix(){.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{margin-top:1.1%}}@supports (-ms-ime-align: auto){.uk-dropcap>p:first-of-type::first-letter{font-size:1em}}.uk-logo{font-size:1.5rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;color:#666;text-decoration:none}.uk-logo:hover,.uk-logo:focus{color:#666;outline:none;text-decoration:none}.uk-logo-inverse{display:none}.uk-disabled{pointer-events:none}.uk-drag,.uk-drag *{cursor:move}.uk-drag iframe{pointer-events:none}.uk-dragover{box-shadow:0 0 20px rgba(100,100,100,0.3)}.uk-blend-multiply{mix-blend-mode:multiply}.uk-blend-screen{mix-blend-mode:screen}.uk-blend-overlay{mix-blend-mode:overlay}.uk-blend-darken{mix-blend-mode:darken}.uk-blend-lighten{mix-blend-mode:lighten}.uk-blend-color-dodge{mix-blend-mode:color-dodge}.uk-blend-color-burn{mix-blend-mode:color-burn}.uk-blend-hard-light{mix-blend-mode:hard-light}.uk-blend-soft-light{mix-blend-mode:soft-light}.uk-blend-difference{mix-blend-mode:difference}.uk-blend-exclusion{mix-blend-mode:exclusion}.uk-blend-hue{mix-blend-mode:hue}.uk-blend-saturation{mix-blend-mode:saturation}.uk-blend-color{mix-blend-mode:color}.uk-blend-luminosity{mix-blend-mode:luminosity}.uk-transform-center{transform:translate(-50%, -50%)}.uk-transform-origin-top-left{transform-origin:0 0}.uk-transform-origin-top-center{transform-origin:50% 0}.uk-transform-origin-top-right{transform-origin:100% 0}.uk-transform-origin-center-left{transform-origin:0 50%}.uk-transform-origin-center-right{transform-origin:100% 50%}.uk-transform-origin-bottom-left{transform-origin:0 100%}.uk-transform-origin-bottom-center{transform-origin:50% 100%}.uk-transform-origin-bottom-right{transform-origin:100% 100%}.uk-flex{display:flex}.uk-flex-inline{display:inline-flex}.uk-flex::before,.uk-flex::after,.uk-flex-inline::before,.uk-flex-inline::after{display:none}.uk-flex-left{justify-content:flex-start}.uk-flex-center{justify-content:center}.uk-flex-right{justify-content:flex-end}.uk-flex-between{justify-content:space-between}.uk-flex-around{justify-content:space-around}@media (min-width: 640px){.uk-flex-left\@s{justify-content:flex-start}.uk-flex-center\@s{justify-content:center}.uk-flex-right\@s{justify-content:flex-end}.uk-flex-between\@s{justify-content:space-between}.uk-flex-around\@s{justify-content:space-around}}@media (min-width: 960px){.uk-flex-left\@m{justify-content:flex-start}.uk-flex-center\@m{justify-content:center}.uk-flex-right\@m{justify-content:flex-end}.uk-flex-between\@m{justify-content:space-between}.uk-flex-around\@m{justify-content:space-around}}@media (min-width: 1200px){.uk-flex-left\@l{justify-content:flex-start}.uk-flex-center\@l{justify-content:center}.uk-flex-right\@l{justify-content:flex-end}.uk-flex-between\@l{justify-content:space-between}.uk-flex-around\@l{justify-content:space-around}}@media (min-width: 1600px){.uk-flex-left\@xl{justify-content:flex-start}.uk-flex-center\@xl{justify-content:center}.uk-flex-right\@xl{justify-content:flex-end}.uk-flex-between\@xl{justify-content:space-between}.uk-flex-around\@xl{justify-content:space-around}}.uk-flex-stretch{align-items:stretch}.uk-flex-top{align-items:flex-start}.uk-flex-middle{align-items:center}.uk-flex-bottom{align-items:flex-end}.uk-flex-row{flex-direction:row}.uk-flex-row-reverse{flex-direction:row-reverse}.uk-flex-column{flex-direction:column}.uk-flex-column-reverse{flex-direction:column-reverse}.uk-flex-nowrap{flex-wrap:nowrap}.uk-flex-wrap{flex-wrap:wrap}.uk-flex-wrap-reverse{flex-wrap:wrap-reverse}.uk-flex-wrap-stretch{align-content:stretch}.uk-flex-wrap-top{align-content:flex-start}.uk-flex-wrap-middle{align-content:center}.uk-flex-wrap-bottom{align-content:flex-end}.uk-flex-wrap-between{align-content:space-between}.uk-flex-wrap-around{align-content:space-around}.uk-flex-first{order:-1}.uk-flex-last{order:99}@media (min-width: 640px){.uk-flex-first\@s{order:-1}.uk-flex-last\@s{order:99}}@media (min-width: 960px){.uk-flex-first\@m{order:-1}.uk-flex-last\@m{order:99}}@media (min-width: 1200px){.uk-flex-first\@l{order:-1}.uk-flex-last\@l{order:99}}@media (min-width: 1600px){.uk-flex-first\@xl{order:-1}.uk-flex-last\@xl{order:99}}.uk-flex-none{flex:none}.uk-flex-auto{flex:auto}.uk-flex-1{flex:1}.uk-margin{margin-bottom:20px}*+.uk-margin{margin-top:20px !important}.uk-margin-top{margin-top:20px !important}.uk-margin-bottom{margin-bottom:20px !important}.uk-margin-left{margin-left:20px !important}.uk-margin-right{margin-right:20px !important}.uk-margin-small{margin-bottom:10px}*+.uk-margin-small{margin-top:10px !important}.uk-margin-small-top{margin-top:10px !important}.uk-margin-small-bottom{margin-bottom:10px !important}.uk-margin-small-left{margin-left:10px !important}.uk-margin-small-right{margin-right:10px !important}.uk-margin-medium{margin-bottom:40px}*+.uk-margin-medium{margin-top:40px !important}.uk-margin-medium-top{margin-top:40px !important}.uk-margin-medium-bottom{margin-bottom:40px !important}.uk-margin-medium-left{margin-left:40px !important}.uk-margin-medium-right{margin-right:40px !important}.uk-margin-large{margin-bottom:40px}*+.uk-margin-large{margin-top:40px !important}.uk-margin-large-top{margin-top:40px !important}.uk-margin-large-bottom{margin-bottom:40px !important}.uk-margin-large-left{margin-left:40px !important}.uk-margin-large-right{margin-right:40px !important}@media (min-width: 1200px){.uk-margin-large{margin-bottom:70px}*+.uk-margin-large{margin-top:70px !important}.uk-margin-large-top{margin-top:70px !important}.uk-margin-large-bottom{margin-bottom:70px !important}.uk-margin-large-left{margin-left:70px !important}.uk-margin-large-right{margin-right:70px !important}}.uk-margin-xlarge{margin-bottom:70px}*+.uk-margin-xlarge{margin-top:70px !important}.uk-margin-xlarge-top{margin-top:70px !important}.uk-margin-xlarge-bottom{margin-bottom:70px !important}.uk-margin-xlarge-left{margin-left:70px !important}.uk-margin-xlarge-right{margin-right:70px !important}@media (min-width: 1200px){.uk-margin-xlarge{margin-bottom:140px}*+.uk-margin-xlarge{margin-top:140px !important}.uk-margin-xlarge-top{margin-top:140px !important}.uk-margin-xlarge-bottom{margin-bottom:140px !important}.uk-margin-xlarge-left{margin-left:140px !important}.uk-margin-xlarge-right{margin-right:140px !important}}.uk-margin-remove{margin:0 !important}.uk-margin-remove-top{margin-top:0 !important}.uk-margin-remove-bottom{margin-bottom:0 !important}.uk-margin-remove-left{margin-left:0 !important}.uk-margin-remove-right{margin-right:0 !important}.uk-margin-remove-vertical{margin-top:0 !important;margin-bottom:0 !important}.uk-margin-remove-adjacent+*{margin-top:0 !important}.uk-margin-auto{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-top{margin-top:auto !important}.uk-margin-auto-bottom{margin-bottom:auto !important}.uk-margin-auto-left{margin-left:auto !important}.uk-margin-auto-right{margin-right:auto !important}.uk-margin-auto-vertical{margin-top:auto !important;margin-bottom:auto !important}.uk-padding{padding:30px}@media (min-width: 1200px){.uk-padding{padding:40px}}.uk-padding-small{padding:15px}.uk-padding-large{padding:30px}@media (min-width: 1200px){.uk-padding-large{padding:70px}}.uk-padding-remove{padding:0 !important}.uk-padding-remove-top{padding-top:0 !important}.uk-padding-remove-bottom{padding-bottom:0 !important}.uk-padding-remove-left{padding-left:0 !important}.uk-padding-remove-right{padding-right:0 !important}.uk-padding-remove-vertical{padding-top:0 !important;padding-bottom:0 !important}.uk-padding-remove-horizontal{padding-left:0 !important;padding-right:0 !important}[class*='uk-position-top'],[class*='uk-position-bottom'],[class*='uk-position-left'],[class*='uk-position-right'],[class*='uk-position-center']{position:absolute !important}.uk-position-top{top:0;left:0;right:0}.uk-position-bottom{bottom:0;left:0;right:0}.uk-position-left{top:0;bottom:0;left:0}.uk-position-right{top:0;bottom:0;right:0}.uk-position-top-left{top:0;left:0}.uk-position-top-right{top:0;right:0}.uk-position-bottom-left{bottom:0;left:0}.uk-position-bottom-right{bottom:0;right:0}.uk-position-center{top:50%;left:50%;transform:translate(-50%, -50%);display:table;width:-moz-max-content;max-width:100%;box-sizing:border-box}[class*='uk-position-center-left'],[class*='uk-position-center-right']{top:50%;transform:translateY(-50%)}.uk-position-center-left{left:0}.uk-position-center-right{right:0}.uk-position-center-left-out{right:100%;width:max-content}.uk-position-center-right-out{left:100%;width:max-content}.uk-position-top-center,.uk-position-bottom-center{left:50%;transform:translateX(-50%);display:table;width:-moz-max-content;max-width:100%;box-sizing:border-box}.uk-position-top-center{top:0}.uk-position-bottom-center{bottom:0}.uk-position-cover{position:absolute;top:0;bottom:0;left:0;right:0}.uk-position-relative{position:relative !important}.uk-position-absolute{position:absolute !important}.uk-position-fixed{position:fixed !important}.uk-position-z-index{z-index:1}.uk-position-small{margin:15px}.uk-position-small.uk-position-center{transform:translate(-50%, -50%) translate(-15px, -15px)}.uk-position-small[class*='uk-position-center-left'],.uk-position-small[class*='uk-position-center-right']{transform:translateY(-50%) translateY(-15px)}.uk-position-small.uk-position-top-center,.uk-position-small.uk-position-bottom-center{transform:translateX(-50%) translateX(-15px)}.uk-position-medium{margin:30px}.uk-position-medium.uk-position-center{transform:translate(-50%, -50%) translate(-30px, -30px)}.uk-position-medium[class*='uk-position-center-left'],.uk-position-medium[class*='uk-position-center-right']{transform:translateY(-50%) translateY(-30px)}.uk-position-medium.uk-position-top-center,.uk-position-medium.uk-position-bottom-center{transform:translateX(-50%) translateX(-30px)}.uk-position-large{margin:30px}.uk-position-large.uk-position-center{transform:translate(-50%, -50%) translate(-30px, -30px)}.uk-position-large[class*='uk-position-center-left'],.uk-position-large[class*='uk-position-center-right']{transform:translateY(-50%) translateY(-30px)}.uk-position-large.uk-position-top-center,.uk-position-large.uk-position-bottom-center{transform:translateX(-50%) translateX(-30px)}@media (min-width: 1200px){.uk-position-large{margin:50px}.uk-position-large.uk-position-center{transform:translate(-50%, -50%) translate(-50px, -50px)}.uk-position-large[class*='uk-position-center-left'],.uk-position-large[class*='uk-position-center-right']{transform:translateY(-50%) translateY(-50px)}.uk-position-large.uk-position-top-center,.uk-position-large.uk-position-bottom-center{transform:translateX(-50%) translateX(-50px)}}.uk-transition-fade,[class*='uk-transition-scale'],[class*='uk-transition-slide']{transition:.3s ease-out;transition-property:opacity, transform, filter}.uk-transition-toggle:focus{outline:none}.uk-transition-fade{opacity:0}.uk-transition-toggle:hover [class*='uk-transition-fade'],.uk-transition-toggle.uk-hover [class*='uk-transition-fade'],.uk-transition-toggle:focus [class*='uk-transition-fade'],.uk-transition-active.uk-active [class*='uk-transition-fade']{opacity:1}[class*='uk-transition-scale']{opacity:0}.uk-transition-scale-up{transform:scale3d(1, 1, 1)}.uk-transition-scale-down{transform:scale3d(1.1, 1.1, 1)}.uk-transition-toggle:hover .uk-transition-scale-up,.uk-transition-toggle.uk-hover .uk-transition-scale-up,.uk-transition-toggle:focus .uk-transition-scale-up,.uk-transition-active.uk-active .uk-transition-scale-up{opacity:1;transform:scale3d(1.1, 1.1, 1)}.uk-transition-toggle:hover .uk-transition-scale-down,.uk-transition-toggle.uk-hover .uk-transition-scale-down,.uk-transition-toggle:focus .uk-transition-scale-down,.uk-transition-active.uk-active .uk-transition-scale-down{opacity:1;transform:scale3d(1, 1, 1)}[class*='uk-transition-slide']{opacity:0}.uk-transition-slide-top{transform:translateY(-100%)}.uk-transition-slide-bottom{transform:translateY(100%)}.uk-transition-slide-left{transform:translateX(-100%)}.uk-transition-slide-right{transform:translateX(100%)}.uk-transition-slide-top-small{transform:translateY(-10px)}.uk-transition-slide-bottom-small{transform:translateY(10px)}.uk-transition-slide-left-small{transform:translateX(-10px)}.uk-transition-slide-right-small{transform:translateX(10px)}.uk-transition-slide-top-medium{transform:translateY(-50px)}.uk-transition-slide-bottom-medium{transform:translateY(50px)}.uk-transition-slide-left-medium{transform:translateX(-50px)}.uk-transition-slide-right-medium{transform:translateX(50px)}.uk-transition-toggle:hover [class*='uk-transition-slide'],.uk-transition-toggle.uk-hover [class*='uk-transition-slide'],.uk-transition-toggle:focus [class*='uk-transition-slide'],.uk-transition-active.uk-active [class*='uk-transition-slide']{opacity:1;transform:translateX(0) translateY(0)}.uk-transition-opaque{opacity:1}.uk-transition-slow{transition-duration:.7s}[hidden],.uk-hidden{display:none !important}@media (min-width: 640px){.uk-hidden\@s{display:none !important}}@media (min-width: 960px){.uk-hidden\@m{display:none !important}}@media (min-width: 1200px){.uk-hidden\@l{display:none !important}}@media (min-width: 1600px){.uk-hidden\@xl{display:none !important}}@media (max-width: 639px){.uk-visible\@s{display:none !important}}@media (max-width: 959px){.uk-visible\@m{display:none !important}}@media (max-width: 1199px){.uk-visible\@l{display:none !important}}@media (max-width: 1599px){.uk-visible\@xl{display:none !important}}.uk-invisible{visibility:hidden !important}.uk-visible-toggle:not(:hover):not(.uk-hover) .uk-hidden-hover:not(:focus){position:absolute !important;width:0 !important;height:0 !important;padding:0 !important;margin:0 !important;overflow:hidden !important}.uk-visible-toggle:not(:hover):not(.uk-hover) .uk-invisible-hover:not(:focus){opacity:0 !important}@media (pointer: coarse){.uk-hidden-touch{display:none !important}}.uk-hidden-notouch{display:none !important}@media (pointer: coarse){.uk-hidden-notouch{display:block !important}}.uk-light,.uk-section-primary:not(.uk-preserve-color),.uk-section-secondary:not(.uk-preserve-color),.uk-tile-primary:not(.uk-preserve-color),.uk-tile-secondary:not(.uk-preserve-color),.uk-card-primary.uk-card-body,.uk-card-primary>:not([class*='uk-card-media']),.uk-card-secondary.uk-card-body,.uk-card-secondary>:not([class*='uk-card-media']),.uk-overlay-primary,.uk-offcanvas-bar{color:rgba(255,255,255,0.7)}.uk-light a,.uk-section-primary:not(.uk-preserve-color) a,.uk-section-secondary:not(.uk-preserve-color) a,.uk-tile-primary:not(.uk-preserve-color) a,.uk-tile-secondary:not(.uk-preserve-color) a,.uk-card-primary.uk-card-body a,.uk-card-primary>:not([class*='uk-card-media']) a,.uk-card-secondary.uk-card-body a,.uk-card-secondary>:not([class*='uk-card-media']) a,.uk-overlay-primary a,.uk-offcanvas-bar a,.uk-light .uk-link,.uk-section-primary:not(.uk-preserve-color) .uk-link,.uk-section-secondary:not(.uk-preserve-color) .uk-link,.uk-tile-primary:not(.uk-preserve-color) .uk-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-link,.uk-card-primary.uk-card-body .uk-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-link,.uk-card-secondary.uk-card-body .uk-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link,.uk-overlay-primary .uk-link,.uk-offcanvas-bar .uk-link{color:#fff}.uk-light a:hover,.uk-section-primary:not(.uk-preserve-color) a:hover,.uk-section-secondary:not(.uk-preserve-color) a:hover,.uk-tile-primary:not(.uk-preserve-color) a:hover,.uk-tile-secondary:not(.uk-preserve-color) a:hover,.uk-card-primary.uk-card-body a:hover,.uk-card-primary>:not([class*='uk-card-media']) a:hover,.uk-card-secondary.uk-card-body a:hover,.uk-card-secondary>:not([class*='uk-card-media']) a:hover,.uk-overlay-primary a:hover,.uk-offcanvas-bar a:hover,.uk-light .uk-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-card-primary.uk-card-body .uk-link:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link:hover,.uk-card-secondary.uk-card-body .uk-link:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link:hover,.uk-overlay-primary .uk-link:hover,.uk-offcanvas-bar .uk-link:hover{color:#fff}.uk-light :not(pre)>code,.uk-section-primary:not(.uk-preserve-color) :not(pre)>code,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-card-primary.uk-card-body :not(pre)>code,.uk-card-primary>:not([class*='uk-card-media']) :not(pre)>code,.uk-card-secondary.uk-card-body :not(pre)>code,.uk-card-secondary>:not([class*='uk-card-media']) :not(pre)>code,.uk-overlay-primary :not(pre)>code,.uk-offcanvas-bar :not(pre)>code,.uk-light :not(pre)>kbd,.uk-section-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-card-primary.uk-card-body :not(pre)>kbd,.uk-card-primary>:not([class*='uk-card-media']) :not(pre)>kbd,.uk-card-secondary.uk-card-body :not(pre)>kbd,.uk-card-secondary>:not([class*='uk-card-media']) :not(pre)>kbd,.uk-overlay-primary :not(pre)>kbd,.uk-offcanvas-bar :not(pre)>kbd,.uk-light :not(pre)>samp,.uk-section-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>samp,.uk-card-primary.uk-card-body :not(pre)>samp,.uk-card-primary>:not([class*='uk-card-media']) :not(pre)>samp,.uk-card-secondary.uk-card-body :not(pre)>samp,.uk-card-secondary>:not([class*='uk-card-media']) :not(pre)>samp,.uk-overlay-primary :not(pre)>samp,.uk-offcanvas-bar :not(pre)>samp{color:rgba(255,255,255,0.7);background:rgba(255,255,255,0.1)}.uk-light em,.uk-section-primary:not(.uk-preserve-color) em,.uk-section-secondary:not(.uk-preserve-color) em,.uk-tile-primary:not(.uk-preserve-color) em,.uk-tile-secondary:not(.uk-preserve-color) em,.uk-card-primary.uk-card-body em,.uk-card-primary>:not([class*='uk-card-media']) em,.uk-card-secondary.uk-card-body em,.uk-card-secondary>:not([class*='uk-card-media']) em,.uk-overlay-primary em,.uk-offcanvas-bar em{color:#fff}.uk-light h1,.uk-section-primary:not(.uk-preserve-color) h1,.uk-section-secondary:not(.uk-preserve-color) h1,.uk-tile-primary:not(.uk-preserve-color) h1,.uk-tile-secondary:not(.uk-preserve-color) h1,.uk-card-primary.uk-card-body h1,.uk-card-primary>:not([class*='uk-card-media']) h1,.uk-card-secondary.uk-card-body h1,.uk-card-secondary>:not([class*='uk-card-media']) h1,.uk-overlay-primary h1,.uk-offcanvas-bar h1,.uk-light .uk-h1,.uk-section-primary:not(.uk-preserve-color) .uk-h1,.uk-section-secondary:not(.uk-preserve-color) .uk-h1,.uk-tile-primary:not(.uk-preserve-color) .uk-h1,.uk-tile-secondary:not(.uk-preserve-color) .uk-h1,.uk-card-primary.uk-card-body .uk-h1,.uk-card-primary>:not([class*='uk-card-media']) .uk-h1,.uk-card-secondary.uk-card-body .uk-h1,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h1,.uk-overlay-primary .uk-h1,.uk-offcanvas-bar .uk-h1,.uk-light h2,.uk-section-primary:not(.uk-preserve-color) h2,.uk-section-secondary:not(.uk-preserve-color) h2,.uk-tile-primary:not(.uk-preserve-color) h2,.uk-tile-secondary:not(.uk-preserve-color) h2,.uk-card-primary.uk-card-body h2,.uk-card-primary>:not([class*='uk-card-media']) h2,.uk-card-secondary.uk-card-body h2,.uk-card-secondary>:not([class*='uk-card-media']) h2,.uk-overlay-primary h2,.uk-offcanvas-bar h2,.uk-light .uk-h2,.uk-section-primary:not(.uk-preserve-color) .uk-h2,.uk-section-secondary:not(.uk-preserve-color) .uk-h2,.uk-tile-primary:not(.uk-preserve-color) .uk-h2,.uk-tile-secondary:not(.uk-preserve-color) .uk-h2,.uk-card-primary.uk-card-body .uk-h2,.uk-card-primary>:not([class*='uk-card-media']) .uk-h2,.uk-card-secondary.uk-card-body .uk-h2,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h2,.uk-overlay-primary .uk-h2,.uk-offcanvas-bar .uk-h2,.uk-light h3,.uk-section-primary:not(.uk-preserve-color) h3,.uk-section-secondary:not(.uk-preserve-color) h3,.uk-tile-primary:not(.uk-preserve-color) h3,.uk-tile-secondary:not(.uk-preserve-color) h3,.uk-card-primary.uk-card-body h3,.uk-card-primary>:not([class*='uk-card-media']) h3,.uk-card-secondary.uk-card-body h3,.uk-card-secondary>:not([class*='uk-card-media']) h3,.uk-overlay-primary h3,.uk-offcanvas-bar h3,.uk-light .uk-h3,.uk-section-primary:not(.uk-preserve-color) .uk-h3,.uk-section-secondary:not(.uk-preserve-color) .uk-h3,.uk-tile-primary:not(.uk-preserve-color) .uk-h3,.uk-tile-secondary:not(.uk-preserve-color) .uk-h3,.uk-card-primary.uk-card-body .uk-h3,.uk-card-primary>:not([class*='uk-card-media']) .uk-h3,.uk-card-secondary.uk-card-body .uk-h3,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h3,.uk-overlay-primary .uk-h3,.uk-offcanvas-bar .uk-h3,.uk-light h4,.uk-section-primary:not(.uk-preserve-color) h4,.uk-section-secondary:not(.uk-preserve-color) h4,.uk-tile-primary:not(.uk-preserve-color) h4,.uk-tile-secondary:not(.uk-preserve-color) h4,.uk-card-primary.uk-card-body h4,.uk-card-primary>:not([class*='uk-card-media']) h4,.uk-card-secondary.uk-card-body h4,.uk-card-secondary>:not([class*='uk-card-media']) h4,.uk-overlay-primary h4,.uk-offcanvas-bar h4,.uk-light .uk-h4,.uk-section-primary:not(.uk-preserve-color) .uk-h4,.uk-section-secondary:not(.uk-preserve-color) .uk-h4,.uk-tile-primary:not(.uk-preserve-color) .uk-h4,.uk-tile-secondary:not(.uk-preserve-color) .uk-h4,.uk-card-primary.uk-card-body .uk-h4,.uk-card-primary>:not([class*='uk-card-media']) .uk-h4,.uk-card-secondary.uk-card-body .uk-h4,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h4,.uk-overlay-primary .uk-h4,.uk-offcanvas-bar .uk-h4,.uk-light h5,.uk-section-primary:not(.uk-preserve-color) h5,.uk-section-secondary:not(.uk-preserve-color) h5,.uk-tile-primary:not(.uk-preserve-color) h5,.uk-tile-secondary:not(.uk-preserve-color) h5,.uk-card-primary.uk-card-body h5,.uk-card-primary>:not([class*='uk-card-media']) h5,.uk-card-secondary.uk-card-body h5,.uk-card-secondary>:not([class*='uk-card-media']) h5,.uk-overlay-primary h5,.uk-offcanvas-bar h5,.uk-light .uk-h5,.uk-section-primary:not(.uk-preserve-color) .uk-h5,.uk-section-secondary:not(.uk-preserve-color) .uk-h5,.uk-tile-primary:not(.uk-preserve-color) .uk-h5,.uk-tile-secondary:not(.uk-preserve-color) .uk-h5,.uk-card-primary.uk-card-body .uk-h5,.uk-card-primary>:not([class*='uk-card-media']) .uk-h5,.uk-card-secondary.uk-card-body .uk-h5,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h5,.uk-overlay-primary .uk-h5,.uk-offcanvas-bar .uk-h5,.uk-light h6,.uk-section-primary:not(.uk-preserve-color) h6,.uk-section-secondary:not(.uk-preserve-color) h6,.uk-tile-primary:not(.uk-preserve-color) h6,.uk-tile-secondary:not(.uk-preserve-color) h6,.uk-card-primary.uk-card-body h6,.uk-card-primary>:not([class*='uk-card-media']) h6,.uk-card-secondary.uk-card-body h6,.uk-card-secondary>:not([class*='uk-card-media']) h6,.uk-overlay-primary h6,.uk-offcanvas-bar h6,.uk-light .uk-h6,.uk-section-primary:not(.uk-preserve-color) .uk-h6,.uk-section-secondary:not(.uk-preserve-color) .uk-h6,.uk-tile-primary:not(.uk-preserve-color) .uk-h6,.uk-tile-secondary:not(.uk-preserve-color) .uk-h6,.uk-card-primary.uk-card-body .uk-h6,.uk-card-primary>:not([class*='uk-card-media']) .uk-h6,.uk-card-secondary.uk-card-body .uk-h6,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h6,.uk-overlay-primary .uk-h6,.uk-offcanvas-bar .uk-h6{color:#fff}.uk-light blockquote,.uk-section-primary:not(.uk-preserve-color) blockquote,.uk-section-secondary:not(.uk-preserve-color) blockquote,.uk-tile-primary:not(.uk-preserve-color) blockquote,.uk-tile-secondary:not(.uk-preserve-color) blockquote,.uk-card-primary.uk-card-body blockquote,.uk-card-primary>:not([class*='uk-card-media']) blockquote,.uk-card-secondary.uk-card-body blockquote,.uk-card-secondary>:not([class*='uk-card-media']) blockquote,.uk-overlay-primary blockquote,.uk-offcanvas-bar blockquote{color:#fff}.uk-light blockquote footer,.uk-section-primary:not(.uk-preserve-color) blockquote footer,.uk-section-secondary:not(.uk-preserve-color) blockquote footer,.uk-tile-primary:not(.uk-preserve-color) blockquote footer,.uk-tile-secondary:not(.uk-preserve-color) blockquote footer,.uk-card-primary.uk-card-body blockquote footer,.uk-card-primary>:not([class*='uk-card-media']) blockquote footer,.uk-card-secondary.uk-card-body blockquote footer,.uk-card-secondary>:not([class*='uk-card-media']) blockquote footer,.uk-overlay-primary blockquote footer,.uk-offcanvas-bar blockquote footer{color:rgba(255,255,255,0.7)}.uk-light hr,.uk-section-primary:not(.uk-preserve-color) hr,.uk-section-secondary:not(.uk-preserve-color) hr,.uk-tile-primary:not(.uk-preserve-color) hr,.uk-tile-secondary:not(.uk-preserve-color) hr,.uk-card-primary.uk-card-body hr,.uk-card-primary>:not([class*='uk-card-media']) hr,.uk-card-secondary.uk-card-body hr,.uk-card-secondary>:not([class*='uk-card-media']) hr,.uk-overlay-primary hr,.uk-offcanvas-bar hr,.uk-light .uk-hr,.uk-section-primary:not(.uk-preserve-color) .uk-hr,.uk-section-secondary:not(.uk-preserve-color) .uk-hr,.uk-tile-primary:not(.uk-preserve-color) .uk-hr,.uk-tile-secondary:not(.uk-preserve-color) .uk-hr,.uk-card-primary.uk-card-body .uk-hr,.uk-card-primary>:not([class*='uk-card-media']) .uk-hr,.uk-card-secondary.uk-card-body .uk-hr,.uk-card-secondary>:not([class*='uk-card-media']) .uk-hr,.uk-overlay-primary .uk-hr,.uk-offcanvas-bar .uk-hr{border-top-color:rgba(255,255,255,0.2)}.uk-light a.uk-link-muted,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted,.uk-card-primary.uk-card-body a.uk-link-muted,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-muted,.uk-card-secondary.uk-card-body a.uk-link-muted,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-muted,.uk-overlay-primary a.uk-link-muted,.uk-offcanvas-bar a.uk-link-muted,.uk-light .uk-link-muted a,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-card-primary.uk-card-body .uk-link-muted a,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-muted a,.uk-card-secondary.uk-card-body .uk-link-muted a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-muted a,.uk-overlay-primary .uk-link-muted a,.uk-offcanvas-bar .uk-link-muted a{color:rgba(255,255,255,0.5)}.uk-light a.uk-link-muted:hover,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-card-primary.uk-card-body a.uk-link-muted:hover,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-muted:hover,.uk-card-secondary.uk-card-body a.uk-link-muted:hover,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-muted:hover,.uk-overlay-primary a.uk-link-muted:hover,.uk-offcanvas-bar a.uk-link-muted:hover,.uk-light .uk-link-muted a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-card-primary.uk-card-body .uk-link-muted a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-muted a:hover,.uk-card-secondary.uk-card-body .uk-link-muted a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-muted a:hover,.uk-overlay-primary .uk-link-muted a:hover,.uk-offcanvas-bar .uk-link-muted a:hover{color:rgba(255,255,255,0.7)}.uk-light a.uk-link-text:hover,.uk-section-primary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-card-primary.uk-card-body a.uk-link-text:hover,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-text:hover,.uk-card-secondary.uk-card-body a.uk-link-text:hover,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-text:hover,.uk-overlay-primary a.uk-link-text:hover,.uk-offcanvas-bar a.uk-link-text:hover,.uk-light .uk-link-text a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-card-primary.uk-card-body .uk-link-text a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-text a:hover,.uk-card-secondary.uk-card-body .uk-link-text a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-text a:hover,.uk-overlay-primary .uk-link-text a:hover,.uk-offcanvas-bar .uk-link-text a:hover{color:rgba(255,255,255,0.5)}.uk-light a.uk-link-heading:hover,.uk-section-primary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-card-primary.uk-card-body a.uk-link-heading:hover,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-heading:hover,.uk-card-secondary.uk-card-body a.uk-link-heading:hover,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-heading:hover,.uk-overlay-primary a.uk-link-heading:hover,.uk-offcanvas-bar a.uk-link-heading:hover,.uk-light .uk-link-heading a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-card-primary.uk-card-body .uk-link-heading a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-heading a:hover,.uk-card-secondary.uk-card-body .uk-link-heading a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-heading a:hover,.uk-overlay-primary .uk-link-heading a:hover,.uk-offcanvas-bar .uk-link-heading a:hover{color:#fff}.uk-light .uk-heading-divider,.uk-section-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-divider,.uk-card-primary.uk-card-body .uk-heading-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-divider,.uk-card-secondary.uk-card-body .uk-heading-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-divider,.uk-overlay-primary .uk-heading-divider,.uk-offcanvas-bar .uk-heading-divider{border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-heading-bullet::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-card-primary.uk-card-body .uk-heading-bullet::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-bullet::before,.uk-card-secondary.uk-card-body .uk-heading-bullet::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-bullet::before,.uk-overlay-primary .uk-heading-bullet::before,.uk-offcanvas-bar .uk-heading-bullet::before{border-left-color:rgba(255,255,255,0.2)}.uk-light .uk-heading-line>::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-card-primary.uk-card-body .uk-heading-line>::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-line>::before,.uk-card-secondary.uk-card-body .uk-heading-line>::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-line>::before,.uk-overlay-primary .uk-heading-line>::before,.uk-offcanvas-bar .uk-heading-line>::before,.uk-light .uk-heading-line>::after,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-card-primary.uk-card-body .uk-heading-line>::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-line>::after,.uk-card-secondary.uk-card-body .uk-heading-line>::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-line>::after,.uk-overlay-primary .uk-heading-line>::after,.uk-offcanvas-bar .uk-heading-line>::after{border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-divider-icon,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon,.uk-card-primary.uk-card-body .uk-divider-icon,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-icon,.uk-card-secondary.uk-card-body .uk-divider-icon,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-icon,.uk-overlay-primary .uk-divider-icon,.uk-offcanvas-bar .uk-divider-icon{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22rgba(255,255,255,0.2)%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-divider-icon::before,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-card-primary.uk-card-body .uk-divider-icon::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-icon::before,.uk-card-secondary.uk-card-body .uk-divider-icon::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-icon::before,.uk-overlay-primary .uk-divider-icon::before,.uk-offcanvas-bar .uk-divider-icon::before,.uk-light .uk-divider-icon::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-card-primary.uk-card-body .uk-divider-icon::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-icon::after,.uk-card-secondary.uk-card-body .uk-divider-icon::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-icon::after,.uk-overlay-primary .uk-divider-icon::after,.uk-offcanvas-bar .uk-divider-icon::after{border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-divider-small::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-small::after,.uk-card-primary.uk-card-body .uk-divider-small::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-small::after,.uk-card-secondary.uk-card-body .uk-divider-small::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-small::after,.uk-overlay-primary .uk-divider-small::after,.uk-offcanvas-bar .uk-divider-small::after{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-list-divider>li:nth-child(n+2),.uk-section-primary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2),.uk-section-secondary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2),.uk-tile-primary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2),.uk-card-primary.uk-card-body .uk-list-divider>li:nth-child(n+2),.uk-card-primary>:not([class*='uk-card-media']) .uk-list-divider>li:nth-child(n+2),.uk-card-secondary.uk-card-body .uk-list-divider>li:nth-child(n+2),.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-divider>li:nth-child(n+2),.uk-overlay-primary .uk-list-divider>li:nth-child(n+2),.uk-offcanvas-bar .uk-list-divider>li:nth-child(n+2){border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-list-striped>li:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-card-primary.uk-card-body .uk-list-striped>li:nth-of-type(odd),.uk-card-primary>:not([class*='uk-card-media']) .uk-list-striped>li:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>li:nth-of-type(odd),.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-striped>li:nth-of-type(odd),.uk-overlay-primary .uk-list-striped>li:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>li:nth-of-type(odd){border-top-color:rgba(255,255,255,0.2);border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-list-striped>li:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-card-primary.uk-card-body .uk-list-striped>li:nth-of-type(odd),.uk-card-primary>:not([class*='uk-card-media']) .uk-list-striped>li:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>li:nth-of-type(odd),.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-striped>li:nth-of-type(odd),.uk-overlay-primary .uk-list-striped>li:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>li:nth-of-type(odd){background-color:rgba(255,255,255,0.1)}.uk-light .uk-list-bullet>li::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-bullet>li::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-bullet>li::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-bullet>li::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-bullet>li::before,.uk-card-primary.uk-card-body .uk-list-bullet>li::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-list-bullet>li::before,.uk-card-secondary.uk-card-body .uk-list-bullet>li::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-bullet>li::before,.uk-overlay-primary .uk-list-bullet>li::before,.uk-offcanvas-bar .uk-list-bullet>li::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22rgba(255,255,255,0.7)%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link,.uk-card-primary.uk-card-body .uk-icon-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link,.uk-card-secondary.uk-card-body .uk-icon-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link,.uk-overlay-primary .uk-icon-link,.uk-offcanvas-bar .uk-icon-link{color:rgba(255,255,255,0.5)}.uk-light .uk-icon-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-card-primary.uk-card-body .uk-icon-link:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link:hover,.uk-card-secondary.uk-card-body .uk-icon-link:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link:hover,.uk-overlay-primary .uk-icon-link:hover,.uk-offcanvas-bar .uk-icon-link:hover,.uk-light .uk-icon-link:focus,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:focus,.uk-card-primary.uk-card-body .uk-icon-link:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link:focus,.uk-card-secondary.uk-card-body .uk-icon-link:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link:focus,.uk-overlay-primary .uk-icon-link:focus,.uk-offcanvas-bar .uk-icon-link:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-icon-link:active,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:active,.uk-card-primary.uk-card-body .uk-icon-link:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link:active,.uk-card-secondary.uk-card-body .uk-icon-link:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link:active,.uk-overlay-primary .uk-icon-link:active,.uk-offcanvas-bar .uk-icon-link:active,.uk-light .uk-active>.uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-card-primary.uk-card-body .uk-active>.uk-icon-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-active>.uk-icon-link,.uk-card-secondary.uk-card-body .uk-active>.uk-icon-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-active>.uk-icon-link,.uk-overlay-primary .uk-active>.uk-icon-link,.uk-offcanvas-bar .uk-active>.uk-icon-link{color:rgba(255,255,255,0.7)}.uk-light .uk-icon-button,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button,.uk-card-primary.uk-card-body .uk-icon-button,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button,.uk-card-secondary.uk-card-body .uk-icon-button,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button,.uk-overlay-primary .uk-icon-button,.uk-offcanvas-bar .uk-icon-button{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.5)}.uk-light .uk-icon-button:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-card-primary.uk-card-body .uk-icon-button:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button:hover,.uk-card-secondary.uk-card-body .uk-icon-button:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button:hover,.uk-overlay-primary .uk-icon-button:hover,.uk-offcanvas-bar .uk-icon-button:hover,.uk-light .uk-icon-button:focus,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:focus,.uk-card-primary.uk-card-body .uk-icon-button:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button:focus,.uk-card-secondary.uk-card-body .uk-icon-button:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button:focus,.uk-overlay-primary .uk-icon-button:focus,.uk-offcanvas-bar .uk-icon-button:focus{background-color:rgba(242,242,242,0.1);color:rgba(255,255,255,0.7)}.uk-light .uk-icon-button:active,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:active,.uk-card-primary.uk-card-body .uk-icon-button:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button:active,.uk-card-secondary.uk-card-body .uk-icon-button:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button:active,.uk-overlay-primary .uk-icon-button:active,.uk-offcanvas-bar .uk-icon-button:active{background-color:rgba(230,230,230,0.1);color:rgba(255,255,255,0.7)}.uk-light .uk-input,.uk-section-primary:not(.uk-preserve-color) .uk-input,.uk-section-secondary:not(.uk-preserve-color) .uk-input,.uk-tile-primary:not(.uk-preserve-color) .uk-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-input,.uk-card-primary.uk-card-body .uk-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-input,.uk-card-secondary.uk-card-body .uk-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input,.uk-overlay-primary .uk-input,.uk-offcanvas-bar .uk-input,.uk-light .uk-select,.uk-section-primary:not(.uk-preserve-color) .uk-select,.uk-section-secondary:not(.uk-preserve-color) .uk-select,.uk-tile-primary:not(.uk-preserve-color) .uk-select,.uk-tile-secondary:not(.uk-preserve-color) .uk-select,.uk-card-primary.uk-card-body .uk-select,.uk-card-primary>:not([class*='uk-card-media']) .uk-select,.uk-card-secondary.uk-card-body .uk-select,.uk-card-secondary>:not([class*='uk-card-media']) .uk-select,.uk-overlay-primary .uk-select,.uk-offcanvas-bar .uk-select,.uk-light .uk-textarea,.uk-section-primary:not(.uk-preserve-color) .uk-textarea,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea,.uk-card-primary.uk-card-body .uk-textarea,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea,.uk-card-secondary.uk-card-body .uk-textarea,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea,.uk-overlay-primary .uk-textarea,.uk-offcanvas-bar .uk-textarea{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7);background-clip:padding-box;border-color:rgba(255,255,255,0.2)}.uk-light .uk-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-card-primary.uk-card-body .uk-input:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-input:focus,.uk-card-secondary.uk-card-body .uk-input:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input:focus,.uk-overlay-primary .uk-input:focus,.uk-offcanvas-bar .uk-input:focus,.uk-light .uk-select:focus,.uk-section-primary:not(.uk-preserve-color) .uk-select:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-card-primary.uk-card-body .uk-select:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-select:focus,.uk-card-secondary.uk-card-body .uk-select:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-select:focus,.uk-overlay-primary .uk-select:focus,.uk-offcanvas-bar .uk-select:focus,.uk-light .uk-textarea:focus,.uk-section-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea:focus,.uk-card-primary.uk-card-body .uk-textarea:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea:focus,.uk-card-secondary.uk-card-body .uk-textarea:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea:focus,.uk-overlay-primary .uk-textarea:focus,.uk-offcanvas-bar .uk-textarea:focus{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.7)}.uk-light .uk-input:-ms-input-placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-input:-ms-input-placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-input:-ms-input-placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-input:-ms-input-placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-input:-ms-input-placeholder,.uk-card-primary.uk-card-body .uk-input:-ms-input-placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-input:-ms-input-placeholder,.uk-card-secondary.uk-card-body .uk-input:-ms-input-placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input:-ms-input-placeholder,.uk-overlay-primary .uk-input:-ms-input-placeholder,.uk-offcanvas-bar .uk-input:-ms-input-placeholder{color:rgba(255,255,255,0.5) !important}.uk-light .uk-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-input::placeholder,.uk-card-primary.uk-card-body .uk-input::placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-input::placeholder,.uk-card-secondary.uk-card-body .uk-input::placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input::placeholder,.uk-overlay-primary .uk-input::placeholder,.uk-offcanvas-bar .uk-input::placeholder{color:rgba(255,255,255,0.5)}.uk-light .uk-textarea:-ms-input-placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-textarea:-ms-input-placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea:-ms-input-placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea:-ms-input-placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea:-ms-input-placeholder,.uk-card-primary.uk-card-body .uk-textarea:-ms-input-placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea:-ms-input-placeholder,.uk-card-secondary.uk-card-body .uk-textarea:-ms-input-placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea:-ms-input-placeholder,.uk-overlay-primary .uk-textarea:-ms-input-placeholder,.uk-offcanvas-bar .uk-textarea:-ms-input-placeholder{color:rgba(255,255,255,0.5) !important}.uk-light .uk-textarea::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-card-primary.uk-card-body .uk-textarea::placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea::placeholder,.uk-card-secondary.uk-card-body .uk-textarea::placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea::placeholder,.uk-overlay-primary .uk-textarea::placeholder,.uk-offcanvas-bar .uk-textarea::placeholder{color:rgba(255,255,255,0.5)}.uk-light .uk-select:not([multiple]):not([size]),.uk-section-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-section-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-card-primary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-primary>:not([class*='uk-card-media']) .uk-select:not([multiple]):not([size]),.uk-card-secondary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-secondary>:not([class*='uk-card-media']) .uk-select:not([multiple]):not([size]),.uk-overlay-primary .uk-select:not([multiple]):not([size]),.uk-offcanvas-bar .uk-select:not([multiple]):not([size]){background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba(255,255,255,0.7)%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba(255,255,255,0.7)%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-radio,.uk-section-primary:not(.uk-preserve-color) .uk-radio,.uk-section-secondary:not(.uk-preserve-color) .uk-radio,.uk-tile-primary:not(.uk-preserve-color) .uk-radio,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio,.uk-card-primary.uk-card-body .uk-radio,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio,.uk-card-secondary.uk-card-body .uk-radio,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio,.uk-overlay-primary .uk-radio,.uk-offcanvas-bar .uk-radio,.uk-light .uk-checkbox,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-card-primary.uk-card-body .uk-checkbox,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox,.uk-card-secondary.uk-card-body .uk-checkbox,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox,.uk-overlay-primary .uk-checkbox,.uk-offcanvas-bar .uk-checkbox{background-color:rgba(242,242,242,0.1);border-color:rgba(255,255,255,0.2)}.uk-light .uk-radio:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:focus,.uk-card-primary.uk-card-body .uk-radio:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:focus,.uk-card-secondary.uk-card-body .uk-radio:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:focus,.uk-overlay-primary .uk-radio:focus,.uk-offcanvas-bar .uk-radio:focus,.uk-light .uk-checkbox:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-card-primary.uk-card-body .uk-checkbox:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:focus,.uk-card-secondary.uk-card-body .uk-checkbox:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:focus,.uk-overlay-primary .uk-checkbox:focus,.uk-offcanvas-bar .uk-checkbox:focus{border-color:rgba(255,255,255,0.7)}.uk-light .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-overlay-primary .uk-radio:checked,.uk-offcanvas-bar .uk-radio:checked,.uk-light .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:checked,.uk-light .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-checkbox:indeterminate{background-color:#fff;border-color:rgba(255,255,255,0.7)}.uk-light .uk-radio:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-card-primary.uk-card-body .uk-radio:checked:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:checked:focus,.uk-card-secondary.uk-card-body .uk-radio:checked:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:checked:focus,.uk-overlay-primary .uk-radio:checked:focus,.uk-offcanvas-bar .uk-radio:checked:focus,.uk-light .uk-checkbox:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-card-primary.uk-card-body .uk-checkbox:checked:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:checked:focus,.uk-card-secondary.uk-card-body .uk-checkbox:checked:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:checked:focus,.uk-overlay-primary .uk-checkbox:checked:focus,.uk-offcanvas-bar .uk-checkbox:checked:focus,.uk-light .uk-checkbox:indeterminate:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate:focus,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate:focus,.uk-overlay-primary .uk-checkbox:indeterminate:focus,.uk-offcanvas-bar .uk-checkbox:indeterminate:focus{background-color:#e6e6e6}.uk-light .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-overlay-primary .uk-radio:checked,.uk-offcanvas-bar .uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-form-label,.uk-section-primary:not(.uk-preserve-color) .uk-form-label,.uk-section-secondary:not(.uk-preserve-color) .uk-form-label,.uk-tile-primary:not(.uk-preserve-color) .uk-form-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-label,.uk-card-primary.uk-card-body .uk-form-label,.uk-card-primary>:not([class*='uk-card-media']) .uk-form-label,.uk-card-secondary.uk-card-body .uk-form-label,.uk-card-secondary>:not([class*='uk-card-media']) .uk-form-label,.uk-overlay-primary .uk-form-label,.uk-offcanvas-bar .uk-form-label{color:#fff}.uk-light .uk-form-icon,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon,.uk-card-primary.uk-card-body .uk-form-icon,.uk-card-primary>:not([class*='uk-card-media']) .uk-form-icon,.uk-card-secondary.uk-card-body .uk-form-icon,.uk-card-secondary>:not([class*='uk-card-media']) .uk-form-icon,.uk-overlay-primary .uk-form-icon,.uk-offcanvas-bar .uk-form-icon{color:rgba(255,255,255,0.5)}.uk-light .uk-form-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-card-primary.uk-card-body .uk-form-icon:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-form-icon:hover,.uk-card-secondary.uk-card-body .uk-form-icon:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-form-icon:hover,.uk-overlay-primary .uk-form-icon:hover,.uk-offcanvas-bar .uk-form-icon:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-button-default,.uk-section-primary:not(.uk-preserve-color) .uk-button-default,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default,.uk-card-primary.uk-card-body .uk-button-default,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default,.uk-card-secondary.uk-card-body .uk-button-default,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default,.uk-overlay-primary .uk-button-default,.uk-offcanvas-bar .uk-button-default{background-color:rgba(0,0,0,0);color:#fff;border-color:rgba(255,255,255,0.7)}.uk-light .uk-button-default:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:hover,.uk-card-primary.uk-card-body .uk-button-default:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default:hover,.uk-card-secondary.uk-card-body .uk-button-default:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default:hover,.uk-overlay-primary .uk-button-default:hover,.uk-offcanvas-bar .uk-button-default:hover,.uk-light .uk-button-default:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:focus,.uk-card-primary.uk-card-body .uk-button-default:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default:focus,.uk-card-secondary.uk-card-body .uk-button-default:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default:focus,.uk-overlay-primary .uk-button-default:focus,.uk-offcanvas-bar .uk-button-default:focus{background-color:rgba(0,0,0,0);color:#fff;border-color:#fff}.uk-light .uk-button-default:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:active,.uk-card-primary.uk-card-body .uk-button-default:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default:active,.uk-card-secondary.uk-card-body .uk-button-default:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default:active,.uk-overlay-primary .uk-button-default:active,.uk-offcanvas-bar .uk-button-default:active,.uk-light .uk-button-default.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-card-primary.uk-card-body .uk-button-default.uk-active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default.uk-active,.uk-card-secondary.uk-card-body .uk-button-default.uk-active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default.uk-active,.uk-overlay-primary .uk-button-default.uk-active,.uk-offcanvas-bar .uk-button-default.uk-active{background-color:rgba(0,0,0,0);color:#fff;border-color:#fff}.uk-light .uk-button-primary,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary,.uk-card-primary.uk-card-body .uk-button-primary,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary,.uk-card-secondary.uk-card-body .uk-button-primary,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary,.uk-overlay-primary .uk-button-primary,.uk-offcanvas-bar .uk-button-primary{background-color:#fff;color:#666}.uk-light .uk-button-primary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-card-primary.uk-card-body .uk-button-primary:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary:hover,.uk-card-secondary.uk-card-body .uk-button-primary:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary:hover,.uk-overlay-primary .uk-button-primary:hover,.uk-offcanvas-bar .uk-button-primary:hover,.uk-light .uk-button-primary:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:focus,.uk-card-primary.uk-card-body .uk-button-primary:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary:focus,.uk-card-secondary.uk-card-body .uk-button-primary:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary:focus,.uk-overlay-primary .uk-button-primary:focus,.uk-offcanvas-bar .uk-button-primary:focus{background-color:#f2f2f2;color:#666}.uk-light .uk-button-primary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:active,.uk-card-primary.uk-card-body .uk-button-primary:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary:active,.uk-card-secondary.uk-card-body .uk-button-primary:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary:active,.uk-overlay-primary .uk-button-primary:active,.uk-offcanvas-bar .uk-button-primary:active,.uk-light .uk-button-primary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-card-primary.uk-card-body .uk-button-primary.uk-active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary.uk-active,.uk-card-secondary.uk-card-body .uk-button-primary.uk-active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary.uk-active,.uk-overlay-primary .uk-button-primary.uk-active,.uk-offcanvas-bar .uk-button-primary.uk-active{background-color:#e6e6e6;color:#666}.uk-light .uk-button-secondary,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary,.uk-card-primary.uk-card-body .uk-button-secondary,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary,.uk-card-secondary.uk-card-body .uk-button-secondary,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary,.uk-overlay-primary .uk-button-secondary,.uk-offcanvas-bar .uk-button-secondary{background-color:#fff;color:#666}.uk-light .uk-button-secondary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-card-primary.uk-card-body .uk-button-secondary:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary:hover,.uk-card-secondary.uk-card-body .uk-button-secondary:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary:hover,.uk-overlay-primary .uk-button-secondary:hover,.uk-offcanvas-bar .uk-button-secondary:hover,.uk-light .uk-button-secondary:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:focus,.uk-card-primary.uk-card-body .uk-button-secondary:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary:focus,.uk-card-secondary.uk-card-body .uk-button-secondary:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary:focus,.uk-overlay-primary .uk-button-secondary:focus,.uk-offcanvas-bar .uk-button-secondary:focus{background-color:#f2f2f2;color:#666}.uk-light .uk-button-secondary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-card-primary.uk-card-body .uk-button-secondary:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary:active,.uk-card-secondary.uk-card-body .uk-button-secondary:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary:active,.uk-overlay-primary .uk-button-secondary:active,.uk-offcanvas-bar .uk-button-secondary:active,.uk-light .uk-button-secondary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-card-primary.uk-card-body .uk-button-secondary.uk-active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary.uk-active,.uk-card-secondary.uk-card-body .uk-button-secondary.uk-active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary.uk-active,.uk-overlay-primary .uk-button-secondary.uk-active,.uk-offcanvas-bar .uk-button-secondary.uk-active{background-color:#e6e6e6;color:#666}.uk-light .uk-button-text,.uk-section-primary:not(.uk-preserve-color) .uk-button-text,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text,.uk-card-primary.uk-card-body .uk-button-text,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text,.uk-card-secondary.uk-card-body .uk-button-text,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text,.uk-overlay-primary .uk-button-text,.uk-offcanvas-bar .uk-button-text{color:#fff}.uk-light .uk-button-text::before,.uk-section-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text::before,.uk-card-primary.uk-card-body .uk-button-text::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text::before,.uk-card-secondary.uk-card-body .uk-button-text::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text::before,.uk-overlay-primary .uk-button-text::before,.uk-offcanvas-bar .uk-button-text::before{border-bottom-color:#fff}.uk-light .uk-button-text:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:hover,.uk-card-primary.uk-card-body .uk-button-text:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text:hover,.uk-card-secondary.uk-card-body .uk-button-text:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text:hover,.uk-overlay-primary .uk-button-text:hover,.uk-offcanvas-bar .uk-button-text:hover,.uk-light .uk-button-text:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:focus,.uk-card-primary.uk-card-body .uk-button-text:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text:focus,.uk-card-secondary.uk-card-body .uk-button-text:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text:focus,.uk-overlay-primary .uk-button-text:focus,.uk-offcanvas-bar .uk-button-text:focus{color:#fff}.uk-light .uk-button-text:disabled,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-card-primary.uk-card-body .uk-button-text:disabled,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text:disabled,.uk-card-secondary.uk-card-body .uk-button-text:disabled,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text:disabled,.uk-overlay-primary .uk-button-text:disabled,.uk-offcanvas-bar .uk-button-text:disabled{color:rgba(255,255,255,0.5)}.uk-light .uk-button-link,.uk-section-primary:not(.uk-preserve-color) .uk-button-link,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link,.uk-card-primary.uk-card-body .uk-button-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-link,.uk-card-secondary.uk-card-body .uk-button-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-link,.uk-overlay-primary .uk-button-link,.uk-offcanvas-bar .uk-button-link{color:rgba(255,255,255,0.5)}.uk-light .uk-button-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link:hover,.uk-card-primary.uk-card-body .uk-button-link:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-link:hover,.uk-card-secondary.uk-card-body .uk-button-link:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-link:hover,.uk-overlay-primary .uk-button-link:hover,.uk-offcanvas-bar .uk-button-link:hover,.uk-light .uk-button-link:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-link:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link:focus,.uk-card-primary.uk-card-body .uk-button-link:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-link:focus,.uk-card-secondary.uk-card-body .uk-button-link:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-link:focus,.uk-overlay-primary .uk-button-link:focus,.uk-offcanvas-bar .uk-button-link:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-grid-divider>:not(.uk-first-column)::before,.uk-overlay-primary .uk-grid-divider>:not(.uk-first-column)::before,.uk-offcanvas-bar .uk-grid-divider>:not(.uk-first-column)::before{border-left-color:rgba(255,255,255,0.2)}.uk-light .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-primary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-overlay-primary .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-offcanvas-bar .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-close,.uk-section-primary:not(.uk-preserve-color) .uk-close,.uk-section-secondary:not(.uk-preserve-color) .uk-close,.uk-tile-primary:not(.uk-preserve-color) .uk-close,.uk-tile-secondary:not(.uk-preserve-color) .uk-close,.uk-card-primary.uk-card-body .uk-close,.uk-card-primary>:not([class*='uk-card-media']) .uk-close,.uk-card-secondary.uk-card-body .uk-close,.uk-card-secondary>:not([class*='uk-card-media']) .uk-close,.uk-overlay-primary .uk-close,.uk-offcanvas-bar .uk-close{color:rgba(255,255,255,0.5)}.uk-light .uk-close:hover,.uk-section-primary:not(.uk-preserve-color) .uk-close:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-close:hover,.uk-card-primary.uk-card-body .uk-close:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-close:hover,.uk-card-secondary.uk-card-body .uk-close:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-close:hover,.uk-overlay-primary .uk-close:hover,.uk-offcanvas-bar .uk-close:hover,.uk-light .uk-close:focus,.uk-section-primary:not(.uk-preserve-color) .uk-close:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-close:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-close:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-close:focus,.uk-card-primary.uk-card-body .uk-close:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-close:focus,.uk-card-secondary.uk-card-body .uk-close:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-close:focus,.uk-overlay-primary .uk-close:focus,.uk-offcanvas-bar .uk-close:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-totop,.uk-section-primary:not(.uk-preserve-color) .uk-totop,.uk-section-secondary:not(.uk-preserve-color) .uk-totop,.uk-tile-primary:not(.uk-preserve-color) .uk-totop,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop,.uk-card-primary.uk-card-body .uk-totop,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop,.uk-card-secondary.uk-card-body .uk-totop,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop,.uk-overlay-primary .uk-totop,.uk-offcanvas-bar .uk-totop{color:rgba(255,255,255,0.5)}.uk-light .uk-totop:hover,.uk-section-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:hover,.uk-card-primary.uk-card-body .uk-totop:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop:hover,.uk-card-secondary.uk-card-body .uk-totop:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop:hover,.uk-overlay-primary .uk-totop:hover,.uk-offcanvas-bar .uk-totop:hover,.uk-light .uk-totop:focus,.uk-section-primary:not(.uk-preserve-color) .uk-totop:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:focus,.uk-card-primary.uk-card-body .uk-totop:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop:focus,.uk-card-secondary.uk-card-body .uk-totop:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop:focus,.uk-overlay-primary .uk-totop:focus,.uk-offcanvas-bar .uk-totop:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-totop:active,.uk-section-primary:not(.uk-preserve-color) .uk-totop:active,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:active,.uk-card-primary.uk-card-body .uk-totop:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop:active,.uk-card-secondary.uk-card-body .uk-totop:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop:active,.uk-overlay-primary .uk-totop:active,.uk-offcanvas-bar .uk-totop:active{color:#fff}.uk-light .uk-badge,.uk-section-primary:not(.uk-preserve-color) .uk-badge,.uk-section-secondary:not(.uk-preserve-color) .uk-badge,.uk-tile-primary:not(.uk-preserve-color) .uk-badge,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge,.uk-card-primary.uk-card-body .uk-badge,.uk-card-primary>:not([class*='uk-card-media']) .uk-badge,.uk-card-secondary.uk-card-body .uk-badge,.uk-card-secondary>:not([class*='uk-card-media']) .uk-badge,.uk-overlay-primary .uk-badge,.uk-offcanvas-bar .uk-badge{background-color:#fff;color:#666}.uk-light .uk-badge:hover,.uk-section-primary:not(.uk-preserve-color) .uk-badge:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-badge:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-badge:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge:hover,.uk-card-primary.uk-card-body .uk-badge:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-badge:hover,.uk-card-secondary.uk-card-body .uk-badge:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-badge:hover,.uk-overlay-primary .uk-badge:hover,.uk-offcanvas-bar .uk-badge:hover,.uk-light .uk-badge:focus,.uk-section-primary:not(.uk-preserve-color) .uk-badge:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-badge:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-badge:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge:focus,.uk-card-primary.uk-card-body .uk-badge:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-badge:focus,.uk-card-secondary.uk-card-body .uk-badge:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-badge:focus,.uk-overlay-primary .uk-badge:focus,.uk-offcanvas-bar .uk-badge:focus{color:#666}.uk-light .uk-label,.uk-section-primary:not(.uk-preserve-color) .uk-label,.uk-section-secondary:not(.uk-preserve-color) .uk-label,.uk-tile-primary:not(.uk-preserve-color) .uk-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-label,.uk-card-primary.uk-card-body .uk-label,.uk-card-primary>:not([class*='uk-card-media']) .uk-label,.uk-card-secondary.uk-card-body .uk-label,.uk-card-secondary>:not([class*='uk-card-media']) .uk-label,.uk-overlay-primary .uk-label,.uk-offcanvas-bar .uk-label{background-color:#fff;color:#666}.uk-light .uk-article-meta,.uk-section-primary:not(.uk-preserve-color) .uk-article-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-article-meta,.uk-card-primary.uk-card-body .uk-article-meta,.uk-card-primary>:not([class*='uk-card-media']) .uk-article-meta,.uk-card-secondary.uk-card-body .uk-article-meta,.uk-card-secondary>:not([class*='uk-card-media']) .uk-article-meta,.uk-overlay-primary .uk-article-meta,.uk-offcanvas-bar .uk-article-meta{color:rgba(255,255,255,0.5)}.uk-light .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input,.uk-card-primary.uk-card-body .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-input,.uk-overlay-primary .uk-search-input,.uk-offcanvas-bar .uk-search-input{color:rgba(255,255,255,0.7)}.uk-light .uk-search-input:-ms-input-placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-search-input:-ms-input-placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input:-ms-input-placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input:-ms-input-placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input:-ms-input-placeholder,.uk-card-primary.uk-card-body .uk-search-input:-ms-input-placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-input:-ms-input-placeholder,.uk-card-secondary.uk-card-body .uk-search-input:-ms-input-placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-input:-ms-input-placeholder,.uk-overlay-primary .uk-search-input:-ms-input-placeholder,.uk-offcanvas-bar .uk-search-input:-ms-input-placeholder{color:rgba(255,255,255,0.5) !important}.uk-light .uk-search-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-card-primary.uk-card-body .uk-search-input::placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-input::placeholder,.uk-card-secondary.uk-card-body .uk-search-input::placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-input::placeholder,.uk-overlay-primary .uk-search-input::placeholder,.uk-offcanvas-bar .uk-search-input::placeholder{color:rgba(255,255,255,0.5)}.uk-light .uk-search .uk-search-icon,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-card-primary.uk-card-body .uk-search .uk-search-icon,.uk-card-primary>:not([class*='uk-card-media']) .uk-search .uk-search-icon,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search .uk-search-icon,.uk-overlay-primary .uk-search .uk-search-icon,.uk-offcanvas-bar .uk-search .uk-search-icon{color:rgba(255,255,255,0.5)}.uk-light .uk-search .uk-search-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-card-primary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-search .uk-search-icon:hover,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search .uk-search-icon:hover,.uk-overlay-primary .uk-search .uk-search-icon:hover,.uk-offcanvas-bar .uk-search .uk-search-icon:hover{color:rgba(255,255,255,0.5)}.uk-light .uk-search-default .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-card-primary.uk-card-body .uk-search-default .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input,.uk-overlay-primary .uk-search-default .uk-search-input,.uk-offcanvas-bar .uk-search-default .uk-search-input{background-color:rgba(0,0,0,0);border-color:rgba(255,255,255,0.2)}.uk-light .uk-search-default .uk-search-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-card-primary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input:focus,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input:focus,.uk-overlay-primary .uk-search-default .uk-search-input:focus,.uk-offcanvas-bar .uk-search-default .uk-search-input:focus{background-color:rgba(0,0,0,0)}.uk-light .uk-search-navbar .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-card-primary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-navbar .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-navbar .uk-search-input,.uk-overlay-primary .uk-search-navbar .uk-search-input,.uk-offcanvas-bar .uk-search-navbar .uk-search-input{background-color:rgba(0,0,0,0)}.uk-light .uk-search-large .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-card-primary.uk-card-body .uk-search-large .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-large .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-large .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-large .uk-search-input,.uk-overlay-primary .uk-search-large .uk-search-input,.uk-offcanvas-bar .uk-search-large .uk-search-input{background-color:rgba(0,0,0,0)}.uk-light .uk-search-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle,.uk-card-primary.uk-card-body .uk-search-toggle,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-toggle,.uk-card-secondary.uk-card-body .uk-search-toggle,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-toggle,.uk-overlay-primary .uk-search-toggle,.uk-offcanvas-bar .uk-search-toggle{color:rgba(255,255,255,0.5)}.uk-light .uk-search-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-card-primary.uk-card-body .uk-search-toggle:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-toggle:hover,.uk-card-secondary.uk-card-body .uk-search-toggle:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-toggle:hover,.uk-overlay-primary .uk-search-toggle:hover,.uk-offcanvas-bar .uk-search-toggle:hover,.uk-light .uk-search-toggle:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle:focus,.uk-card-primary.uk-card-body .uk-search-toggle:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-toggle:focus,.uk-card-secondary.uk-card-body .uk-search-toggle:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-toggle:focus,.uk-overlay-primary .uk-search-toggle:focus,.uk-offcanvas-bar .uk-search-toggle:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-parent-icon>.uk-parent>a::after,.uk-section-primary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent>a::after,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent>a::after,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent>a::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent>a::after,.uk-card-primary.uk-card-body .uk-nav-parent-icon>.uk-parent>a::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-parent-icon>.uk-parent>a::after,.uk-card-secondary.uk-card-body .uk-nav-parent-icon>.uk-parent>a::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-parent-icon>.uk-parent>a::after,.uk-overlay-primary .uk-nav-parent-icon>.uk-parent>a::after,.uk-offcanvas-bar .uk-nav-parent-icon>.uk-parent>a::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22rgba(255,255,255,0.7)%22%20stroke-width%3D%221.1%22%20points%3D%2210%201%204%207%2010%2013%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-section-primary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-card-primary.uk-card-body .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-card-secondary.uk-card-body .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-overlay-primary .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-offcanvas-bar .uk-nav-parent-icon>.uk-parent.uk-open>a::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22rgba(255,255,255,0.7)%22%20stroke-width%3D%221.1%22%20points%3D%221%204%207%2010%2013%204%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-nav-default>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-card-primary.uk-card-body .uk-nav-default>li>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li>a,.uk-card-secondary.uk-card-body .uk-nav-default>li>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li>a,.uk-overlay-primary .uk-nav-default>li>a,.uk-offcanvas-bar .uk-nav-default>li>a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-default>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-card-primary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li>a:hover,.uk-overlay-primary .uk-nav-default>li>a:hover,.uk-offcanvas-bar .uk-nav-default>li>a:hover,.uk-light .uk-nav-default>li>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:focus,.uk-card-primary.uk-card-body .uk-nav-default>li>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li>a:focus,.uk-card-secondary.uk-card-body .uk-nav-default>li>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li>a:focus,.uk-overlay-primary .uk-nav-default>li>a:focus,.uk-offcanvas-bar .uk-nav-default>li>a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-default>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li.uk-active>a,.uk-overlay-primary .uk-nav-default>li.uk-active>a,.uk-offcanvas-bar .uk-nav-default>li.uk-active>a{color:#fff}.uk-light .uk-nav-default .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-header,.uk-overlay-primary .uk-nav-default .uk-nav-header,.uk-offcanvas-bar .uk-nav-default .uk-nav-header{color:#fff}.uk-light .uk-nav-default .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-divider,.uk-overlay-primary .uk-nav-default .uk-nav-divider,.uk-offcanvas-bar .uk-nav-default .uk-nav-divider{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-nav-default .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a,.uk-overlay-primary .uk-nav-default .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-default .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-default .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a:hover,.uk-light .uk-nav-default .uk-nav-sub a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:focus,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a:focus,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a:focus,.uk-overlay-primary .uk-nav-default .uk-nav-sub a:focus,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-primary>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-card-primary.uk-card-body .uk-nav-primary>li>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li>a,.uk-overlay-primary .uk-nav-primary>li>a,.uk-offcanvas-bar .uk-nav-primary>li>a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-primary>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-card-primary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li>a:hover,.uk-overlay-primary .uk-nav-primary>li>a:hover,.uk-offcanvas-bar .uk-nav-primary>li>a:hover,.uk-light .uk-nav-primary>li>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:focus,.uk-card-primary.uk-card-body .uk-nav-primary>li>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li>a:focus,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li>a:focus,.uk-overlay-primary .uk-nav-primary>li>a:focus,.uk-offcanvas-bar .uk-nav-primary>li>a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-primary>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li.uk-active>a,.uk-overlay-primary .uk-nav-primary>li.uk-active>a,.uk-offcanvas-bar .uk-nav-primary>li.uk-active>a{color:#fff}.uk-light .uk-nav-primary .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-header,.uk-overlay-primary .uk-nav-primary .uk-nav-header,.uk-offcanvas-bar .uk-nav-primary .uk-nav-header{color:#fff}.uk-light .uk-nav-primary .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-divider,.uk-overlay-primary .uk-nav-primary .uk-nav-divider,.uk-offcanvas-bar .uk-nav-primary .uk-nav-divider{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-nav-primary .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-primary .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a:hover,.uk-light .uk-nav-primary .uk-nav-sub a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:focus,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a:focus,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a:focus,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a:focus,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-navbar-nav>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a,.uk-overlay-primary .uk-navbar-nav>li>a,.uk-offcanvas-bar .uk-navbar-nav>li>a{color:rgba(255,255,255,0.5)}.uk-light .uk-navbar-nav>li:hover>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li:hover>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li:hover>a,.uk-overlay-primary .uk-navbar-nav>li:hover>a,.uk-offcanvas-bar .uk-navbar-nav>li:hover>a,.uk-light .uk-navbar-nav>li>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:focus,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:focus,.uk-overlay-primary .uk-navbar-nav>li>a:focus,.uk-offcanvas-bar .uk-navbar-nav>li>a:focus,.uk-light .uk-navbar-nav>li>a.uk-open,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a.uk-open,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a.uk-open,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a.uk-open,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a.uk-open,.uk-overlay-primary .uk-navbar-nav>li>a.uk-open,.uk-offcanvas-bar .uk-navbar-nav>li>a.uk-open{color:rgba(255,255,255,0.7)}.uk-light .uk-navbar-nav>li>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:active,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:active,.uk-overlay-primary .uk-navbar-nav>li>a:active,.uk-offcanvas-bar .uk-navbar-nav>li>a:active{color:#fff}.uk-light .uk-navbar-nav>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li.uk-active>a,.uk-overlay-primary .uk-navbar-nav>li.uk-active>a,.uk-offcanvas-bar .uk-navbar-nav>li.uk-active>a{color:#fff}.uk-light .uk-navbar-item,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-item,.uk-card-primary.uk-card-body .uk-navbar-item,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-item,.uk-card-secondary.uk-card-body .uk-navbar-item,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-item,.uk-overlay-primary .uk-navbar-item,.uk-offcanvas-bar .uk-navbar-item{color:rgba(255,255,255,0.7)}.uk-light .uk-navbar-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-card-primary.uk-card-body .uk-navbar-toggle,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle,.uk-card-secondary.uk-card-body .uk-navbar-toggle,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle,.uk-overlay-primary .uk-navbar-toggle,.uk-offcanvas-bar .uk-navbar-toggle{color:rgba(255,255,255,0.5)}.uk-light .uk-navbar-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-card-primary.uk-card-body .uk-navbar-toggle:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle:hover,.uk-card-secondary.uk-card-body .uk-navbar-toggle:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle:hover,.uk-overlay-primary .uk-navbar-toggle:hover,.uk-offcanvas-bar .uk-navbar-toggle:hover,.uk-light .uk-navbar-toggle:focus,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle:focus,.uk-card-primary.uk-card-body .uk-navbar-toggle:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle:focus,.uk-card-secondary.uk-card-body .uk-navbar-toggle:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle:focus,.uk-overlay-primary .uk-navbar-toggle:focus,.uk-offcanvas-bar .uk-navbar-toggle:focus,.uk-light .uk-navbar-toggle.uk-open,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle.uk-open,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle.uk-open,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle.uk-open,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle.uk-open,.uk-card-primary.uk-card-body .uk-navbar-toggle.uk-open,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle.uk-open,.uk-card-secondary.uk-card-body .uk-navbar-toggle.uk-open,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle.uk-open,.uk-overlay-primary .uk-navbar-toggle.uk-open,.uk-offcanvas-bar .uk-navbar-toggle.uk-open{color:rgba(255,255,255,0.7)}.uk-light .uk-subnav>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-card-primary.uk-card-body .uk-subnav>*>:first-child,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav>*>:first-child,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>*>:first-child,.uk-overlay-primary .uk-subnav>*>:first-child,.uk-offcanvas-bar .uk-subnav>*>:first-child{color:rgba(255,255,255,0.5)}.uk-light .uk-subnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-card-primary.uk-card-body .uk-subnav>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>*>a:hover,.uk-overlay-primary .uk-subnav>*>a:hover,.uk-offcanvas-bar .uk-subnav>*>a:hover,.uk-light .uk-subnav>*>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>a:focus,.uk-card-primary.uk-card-body .uk-subnav>*>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>*>a:focus,.uk-card-secondary.uk-card-body .uk-subnav>*>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>*>a:focus,.uk-overlay-primary .uk-subnav>*>a:focus,.uk-offcanvas-bar .uk-subnav>*>a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-subnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-card-primary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>.uk-active>a,.uk-overlay-primary .uk-subnav>.uk-active>a,.uk-offcanvas-bar .uk-subnav>.uk-active>a{color:#fff}.uk-light .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{border-left-color:rgba(255,255,255,0.2)}.uk-light .uk-subnav-pill>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-card-primary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>:first-child,.uk-overlay-primary .uk-subnav-pill>*>:first-child,.uk-offcanvas-bar .uk-subnav-pill>*>:first-child{background-color:rgba(0,0,0,0);color:rgba(255,255,255,0.5)}.uk-light .uk-subnav-pill>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:hover,.uk-overlay-primary .uk-subnav-pill>*>a:hover,.uk-offcanvas-bar .uk-subnav-pill>*>a:hover,.uk-light .uk-subnav-pill>*>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:focus,.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:focus,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:focus,.uk-overlay-primary .uk-subnav-pill>*>a:focus,.uk-offcanvas-bar .uk-subnav-pill>*>a:focus{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7)}.uk-light .uk-subnav-pill>*>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:active,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:active,.uk-overlay-primary .uk-subnav-pill>*>a:active,.uk-offcanvas-bar .uk-subnav-pill>*>a:active{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7)}.uk-light .uk-subnav-pill>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-card-primary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>.uk-active>a,.uk-overlay-primary .uk-subnav-pill>.uk-active>a,.uk-offcanvas-bar .uk-subnav-pill>.uk-active>a{background-color:#fff;color:#666}.uk-light .uk-subnav>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-card-primary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>.uk-disabled>a,.uk-overlay-primary .uk-subnav>.uk-disabled>a,.uk-offcanvas-bar .uk-subnav>.uk-disabled>a{color:rgba(255,255,255,0.5)}.uk-light .uk-breadcrumb>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-card-primary.uk-card-body .uk-breadcrumb>*>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>*>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>*>*,.uk-overlay-primary .uk-breadcrumb>*>*,.uk-offcanvas-bar .uk-breadcrumb>*>*{color:rgba(255,255,255,0.5)}.uk-light .uk-breadcrumb>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-card-primary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>*>:hover,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>*>:hover,.uk-overlay-primary .uk-breadcrumb>*>:hover,.uk-offcanvas-bar .uk-breadcrumb>*>:hover,.uk-light .uk-breadcrumb>*>:focus,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:focus,.uk-card-primary.uk-card-body .uk-breadcrumb>*>:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>*>:focus,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>*>:focus,.uk-overlay-primary .uk-breadcrumb>*>:focus,.uk-offcanvas-bar .uk-breadcrumb>*>:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-breadcrumb>:last-child>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-card-primary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>:last-child>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>:last-child>*,.uk-overlay-primary .uk-breadcrumb>:last-child>*,.uk-offcanvas-bar .uk-breadcrumb>:last-child>*{color:rgba(255,255,255,0.7)}.uk-light .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{color:rgba(255,255,255,0.5)}.uk-light .uk-pagination>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-card-primary.uk-card-body .uk-pagination>*>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>*>*,.uk-card-secondary.uk-card-body .uk-pagination>*>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>*>*,.uk-overlay-primary .uk-pagination>*>*,.uk-offcanvas-bar .uk-pagination>*>*{color:rgba(255,255,255,0.5)}.uk-light .uk-pagination>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-card-primary.uk-card-body .uk-pagination>*>:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>*>:hover,.uk-card-secondary.uk-card-body .uk-pagination>*>:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>*>:hover,.uk-overlay-primary .uk-pagination>*>:hover,.uk-offcanvas-bar .uk-pagination>*>:hover,.uk-light .uk-pagination>*>:focus,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>:focus,.uk-card-primary.uk-card-body .uk-pagination>*>:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>*>:focus,.uk-card-secondary.uk-card-body .uk-pagination>*>:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>*>:focus,.uk-overlay-primary .uk-pagination>*>:focus,.uk-offcanvas-bar .uk-pagination>*>:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-pagination>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-card-primary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>.uk-active>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>.uk-active>*,.uk-overlay-primary .uk-pagination>.uk-active>*,.uk-offcanvas-bar .uk-pagination>.uk-active>*{color:rgba(255,255,255,0.7)}.uk-light .uk-pagination>.uk-disabled>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-card-primary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>.uk-disabled>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>.uk-disabled>*,.uk-overlay-primary .uk-pagination>.uk-disabled>*,.uk-offcanvas-bar .uk-pagination>.uk-disabled>*{color:rgba(255,255,255,0.5)}.uk-light .uk-tab::before,.uk-section-primary:not(.uk-preserve-color) .uk-tab::before,.uk-section-secondary:not(.uk-preserve-color) .uk-tab::before,.uk-tile-primary:not(.uk-preserve-color) .uk-tab::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab::before,.uk-card-primary.uk-card-body .uk-tab::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab::before,.uk-card-secondary.uk-card-body .uk-tab::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab::before,.uk-overlay-primary .uk-tab::before,.uk-offcanvas-bar .uk-tab::before{border-color:rgba(255,255,255,0.2)}.uk-light .uk-tab>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a,.uk-card-primary.uk-card-body .uk-tab>*>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>*>a,.uk-card-secondary.uk-card-body .uk-tab>*>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>*>a,.uk-overlay-primary .uk-tab>*>a,.uk-offcanvas-bar .uk-tab>*>a{color:rgba(255,255,255,0.5)}.uk-light .uk-tab>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-card-primary.uk-card-body .uk-tab>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>*>a:hover,.uk-card-secondary.uk-card-body .uk-tab>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>*>a:hover,.uk-overlay-primary .uk-tab>*>a:hover,.uk-offcanvas-bar .uk-tab>*>a:hover,.uk-light .uk-tab>*>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a:focus,.uk-card-primary.uk-card-body .uk-tab>*>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>*>a:focus,.uk-card-secondary.uk-card-body .uk-tab>*>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>*>a:focus,.uk-overlay-primary .uk-tab>*>a:focus,.uk-offcanvas-bar .uk-tab>*>a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-tab>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-card-primary.uk-card-body .uk-tab>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>.uk-active>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>.uk-active>a,.uk-overlay-primary .uk-tab>.uk-active>a,.uk-offcanvas-bar .uk-tab>.uk-active>a{color:#fff;border-color:#fff}.uk-light .uk-tab>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-card-primary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>.uk-disabled>a,.uk-overlay-primary .uk-tab>.uk-disabled>a,.uk-offcanvas-bar .uk-tab>.uk-disabled>a{color:rgba(255,255,255,0.5)}.uk-light .uk-slidenav,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav,.uk-card-primary.uk-card-body .uk-slidenav,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav,.uk-card-secondary.uk-card-body .uk-slidenav,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav,.uk-overlay-primary .uk-slidenav,.uk-offcanvas-bar .uk-slidenav{color:rgba(255,255,255,0.7)}.uk-light .uk-slidenav:hover,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-card-primary.uk-card-body .uk-slidenav:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav:hover,.uk-card-secondary.uk-card-body .uk-slidenav:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav:hover,.uk-overlay-primary .uk-slidenav:hover,.uk-offcanvas-bar .uk-slidenav:hover,.uk-light .uk-slidenav:focus,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:focus,.uk-card-primary.uk-card-body .uk-slidenav:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav:focus,.uk-card-secondary.uk-card-body .uk-slidenav:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav:focus,.uk-overlay-primary .uk-slidenav:focus,.uk-offcanvas-bar .uk-slidenav:focus{color:rgba(255,255,255,0.95)}.uk-light .uk-slidenav:active,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:active,.uk-card-primary.uk-card-body .uk-slidenav:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav:active,.uk-card-secondary.uk-card-body .uk-slidenav:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav:active,.uk-overlay-primary .uk-slidenav:active,.uk-offcanvas-bar .uk-slidenav:active{color:rgba(255,255,255,0.7)}.uk-light .uk-dotnav>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-card-primary.uk-card-body .uk-dotnav>*>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>*,.uk-card-secondary.uk-card-body .uk-dotnav>*>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>*,.uk-overlay-primary .uk-dotnav>*>*,.uk-offcanvas-bar .uk-dotnav>*>*{background-color:rgba(0,0,0,0);border-color:rgba(255,255,255,0.9)}.uk-light .uk-dotnav>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-card-primary.uk-card-body .uk-dotnav>*>:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>:hover,.uk-card-secondary.uk-card-body .uk-dotnav>*>:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>:hover,.uk-overlay-primary .uk-dotnav>*>:hover,.uk-offcanvas-bar .uk-dotnav>*>:hover,.uk-light .uk-dotnav>*>:focus,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:focus,.uk-card-primary.uk-card-body .uk-dotnav>*>:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>:focus,.uk-card-secondary.uk-card-body .uk-dotnav>*>:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>:focus,.uk-overlay-primary .uk-dotnav>*>:focus,.uk-offcanvas-bar .uk-dotnav>*>:focus{background-color:rgba(255,255,255,0.9);border-color:transparent}.uk-light .uk-dotnav>*>:active,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-card-primary.uk-card-body .uk-dotnav>*>:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>:active,.uk-card-secondary.uk-card-body .uk-dotnav>*>:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>:active,.uk-overlay-primary .uk-dotnav>*>:active,.uk-offcanvas-bar .uk-dotnav>*>:active{background-color:rgba(255,255,255,0.5);border-color:transparent}.uk-light .uk-dotnav>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-card-primary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>.uk-active>*,.uk-card-secondary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>.uk-active>*,.uk-overlay-primary .uk-dotnav>.uk-active>*,.uk-offcanvas-bar .uk-dotnav>.uk-active>*{background-color:rgba(255,255,255,0.9);border-color:transparent}.uk-light .uk-accordion-title::after,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title::after,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title::after,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title::after,.uk-card-primary.uk-card-body .uk-accordion-title::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-accordion-title::after,.uk-card-secondary.uk-card-body .uk-accordion-title::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-accordion-title::after,.uk-overlay-primary .uk-accordion-title::after,.uk-offcanvas-bar .uk-accordion-title::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,0.7)%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,0.7)%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-open>.uk-accordion-title::after,.uk-section-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::after,.uk-section-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::after,.uk-tile-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::after,.uk-card-primary.uk-card-body .uk-open>.uk-accordion-title::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-open>.uk-accordion-title::after,.uk-card-secondary.uk-card-body .uk-open>.uk-accordion-title::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-open>.uk-accordion-title::after,.uk-overlay-primary .uk-open>.uk-accordion-title::after,.uk-offcanvas-bar .uk-open>.uk-accordion-title::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,0.7)%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-iconnav>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-card-primary.uk-card-body .uk-iconnav>*>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>*>a,.uk-card-secondary.uk-card-body .uk-iconnav>*>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>*>a,.uk-overlay-primary .uk-iconnav>*>a,.uk-offcanvas-bar .uk-iconnav>*>a{color:rgba(255,255,255,0.5)}.uk-light .uk-iconnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-card-primary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>*>a:hover,.uk-overlay-primary .uk-iconnav>*>a:hover,.uk-offcanvas-bar .uk-iconnav>*>a:hover,.uk-light .uk-iconnav>*>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:focus,.uk-card-primary.uk-card-body .uk-iconnav>*>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>*>a:focus,.uk-card-secondary.uk-card-body .uk-iconnav>*>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>*>a:focus,.uk-overlay-primary .uk-iconnav>*>a:focus,.uk-offcanvas-bar .uk-iconnav>*>a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-iconnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-card-primary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>.uk-active>a,.uk-overlay-primary .uk-iconnav>.uk-active>a,.uk-offcanvas-bar .uk-iconnav>.uk-active>a{color:rgba(255,255,255,0.7)}.uk-light .uk-text-lead,.uk-section-primary:not(.uk-preserve-color) .uk-text-lead,.uk-section-secondary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-primary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-lead,.uk-card-primary.uk-card-body .uk-text-lead,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-lead,.uk-card-secondary.uk-card-body .uk-text-lead,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-lead,.uk-overlay-primary .uk-text-lead,.uk-offcanvas-bar .uk-text-lead{color:rgba(255,255,255,0.7)}.uk-light .uk-text-meta,.uk-section-primary:not(.uk-preserve-color) .uk-text-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-meta,.uk-card-primary.uk-card-body .uk-text-meta,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-meta,.uk-card-secondary.uk-card-body .uk-text-meta,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-meta,.uk-overlay-primary .uk-text-meta,.uk-offcanvas-bar .uk-text-meta{color:rgba(255,255,255,0.5)}.uk-light .uk-text-muted,.uk-section-primary:not(.uk-preserve-color) .uk-text-muted,.uk-section-secondary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-primary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-muted,.uk-card-primary.uk-card-body .uk-text-muted,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-muted,.uk-card-secondary.uk-card-body .uk-text-muted,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-muted,.uk-overlay-primary .uk-text-muted,.uk-offcanvas-bar .uk-text-muted{color:rgba(255,255,255,0.5) !important}.uk-light .uk-text-primary,.uk-section-primary:not(.uk-preserve-color) .uk-text-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-primary,.uk-card-primary.uk-card-body .uk-text-primary,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-primary,.uk-card-secondary.uk-card-body .uk-text-primary,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-primary,.uk-overlay-primary .uk-text-primary,.uk-offcanvas-bar .uk-text-primary{color:rgba(255,255,255,0.7) !important}.uk-light .uk-column-divider,.uk-section-primary:not(.uk-preserve-color) .uk-column-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-column-divider,.uk-card-primary.uk-card-body .uk-column-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-column-divider,.uk-card-secondary.uk-card-body .uk-column-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-column-divider,.uk-overlay-primary .uk-column-divider,.uk-offcanvas-bar .uk-column-divider{column-rule-color:rgba(255,255,255,0.2)}.uk-light .uk-logo,.uk-section-primary:not(.uk-preserve-color) .uk-logo,.uk-section-secondary:not(.uk-preserve-color) .uk-logo,.uk-tile-primary:not(.uk-preserve-color) .uk-logo,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo,.uk-card-primary.uk-card-body .uk-logo,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo,.uk-card-secondary.uk-card-body .uk-logo,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo,.uk-overlay-primary .uk-logo,.uk-offcanvas-bar .uk-logo{color:rgba(255,255,255,0.7)}.uk-light .uk-logo:hover,.uk-section-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:hover,.uk-card-primary.uk-card-body .uk-logo:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo:hover,.uk-card-secondary.uk-card-body .uk-logo:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo:hover,.uk-overlay-primary .uk-logo:hover,.uk-offcanvas-bar .uk-logo:hover,.uk-light .uk-logo:focus,.uk-section-primary:not(.uk-preserve-color) .uk-logo:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-logo:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-logo:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:focus,.uk-card-primary.uk-card-body .uk-logo:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo:focus,.uk-card-secondary.uk-card-body .uk-logo:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo:focus,.uk-overlay-primary .uk-logo:focus,.uk-offcanvas-bar .uk-logo:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-section-primary:not(.uk-preserve-color) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-section-secondary:not(.uk-preserve-color) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-tile-primary:not(.uk-preserve-color) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-tile-secondary:not(.uk-preserve-color) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-card-primary.uk-card-body .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-card-primary>:not([class*='uk-card-media']) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-card-secondary.uk-card-body .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-overlay-primary .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-offcanvas-bar .uk-logo>:not(.uk-logo-inverse):not(:only-of-type){display:none}.uk-light .uk-logo-inverse,.uk-section-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-section-secondary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo-inverse,.uk-card-primary.uk-card-body .uk-logo-inverse,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo-inverse,.uk-card-secondary.uk-card-body .uk-logo-inverse,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo-inverse,.uk-overlay-primary .uk-logo-inverse,.uk-offcanvas-bar .uk-logo-inverse{display:inline}@media print{*,*::before,*::after{background:transparent !important;color:black !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}} diff --git a/frontend/static/favicon.ico b/frontend/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..85a4d9fac03ba838f37feca9d583478bd4afd647 GIT binary patch literal 198 xcmZQzU<5(|0VXiLfq{WR42U&=SOAC>fEXkX0u5jillcGtKc*mwA|N9u!2sz^B%}ZU literal 0 HcmV?d00001 diff --git a/static/index.html b/frontend/static/index.html similarity index 75% rename from static/index.html rename to frontend/static/index.html index b7ea7c683..da4085025 100644 --- a/static/index.html +++ b/frontend/static/index.html @@ -4,10 +4,10 @@ WebApp - - - + + + diff --git a/migrations/2018-07-04-055234_create_sessions/up.sql b/migrations/2018-07-04-055234_create_sessions/up.sql index cc5c9a67f..0df2f9f30 100644 --- a/migrations/2018-07-04-055234_create_sessions/up.sql +++ b/migrations/2018-07-04-055234_create_sessions/up.sql @@ -1,4 +1,4 @@ -- Your SQL goes here CREATE TABLE sessions ( - id TEXT PRIMARY KEY + token TEXT PRIMARY KEY ) diff --git a/src/backend/database/mod.rs b/src/backend/database/mod.rs deleted file mode 100644 index 639c4ed81..000000000 --- a/src/backend/database/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -//! Database related modules - -pub mod executor; -mod models; -mod schema; diff --git a/src/backend/database/models.rs b/src/backend/database/models.rs deleted file mode 100644 index e6b039bce..000000000 --- a/src/backend/database/models.rs +++ /dev/null @@ -1,9 +0,0 @@ -//! Database models based on schema definitions - -use backend::database::schema::sessions; - -#[derive(Insertable, Serialize, Queryable)] -#[table_name = "sessions"] -pub struct Session { - pub id: String, -} diff --git a/src/backend/mod.rs b/src/backend/mod.rs deleted file mode 100644 index d3ac8e163..000000000 --- a/src/backend/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -//! The main backend interface - -mod database; -pub mod server; -mod token; -mod websocket; diff --git a/src/backend/token.rs b/src/backend/token.rs deleted file mode 100644 index d6e2dd9cc..000000000 --- a/src/backend/token.rs +++ /dev/null @@ -1,64 +0,0 @@ -//! Everything related to web token handling - -use backend::server::ServerError; -use failure::Error; -use jsonwebtoken::{decode, encode, Header, Validation}; -use time::get_time; -use uuid::Uuid; - -lazy_static! { - static ref SECRET: String = Uuid::new_v4().to_string(); -} - -#[derive(Deserialize, Serialize)] -/// A web token -pub struct Token { - /// The subject of the token - sub: String, - - /// The exipration date of the token - exp: i64, - - /// The issued at field - iat: i64, - - /// The token id - jti: String, -} - -impl Token { - /// Create a new default token for a given username and a validity in seconds - pub fn create(username: &str) -> Result { - const DEFAULT_TOKEN_VALIDITY: i64 = 3600; - let claim = Token { - sub: username.to_owned(), - exp: get_time().sec + DEFAULT_TOKEN_VALIDITY, - iat: get_time().sec, - jti: Uuid::new_v4().to_string(), - }; - encode(&Header::default(), &claim, SECRET.as_ref()).map_err(|_| ServerError::CreateToken.into()) - } - - /// Verify the validity of a token and get a new one - pub fn verify(token: &str) -> Result { - let data = decode::(token, SECRET.as_ref(), &Validation::default()) - .map_err(|_| Error::from(ServerError::VerifyToken))?; - Self::create(&data.claims.sub) - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn succeed_to_create_a_token() { - assert!(Token::create("").is_ok()); - } - - #[test] - fn succeed_to_verify_a_token() { - let sut = Token::create("").unwrap(); - assert!(Token::verify(&sut).is_ok()); - } -} diff --git a/src/backend/websocket.rs b/src/backend/websocket.rs deleted file mode 100644 index 17f9f27fa..000000000 --- a/src/backend/websocket.rs +++ /dev/null @@ -1,211 +0,0 @@ -//! Everything related to the websocket connection - -use actix::prelude::*; -use actix_web::{ - ws::{Message, ProtocolError, WebsocketContext}, - Binary, -}; -use backend::{ - database::executor::{CreateSession, DeleteSession, UpdateSession}, - server::{ServerError, State}, - token::Token, -}; -use capnp::{ - self, - message::{Builder, HeapAllocator, ReaderOptions}, - serialize_packed::{read_message, write_message}, - text, -}; -use failure::Error; -use futures::Future; -use protocol_capnp::{request, response}; - -/// The actual websocket -pub struct WebSocket { - builder: Builder, - data: Vec, -} - -impl Actor for WebSocket { - type Context = WebsocketContext; -} - -/// Handler for `Message` -impl StreamHandler for WebSocket { - fn handle(&mut self, msg: Message, ctx: &mut Self::Context) { - match msg { - Message::Binary(bin) => if let Err(e) = self.handle_request(&bin, ctx) { - warn!("Unable to send response: {}", e); - }, - Message::Close(reason) => { - info!("Closing websocket connection: {:?}", reason); - ctx.stop(); - } - e => warn!("Got invalid message: {:?}", e), - } - } -} - -impl WebSocket { - pub fn new() -> Self { - Self { - builder: Builder::new_default(), - data: Vec::new(), - } - } - - fn handle_request(&mut self, data: &Binary, ctx: &mut WebsocketContext) -> Result<(), Error> { - // Try to read the message - let reader = read_message(&mut data.as_ref(), ReaderOptions::new())?; - let request = reader.get_root::()?; - - // Check the request type - match request.which() { - Ok(request::Login(data)) => { - // Check if its a credential or token login type - match data.which() { - Ok(request::login::Credentials(d)) => { - // Create an error response if needed - if let Err(e) = self.handle_request_login_credentials(d, ctx) { - self.builder - .init_root::() - .init_login() - .set_error(&e.to_string()); - self.write()?; - } - - // Send the response to the websocket - self.send(ctx); - Ok(()) - } - Ok(request::login::Token(d)) => { - // Create an error response if needed - if let Err(e) = self.handle_request_login_token(d, ctx) { - self.builder - .init_root::() - .init_login() - .set_error(&e.to_string()); - self.write()?; - } - - // Send the response to the websocket - self.send(ctx); - Ok(()) - } - Err(e) => Err(e.into()), - } - } - Ok(request::Logout(d)) => { - if let Err(e) = self.handle_request_logout(d, ctx) { - self.builder - .init_root::() - .init_logout() - .set_error(&e.to_string()); - self.write()?; - } - - // Send the response to the websocket - self.send(ctx); - Ok(()) - } - Err(e) => Err(e.into()), - } - } - - fn write(&mut self) -> Result<&[u8], Error> { - // Clear the data before serialization - self.data.clear(); - - // Serialize and return - write_message(&mut self.data, &self.builder)?; - Ok(&self.data) - } - - fn send(&self, ctx: &mut WebsocketContext) { - ctx.binary(self.data.clone()); - } - - fn handle_request_login_credentials( - &mut self, - data: request::login::credentials::Reader, - ctx: &mut WebsocketContext, - ) -> Result<&[u8], Error> { - let username = data.get_username()?; - let password = data.get_password()?; - debug!("User {} is trying to login", username); - - // Error if username and password are invalid - if username.is_empty() || password.is_empty() || username != password { - debug!("Wrong username or password"); - return Err(ServerError::WrongUsernamePassword.into()); - } - - // Create a new token - let token = ctx - .state() - .database - .send(CreateSession { - id: Token::create(username)?, - }) - .wait()??; - - // Create the response - self.builder - .init_root::() - .init_login() - .set_token(&token.id); - - // Write the message into a buffer - self.write() - } - - fn handle_request_login_token( - &mut self, - data: Result, - ctx: &mut WebsocketContext, - ) -> Result<&[u8], Error> { - // Read the data - let token = data?; - debug!("Token {} wants to be renewed", token); - - // Try to verify and create a new token - let new_token = ctx - .state() - .database - .send(UpdateSession { - old_id: token.to_owned(), - new_id: Token::verify(token)?, - }) - .wait()??; - - // Create the response - self.builder - .init_root::() - .init_login() - .set_token(&new_token.id); - - // Write the message into a buffer - self.write() - } - - fn handle_request_logout( - &mut self, - data: Result, - ctx: &mut WebsocketContext, - ) -> Result<&[u8], Error> { - // Remove the token from the internal storage - ctx.state() - .database - .send(DeleteSession { id: data?.to_owned() }) - .wait()??; - - // Create the response - self.builder - .init_root::() - .init_logout() - .set_success(()); - - // Write the message into a buffer - self.write() - } -} diff --git a/src/config.rs b/src/config.rs index 0cb111712..cc3ce1a82 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,6 +1,6 @@ //! Configruation related structures -#[derive(Clone, Default, Deserialize)] +#[derive(Clone, Deserialize)] /// The global configuration pub struct Config { /// The server configuration @@ -11,9 +11,12 @@ pub struct Config { /// The database configuration pub postgres: PostgresConfig, + + /// The API configuration + pub api: ApiConfig, } -#[derive(Clone, Default, Deserialize)] +#[derive(Clone, Deserialize)] /// The server configuration pub struct ServerConfig { /// The server IP address @@ -26,7 +29,8 @@ pub struct ServerConfig { pub tls: bool, } -#[derive(Clone, Default, Deserialize)] +#[derive(Clone, Deserialize)] +#[serde(rename_all = "kebab-case")] /// The logger configuration pub struct LogConfig { /// The logging level of actix-web @@ -36,7 +40,7 @@ pub struct LogConfig { pub webapp: String, } -#[derive(Clone, Default, Deserialize)] +#[derive(Clone, Deserialize)] /// The database configuration pub struct PostgresConfig { /// The full host to the database @@ -51,3 +55,17 @@ pub struct PostgresConfig { /// The database to be used pub database: String, } + +#[derive(Clone, Deserialize)] +#[serde(rename_all = "kebab-case")] +/// The API configuration +pub struct ApiConfig { + /// The credentials based login API + pub login_credentials: String, + + /// The session based login API + pub login_session: String, + + /// The logout API + pub logout: String, +} diff --git a/src/frontend/components/content.rs b/src/frontend/components/content.rs deleted file mode 100644 index 0f41a92e0..000000000 --- a/src/frontend/components/content.rs +++ /dev/null @@ -1,113 +0,0 @@ -//! The Main Content component - -use frontend::{ - routes::RouterComponent, - services::{ - cookie::CookieService, - protocol::ProtocolService, - router::{Request, Route, RouterAgent}, - websocket::WebSocketService, - }, -}; -use yew::{prelude::*, services::ConsoleService}; -use SESSION_COOKIE; - -/// Data Model for the Content component -pub struct ContentComponent { - router_agent: Box>>, - cookie_service: CookieService, - console_service: ConsoleService, - protocol_service: ProtocolService, - websocket_service: WebSocketService, - button_disabled: bool, -} - -/// Available message types to process -pub enum Message { - HandleRoute(Route<()>), - LogoutRequest, - LogoutResponse(Vec), - WebSocketIgnore, -} - -impl Component for ContentComponent { - type Message = Message; - type Properties = (); - - /// Initialization routine - fn create(_: Self::Properties, link: ComponentLink) -> Self { - // Guard the authentication - let mut router_agent = RouterAgent::bridge(link.send_back(|route| Message::HandleRoute(route))); - let cookie_service = CookieService::new(); - let mut console_service = ConsoleService::new(); - if cookie_service.get(SESSION_COOKIE).is_err() { - console_service.log("No session token found, routing back to login"); - router_agent.send(Request::ChangeRoute(RouterComponent::Login.into())); - } - - // Create the component - Self { - router_agent, - cookie_service, - console_service, - protocol_service: ProtocolService::new(), - websocket_service: WebSocketService::new( - link.send_back(|data| Message::LogoutResponse(data)), - link.send_back(|_| Message::WebSocketIgnore), - ), - button_disabled: false, - } - } - - fn change(&mut self, _: Self::Properties) -> ShouldRender { - true - } - - /// Called everytime when messages are received - fn update(&mut self, msg: Self::Message) -> ShouldRender { - match msg { - Message::LogoutRequest => { - // Retrieve the currently set cookie - if let Ok(token) = self.cookie_service.get(SESSION_COOKIE) { - // Create the logout request - if let Ok(data) = self.protocol_service.write_request_logout(&token) { - // Disable user interaction - self.button_disabled = true; - - // Send the request - self.websocket_service.send(data); - } else { - self.console_service.error("Unable to write logout request"); - } - } else { - self.console_service.error("No session cookie found"); - } - } - Message::LogoutResponse(mut response) => match self.protocol_service.read_response_logout(&mut response) { - Ok(Some(())) => { - self.console_service.log("Got valid logout response"); - self.cookie_service.remove(SESSION_COOKIE); - self.router_agent - .send(Request::ChangeRoute(RouterComponent::Login.into())); - } - Ok(None) => {} // Not my response - Err(e) => self.console_service.info(&format!("Unable to logout: {}", e)), - }, - _ => {} - } - true - } -} - -impl Renderable for ContentComponent { - fn view(&self) -> Html { - html! { -
-

{"Content"}

- -
- } - } -} diff --git a/src/frontend/components/login.rs b/src/frontend/components/login.rs deleted file mode 100644 index 818ba5672..000000000 --- a/src/frontend/components/login.rs +++ /dev/null @@ -1,159 +0,0 @@ -//! The Login component - -use frontend::{ - routes::RouterComponent, - services::{ - cookie::CookieService, - protocol::ProtocolService, - router::{Request, Route, RouterAgent}, - websocket::WebSocketService, - }, -}; -use yew::{prelude::*, services::ConsoleService}; -use SESSION_COOKIE; - -/// Data Model for the Login component -pub struct LoginComponent { - router_agent: Box>>, - username: String, - password: String, - error: String, - button_disabled: bool, - cookie_service: CookieService, - console_service: ConsoleService, - protocol_service: ProtocolService, - websocket_service: WebSocketService, -} - -/// Available message types to process -pub enum Message { - HandleRoute(Route<()>), - LoginRequest, - LoginResponse(Vec), - UpdateUsername(String), - UpdatePassword(String), - WebSocketIgnore, -} - -impl Component for LoginComponent { - type Message = Message; - type Properties = (); - - /// Initialization routine - fn create(_: Self::Properties, link: ComponentLink) -> Self { - Self { - router_agent: RouterAgent::bridge(link.send_back(|route| Message::HandleRoute(route))), - username: String::new(), - password: String::new(), - error: String::new(), - button_disabled: true, - cookie_service: CookieService::new(), - console_service: ConsoleService::new(), - websocket_service: WebSocketService::new( - link.send_back(|data| Message::LoginResponse(data)), - link.send_back(|_| Message::WebSocketIgnore), - ), - protocol_service: ProtocolService::new(), - } - } - - fn change(&mut self, _: Self::Properties) -> ShouldRender { - true - } - - /// Called everytime when messages are received - fn update(&mut self, msg: Self::Message) -> ShouldRender { - match msg { - Message::LoginRequest => match self - .protocol_service - .write_request_login_credential(&self.username, &self.password) - { - Ok(data) => { - // Disable user interaction - self.button_disabled = true; - - // Send the request - self.websocket_service.send(data); - false - } - Err(e) => { - self.console_service - .error(&format!("Unable to create login credential request: {}", e)); - false - } - }, - Message::LoginResponse(mut response) => match self.protocol_service.read_response_login(&mut response) { - Ok(Some(token)) => { - self.console_service.info("Login succeed"); - - // Set the retrieved session cookie - self.cookie_service.set(SESSION_COOKIE, &token); - - // Route to the next component - self.router_agent - .send(Request::ChangeRoute(RouterComponent::Content.into())); - - true - } - Ok(None) => false, // Not my response - Err(e) => { - self.console_service.warn(&format!("Unable to login: {}", e)); - self.error = "Authentication failed".to_owned(); - self.button_disabled = false; - true - } - }, - Message::UpdateUsername(new_username) => { - self.username = new_username; - self.update_button_state(); - true - } - Message::UpdatePassword(new_password) => { - self.password = new_password; - self.update_button_state(); - true - } - _ => true, - } - } -} - -impl LoginComponent { - fn update_button_state(&mut self) { - self.button_disabled = self.username.is_empty() || self.password.is_empty(); - } -} - -impl Renderable for LoginComponent { - fn view(&self) -> Html { - html! { -
-
-
- {"Authentication"} -
- -
-
- -
- - - {&self.error} - -
-
-
- } - } -} diff --git a/src/frontend/components/root.rs b/src/frontend/components/root.rs deleted file mode 100644 index e43d912d3..000000000 --- a/src/frontend/components/root.rs +++ /dev/null @@ -1,142 +0,0 @@ -//! The Root component - -use frontend::{ - components::{content::ContentComponent, login::LoginComponent}, - routes::RouterComponent, - services::{ - cookie::CookieService, - protocol::ProtocolService, - router::{Request, Route, RouterAgent}, - websocket::{WebSocketService, WebSocketStatus}, - }, -}; -use yew::{prelude::*, services::ConsoleService}; -use SESSION_COOKIE; - -/// Available message types to process -pub enum Message { - HandleRoute(Route<()>), - LoginRequest(String), - LoginResponse(Vec), - WebSocketConnected, - WebSocketFailure, -} - -/// Data Model for the Root Component -pub struct RootComponent { - router_agent: Box>>, - child_component: RouterComponent, - cookie_service: CookieService, - console_service: ConsoleService, - protocol_service: ProtocolService, - websocket_service: WebSocketService, -} - -impl Component for RootComponent { - type Message = Message; - type Properties = (); - - fn create(_: Self::Properties, link: ComponentLink) -> Self { - Self { - router_agent: RouterAgent::bridge(link.send_back(|route| Message::HandleRoute(route))), - child_component: RouterComponent::Loading, - console_service: ConsoleService::new(), - cookie_service: CookieService::new(), - protocol_service: ProtocolService::new(), - websocket_service: WebSocketService::new( - link.send_back(|data| Message::LoginResponse(data)), - link.send_back(|data| match data { - WebSocketStatus::Opened => Message::WebSocketConnected, - _ => Message::WebSocketFailure, - }), - ), - } - } - - fn change(&mut self, _: Self::Properties) -> ShouldRender { - true - } - - fn update(&mut self, msg: Self::Message) -> ShouldRender { - match msg { - Message::WebSocketConnected => { - // Verify if a session cookie already exist and try to authenticate if so - if let Ok(token) = self.cookie_service.get(SESSION_COOKIE) { - match self.protocol_service.write_request_login_token(&token) { - Ok(data) => { - self.console_service.info("Token found, trying to authenticate"); - self.websocket_service.send(data); - false - } - Err(_) => { - self.cookie_service.remove(SESSION_COOKIE); - self.router_agent - .send(Request::ChangeRoute(RouterComponent::Login.into())); - true - } - } - } else { - self.console_service.info("No token found, routing to login"); - self.router_agent - .send(Request::ChangeRoute(RouterComponent::Login.into())); - true - } - } - Message::LoginResponse(mut response) => match self.protocol_service.read_response_login(&mut response) { - Ok(Some(token)) => { - // Set the retrieved session cookie - self.console_service.info("Login succeed"); - self.cookie_service.set(SESSION_COOKIE, &token); - self.router_agent - .send(Request::ChangeRoute(RouterComponent::Content.into())); - true - } - Ok(None) => false, // Not my response - Err(e) => { - // Remote the existing cookie - self.console_service.info(&format!("Login failed: {}", e)); - self.cookie_service.remove(SESSION_COOKIE); - self.router_agent - .send(Request::ChangeRoute(RouterComponent::Login.into())); - true - } - }, - Message::HandleRoute(route) => { - self.child_component = route.into(); - true - } - _ => { - self.router_agent - .send(Request::ChangeRoute(RouterComponent::Error.into())); - true - } - } - } -} - -impl Renderable for RootComponent { - fn view(&self) -> Html { - self.child_component.view() - } -} - -impl Renderable for RouterComponent { - fn view(&self) -> Html { - match *self { - RouterComponent::Loading => html! { -
- }, - RouterComponent::Error => html! { -
- {"Error loading application."} -
- }, - RouterComponent::Login => html! { - - }, - RouterComponent::Content => html! { - - }, - } - } -} diff --git a/src/frontend/mod.rs b/src/frontend/mod.rs deleted file mode 100644 index cdebc5038..000000000 --- a/src/frontend/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -//! The main frontend interface - -pub mod components; -mod routes; -mod services; diff --git a/src/frontend/routes.rs b/src/frontend/routes.rs deleted file mode 100644 index ec4d8cb1b..000000000 --- a/src/frontend/routes.rs +++ /dev/null @@ -1,107 +0,0 @@ -//! All available routes within this application - -use frontend::services::router::Route; -use std::convert::Into; - -#[derive(Debug, PartialEq)] -/// Possible child components of this one -pub enum RouterComponent { - Content, - Error, - Loading, - Login, -} - -/// Convert a RouterComponent into a Route -impl Into> for RouterComponent -where - T: Default, -{ - fn into(self) -> Route { - Route { - fragment: Some( - match self { - RouterComponent::Content => "content", - RouterComponent::Error => "error", - RouterComponent::Loading => "loading", - RouterComponent::Login => "login", - }.into(), - ), - ..Default::default() - } - } -} - -/// Convert a Route into a RouterComponent -impl Into for Route { - fn into(self) -> RouterComponent { - match self.fragment { - Some(f) => match f.as_str() { - "content" => RouterComponent::Content, - "loading" => RouterComponent::Loading, - "login" => RouterComponent::Login, - _ => RouterComponent::Error, - }, - _ => RouterComponent::Error, - } - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn succeed_to_convert_content() { - let sut: Route<()> = Route { - fragment: Some("content".to_owned()), - ..Default::default() - }; - let cmp: RouterComponent = sut.clone().into(); - assert_eq!(cmp, RouterComponent::Content); - assert_eq!(sut, RouterComponent::Content.into()); - } - - #[test] - fn succeed_to_convert_loading() { - let sut: Route<()> = Route { - fragment: Some("loading".to_owned()), - ..Default::default() - }; - let cmp: RouterComponent = sut.clone().into(); - assert_eq!(cmp, RouterComponent::Loading); - assert_eq!(sut, RouterComponent::Loading.into()); - } - - #[test] - fn succeed_to_convert_login() { - let sut: Route<()> = Route { - fragment: Some("login".to_owned()), - ..Default::default() - }; - let cmp: RouterComponent = sut.clone().into(); - assert_eq!(cmp, RouterComponent::Login); - assert_eq!(sut, RouterComponent::Login.into()); - } - - #[test] - fn succeed_to_convert_error() { - let sut: Route<()> = Route { - fragment: Some("error".to_owned()), - ..Default::default() - }; - let cmp: RouterComponent = sut.clone().into(); - assert_eq!(cmp, RouterComponent::Error); - assert_eq!(sut, RouterComponent::Error.into()); - } - - #[test] - fn succeed_to_convert_unknown() { - let sut: Route<()> = Route { - fragment: Some("new_route".to_owned()), - ..Default::default() - }; - let cmp: RouterComponent = sut.into(); - assert_eq!(cmp, RouterComponent::Error); - } -} diff --git a/src/frontend/services/protocol.rs b/src/frontend/services/protocol.rs deleted file mode 100644 index d75de20ed..000000000 --- a/src/frontend/services/protocol.rs +++ /dev/null @@ -1,106 +0,0 @@ -//! A protocol handling service to make (de)serialization comfortable - -use capnp::{ - message::{Builder, HeapAllocator, Reader, ReaderOptions}, - serialize::OwnedSegments, - serialize_packed::{read_message, write_message}, -}; -use failure::Error; -use protocol_capnp::{request, response}; - -pub struct ProtocolService { - builder: Builder, - data: Vec, -} - -#[derive(Debug, Fail)] -pub enum ProtocolError { - #[fail(display = "got error response: {}", description)] - Response { description: String }, -} - -impl ProtocolService { - /// Create a new protocol service instance - pub fn new() -> Self { - Self { - builder: Builder::new_default(), - data: Vec::new(), - } - } - - /// Write the data and return to the caller - fn write(&mut self) -> Result<&[u8], Error> { - // Clear the data before serialization - self.data.clear(); - - // Serialize and return - write_message(&mut self.data, &self.builder)?; - Ok(&self.data) - } - - /// Read bytes into a reader with owned segments - fn read(&mut self, data: &mut [u8]) -> Result, Error> { - Ok(read_message(&mut data.as_ref(), ReaderOptions::new())?) - } - - /// Create a new login request from a given username and password - pub fn write_request_login_credential(&mut self, username: &str, password: &str) -> Result<&[u8], Error> { - { - // Set the request parameters - let mut creds = self - .builder - .init_root::() - .init_login() - .init_credentials(); - creds.set_username(username); - creds.set_password(password); - } - - self.write() - } - - /// Create a new login request from a given token - pub fn write_request_login_token(&mut self, token: &str) -> Result<&[u8], Error> { - // Set the request parameters - self.builder - .init_root::() - .init_login() - .set_token(token); - - self.write() - } - - /// Create a logout request from a fiven token - pub fn write_request_logout(&mut self, token: &str) -> Result<&[u8], Error> { - // Set the request parameters - self.builder.init_root::().set_logout(token); - - self.write() - } - - // Get a login response for given bytes - pub fn read_response_login(&mut self, data: &mut [u8]) -> Result, Error> { - match self.read(data)?.get_root::()?.which()? { - response::Login(data) => match data.which()? { - response::login::Token(token) => Ok(Some(token?.to_owned())), - response::login::Error(error) => Err(ProtocolError::Response { - description: error?.to_owned(), - }.into()), - }, - _ => Ok(None), - } - } - - // Get a logout response for given bytes - pub fn read_response_logout(&mut self, data: &mut [u8]) -> Result, Error> { - match self.read(data)?.get_root::()?.which()? { - response::Logout(data) => match data.which()? { - response::logout::Success(_) => Ok(Some(())), - response::logout::Error(error) => Err(ProtocolError::Response { - description: error?.to_owned(), - }.into()), - }, - _ => Ok(None), - } - } -} diff --git a/src/frontend/services/websocket.rs b/src/frontend/services/websocket.rs deleted file mode 100644 index d42bce0fc..000000000 --- a/src/frontend/services/websocket.rs +++ /dev/null @@ -1,93 +0,0 @@ -//! A custom websocket service -//! [`WebSocket` Protocol](https://tools.ietf.org/html/rfc6455). - -use stdweb::{ - traits::IMessageEvent, - web::{ - event::{SocketCloseEvent, SocketErrorEvent, SocketMessageEvent, SocketOpenEvent}, - IEventTarget, SocketBinaryType, SocketReadyState, WebSocket, - }, -}; -use yew::{callback::Callback, services::Task}; - -lazy_static! { - /// Create a single websocket connection per application instance - static ref WEBSOCKET: WebSocket = WebSocket::new(env!("WS_URL")).expect("Unable to connect to websocket"); -} - -/// A status of a websocket connection. Used for status notification. -pub enum WebSocketStatus { - /// Used when a websocket connection was opened - Opened, - - /// Used when a websocket connection was closed - Closed, - - /// Used when a websocket connection was failed - Error, -} - -/// A handle to control current websocket connection. Implements `Task` and could be canceled. -pub struct WebSocketService { - notification: Callback, -} - -impl WebSocketService { - /// Connects to a server by a websocket connection. Needs two functions to generate data and - /// notification messages. - pub fn new(callback: Callback>, notification: Callback) -> Self { - // Set the websocket to binary mode - WEBSOCKET.set_binary_type(SocketBinaryType::ArrayBuffer); - - // Create notification callbacks - let n = notification.clone(); - WEBSOCKET.add_event_listener(move |_: SocketOpenEvent| { - n.emit(WebSocketStatus::Opened); - }); - let n = notification.clone(); - WEBSOCKET.add_event_listener(move |_: SocketCloseEvent| { - n.emit(WebSocketStatus::Closed); - }); - let n = notification.clone(); - WEBSOCKET.add_event_listener(move |_: SocketErrorEvent| { - n.emit(WebSocketStatus::Error); - }); - - // Add data callback - WEBSOCKET.add_event_listener(move |event: SocketMessageEvent| { - if let Some(bytes) = event.data().into_array_buffer() { - callback.emit(bytes.into()); - } - }); - - Self { notification } - } - - /// Sends binary data to a websocket connection. - pub fn send(&mut self, data: &[u8]) { - if WEBSOCKET.send_bytes(data).is_err() { - self.notification.emit(WebSocketStatus::Error); - } - } -} - -impl Task for WebSocketService { - /// Test wheter the websocket connection is active - fn is_active(&self) -> bool { - WEBSOCKET.ready_state() == SocketReadyState::Open - } - - // Close the websocket connection - fn cancel(&mut self) { - WEBSOCKET.close(); - } -} - -impl Drop for WebSocketService { - /// Close this connection on drop - fn drop(&mut self) { - if self.is_active() { - self.cancel(); - } - } -} diff --git a/src/lib.rs b/src/lib.rs index e65b89c29..d893017b8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,85 +1,19 @@ -#![deny(missing_docs)] //! The main library interface -extern crate capnp; -extern crate serde; - -#[macro_use] -extern crate serde_derive; - -#[macro_use] -extern crate failure; - -#[macro_use] -extern crate lazy_static; - -#[cfg(feature = "default")] -extern crate actix; - -#[cfg(feature = "default")] -extern crate actix_web; +#![deny(missing_docs)] +#![allow(proc_macro_derive_resolution_fallback)] -#[cfg(feature = "default")] +#[cfg(feature = "backend")] #[macro_use] extern crate diesel; - -#[cfg(feature = "default")] -extern crate futures; - -#[cfg(feature = "default")] -#[macro_use] -extern crate log; - -#[cfg(feature = "default")] -extern crate jsonwebtoken; - -#[cfg(feature = "default")] -extern crate num_cpus; - -#[cfg(feature = "default")] -extern crate openssl; - -#[cfg(feature = "default")] -extern crate r2d2; - -#[cfg(feature = "default")] -extern crate time; - -#[cfg(feature = "default")] -extern crate uuid; - -#[cfg(feature = "default")] -mod backend; - -#[cfg(feature = "default")] -pub use backend::server::Server; - -#[cfg(feature = "frontend")] #[macro_use] -extern crate stdweb; - -#[cfg(feature = "frontend")] -#[macro_use] -extern crate yew; - -#[cfg(feature = "frontend")] -mod frontend; - -#[cfg(feature = "frontend")] -pub use frontend::components::root::RootComponent; - -pub mod protocol_capnp { - #![allow(dead_code)] - #![allow(missing_docs)] - #![allow(unknown_lints)] - #![allow(clippy)] - include!(concat!(env!("OUT_DIR"), "/src/protocol_capnp.rs")); -} +extern crate serde_derive; pub mod config; - -/// The global session cookie name -pub const SESSION_COOKIE: &str = "sessionToken"; +pub mod protocol; +#[cfg(feature = "backend")] +#[allow(missing_docs)] +pub mod schema; /// The global config file name pub const CONFIG_FILENAME: &str = "Config.toml"; diff --git a/src/protocol.capnp b/src/protocol.capnp deleted file mode 100644 index 6535fd43f..000000000 --- a/src/protocol.capnp +++ /dev/null @@ -1,27 +0,0 @@ -@0x998efb67a0d7453f; - -struct Request { - union { - login :union { - credentials :group { - username @0 :Text; - password @1 :Text; - } - token @2 :Text; - } - logout @3 :Text; # The session token - } -} - -struct Response { - union { - login :union { - token @0 :Text; - error @1 :Text; - } - logout: union { - success @2 :Void; - error @3 :Text; - } - } -} diff --git a/src/protocol/mod.rs b/src/protocol/mod.rs new file mode 100644 index 000000000..040f5c759 --- /dev/null +++ b/src/protocol/mod.rs @@ -0,0 +1,5 @@ +//! The main protocol handling + +pub mod model; +pub mod request; +pub mod response; diff --git a/src/protocol/model.rs b/src/protocol/model.rs new file mode 100644 index 000000000..e7f574f4b --- /dev/null +++ b/src/protocol/model.rs @@ -0,0 +1,13 @@ +//! Basic models + +#[cfg(feature = "backend")] +use schema::sessions; + +#[cfg_attr(feature = "backend", derive(Insertable, Queryable))] +#[cfg_attr(feature = "backend", table_name = "sessions")] +#[derive(Deserialize, Serialize)] +/// A session representation +pub struct Session { + /// The actual session token + pub token: String, +} diff --git a/src/protocol/request.rs b/src/protocol/request.rs new file mode 100644 index 000000000..9afae732b --- /dev/null +++ b/src/protocol/request.rs @@ -0,0 +1,21 @@ +//! Request messages + +use protocol::model::Session; + +#[derive(Deserialize, Serialize)] +/// The credentials based login request +pub struct LoginCredentials { + /// The username + pub username: String, + + /// The password + pub password: String, +} + +#[derive(Deserialize, Serialize)] +/// The session based login request +pub struct LoginSession(pub Session); + +#[derive(Deserialize, Serialize)] +/// The logout request +pub struct Logout(pub Session); diff --git a/src/protocol/response.rs b/src/protocol/response.rs new file mode 100644 index 000000000..44a6a38d3 --- /dev/null +++ b/src/protocol/response.rs @@ -0,0 +1,11 @@ +//! Response specific implementations + +use protocol::model::Session; + +#[derive(Deserialize, Serialize)] +/// The login response +pub struct Login(pub Session); + +#[derive(Deserialize, Serialize)] +/// The logout response +pub struct Logout; diff --git a/src/backend/database/schema.rs b/src/schema.rs similarity index 68% rename from src/backend/database/schema.rs rename to src/schema.rs index 9ad122cb6..8ee788165 100644 --- a/src/backend/database/schema.rs +++ b/src/schema.rs @@ -2,12 +2,12 @@ table! { /// Representation of the `sessions` table. /// /// (Automatically generated by Diesel.) - sessions (id) { - /// The `id` column of the `sessions` table. + sessions (token) { + /// The `token` column of the `sessions` table. /// /// Its SQL type is `Text`. /// /// (Automatically generated by Diesel.) - id -> Text, + token -> Text, } } diff --git a/static/css/style.css b/static/css/style.css deleted file mode 100644 index 54fc419f5..000000000 --- a/static/css/style.css +++ /dev/null @@ -1 +0,0 @@ -html{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:16px;font-weight:normal;line-height:1.5;-webkit-text-size-adjust:100%;background:#fff;color:#666}body{margin:0}a{-webkit-text-decoration-skip:objects}a:active,a:hover{outline:none}a,.uk-link{color:#1e87f0;text-decoration:none;cursor:pointer}a:hover,.uk-link:hover{color:#0f6ecd;text-decoration:underline}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}:not(pre)>code,:not(pre)>kbd,:not(pre)>samp{font-family:Consolas,monaco,monospace;font-size:.875rem;color:#f0506e;white-space:nowrap;padding:2px 6px;background:#f8f8f8}em{color:#f0506e}ins{background:#ffd;color:#666;text-decoration:none}mark{background:#ffd;color:#666}q{font-style:italic}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}audio,canvas,iframe,img,svg,video{vertical-align:middle}audio,canvas,img,video{max-width:100%;height:auto;box-sizing:border-box}svg:not(:root){overflow:hidden}img:not([src]){visibility:hidden}p,ul,ol,dl,pre,address,fieldset,figure{margin:0 0 20px 0}*+p,*+ul,*+ol,*+dl,*+pre,*+address,*+fieldset,*+figure{margin-top:20px}h1,.uk-h1,h2,.uk-h2,h3,.uk-h3,h4,.uk-h4,h5,.uk-h5,h6,.uk-h6{margin:0 0 20px 0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:normal;color:#333;text-transform:none}*+h1,*+.uk-h1,*+h2,*+.uk-h2,*+h3,*+.uk-h3,*+h4,*+.uk-h4,*+h5,*+.uk-h5,*+h6,*+.uk-h6{margin-top:40px}h1,.uk-h1{font-size:2.23125rem;line-height:1.2}h2,.uk-h2{font-size:1.7rem;line-height:1.3}h3,.uk-h3{font-size:1.5rem;line-height:1.4}h4,.uk-h4{font-size:1.25rem;line-height:1.4}h5,.uk-h5{font-size:16px;line-height:1.4}h6,.uk-h6{font-size:.875rem;line-height:1.4}@media (min-width: 960px){h1,.uk-h1{font-size:2.625rem}h2,.uk-h2{font-size:2rem}}ul,ol{padding-left:30px}ul>li>ul,ul>li>ol,ol>li>ol,ol>li>ul{margin:0}dt{font-weight:bold}dd{margin-left:0}hr,.uk-hr{box-sizing:content-box;height:0;overflow:visible;text-align:inherit;margin:0 0 20px 0;border:0;border-top:1px solid #e5e5e5}*+hr,*+.uk-hr{margin-top:20px}address{font-style:normal}blockquote{margin:0 0 20px 0;font-size:1.25rem;line-height:1.5;font-style:italic;color:#333}*+blockquote{margin-top:20px}blockquote p:last-of-type{margin-bottom:0}blockquote footer{margin-top:10px;font-size:.875rem;line-height:1.5;color:#666}blockquote footer::before{content:"— "}pre{font:.875rem / 1.5 Consolas,monaco,monospace;color:#666;-moz-tab-size:4;tab-size:4;overflow:auto;padding:10px;border:1px solid #e5e5e5;border-radius:3px;background:#fff}pre code{font-family:Consolas,monaco,monospace}::-moz-selection{background:#39f;color:#fff;text-shadow:none}::selection{background:#39f;color:#fff;text-shadow:none}details,main{display:block}summary{display:list-item}template{display:none}iframe{border:0}a,area,button,input,label,select,summary,textarea{touch-action:manipulation}.var-media-s::before{content:"640px"}.var-media-m::before{content:"960px"}.var-media-l::before{content:"1200px"}.var-media-xl::before{content:"1600px"}a.uk-link-muted,.uk-link-muted a{color:#999}a.uk-link-muted:hover,.uk-link-muted a:hover{color:#666}a.uk-link-text:not(:hover),.uk-link-text a:not(:hover){color:inherit}a.uk-link-text:hover,.uk-link-text a:hover{color:#999}a.uk-link-heading:not(:hover),.uk-link-heading a:not(:hover){color:inherit}a.uk-link-heading:hover,.uk-link-heading a:hover{color:#1e87f0;text-decoration:none}a.uk-link-reset,a.uk-link-reset:hover,.uk-link-reset a,.uk-link-reset a:hover{color:inherit !important;text-decoration:none !important}.uk-heading-primary{font-size:3rem;line-height:1.2}@media (min-width: 960px){.uk-heading-primary{font-size:3.375rem}}@media (min-width: 1200px){.uk-heading-primary{font-size:3.75rem;line-height:1.1}}.uk-heading-hero{font-size:4rem;line-height:1.1}@media (min-width: 960px){.uk-heading-hero{font-size:6rem;line-height:1}}@media (min-width: 1200px){.uk-heading-hero{font-size:8rem;line-height:1}}.uk-heading-divider{padding-bottom:10px;border-bottom:1px solid #e5e5e5}.uk-heading-bullet{position:relative}.uk-heading-bullet::before{content:"";display:inline-block;position:relative;top:calc(-0.1 * 1em);vertical-align:middle;height:.9em;margin-right:10px;border-left:5px solid #e5e5e5}.uk-heading-line{overflow:hidden}.uk-heading-line>*{display:inline-block;position:relative}.uk-heading-line>::before,.uk-heading-line>::after{content:"";position:absolute;top:calc(50% - (1px / 2));width:2000px;border-bottom:1px solid #e5e5e5}.uk-heading-line>::before{right:100%;margin-right:.6em}.uk-heading-line>::after{left:100%;margin-left:.6em}[class*='uk-divider']{border:none;margin-bottom:20px}*+[class*='uk-divider']{margin-top:20px}.uk-divider-icon{position:relative;height:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22%23e5e5e5%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:50% 50%}.uk-divider-icon::before,.uk-divider-icon::after{content:"";position:absolute;top:50%;max-width:calc(50% - (50px / 2));border-bottom:1px solid #e5e5e5}.uk-divider-icon::before{right:calc(50% + (50px / 2));width:100%}.uk-divider-icon::after{left:calc(50% + (50px / 2));width:100%}.uk-divider-small{line-height:0}.uk-divider-small::after{content:"";display:inline-block;width:100px;max-width:100%;border-top:1px solid #e5e5e5;vertical-align:top}.uk-list{padding:0;list-style:none}.uk-list>li::before,.uk-list>li::after{content:"";display:table}.uk-list>li::after{clear:both}.uk-list>li>:last-child{margin-bottom:0}.uk-list ul{margin:0;padding-left:30px;list-style:none}.uk-list>li:nth-child(n+2),.uk-list>li>ul{margin-top:10px}.uk-list-divider>li:nth-child(n+2){margin-top:10px;padding-top:10px;border-top:1px solid #e5e5e5}.uk-list-striped>li{padding:10px 10px}.uk-list-striped>li:nth-of-type(odd){border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5}.uk-list-striped>li:nth-of-type(odd){background:#f8f8f8}.uk-list-striped>li:nth-child(n+2){margin-top:0}.uk-list-bullet>li{position:relative;padding-left:calc(1.5em + 10px)}.uk-list-bullet>li::before{content:"";position:absolute;top:0;left:0;width:1.5em;height:1.5em;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%;float:left}.uk-list-large>li:nth-child(n+2),.uk-list-large>li>ul{margin-top:20px}.uk-list-large.uk-list-divider>li:nth-child(n+2){margin-top:20px;padding-top:20px}.uk-list-large.uk-list-striped>li{padding:20px 10px}.uk-list-large.uk-list-striped>li:nth-of-type(odd){border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5}.uk-list-large.uk-list-striped>li:nth-child(n+2){margin-top:0}.uk-description-list>dt{color:#333;font-size:.875rem;font-weight:normal;text-transform:uppercase}.uk-description-list>dt:nth-child(n+2){margin-top:20px}.uk-description-list-divider>dt:nth-child(n+2){margin-top:20px;padding-top:20px;border-top:1px solid #e5e5e5}.uk-table{border-collapse:collapse;border-spacing:0;width:100%;margin-bottom:20px}*+.uk-table{margin-top:20px}.uk-table th{padding:16px 12px;text-align:left;vertical-align:bottom;font-size:.875rem;font-weight:normal;color:#999;text-transform:uppercase}.uk-table td{padding:16px 12px;vertical-align:top}.uk-table td>:last-child{margin-bottom:0}.uk-table tfoot{font-size:.875rem}.uk-table caption{font-size:.875rem;text-align:left;color:#999}.uk-table-middle,.uk-table-middle td{vertical-align:middle !important}.uk-table-divider>tr:not(:first-child),.uk-table-divider>:not(:first-child)>tr,.uk-table-divider>:first-child>tr:not(:first-child){border-top:1px solid #e5e5e5}.uk-table-striped>tr:nth-of-type(odd),.uk-table-striped tbody tr:nth-of-type(odd){background:#f8f8f8;border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5}.uk-table-hover>tr:hover,.uk-table-hover tbody tr:hover{background:#ffd}.uk-table>tr.uk-active,.uk-table tbody tr.uk-active{background:#ffd}.uk-table-small th,.uk-table-small td{padding:10px 12px}.uk-table-large th,.uk-table-large td{padding:22px 12px}.uk-table-justify th:first-child,.uk-table-justify td:first-child{padding-left:0}.uk-table-justify th:last-child,.uk-table-justify td:last-child{padding-right:0}.uk-table-shrink{width:1px}.uk-table-expand{min-width:150px}.uk-table-link{padding:0 !important}.uk-table-link>a{display:block;padding:16px 12px}.uk-table-small .uk-table-link>a{padding:10px 12px}@media (max-width: 959px){.uk-table-responsive,.uk-table-responsive tbody,.uk-table-responsive th,.uk-table-responsive td,.uk-table-responsive tr{display:block}.uk-table-responsive thead{display:none}.uk-table-responsive th,.uk-table-responsive td{width:auto !important;max-width:none !important;min-width:0 !important;overflow:visible !important;white-space:normal !important}.uk-table-responsive th:not(:first-child):not(.uk-table-link),.uk-table-responsive td:not(:first-child):not(.uk-table-link),.uk-table-responsive .uk-table-link:not(:first-child)>a{padding-top:5px !important}.uk-table-responsive th:not(:last-child):not(.uk-table-link),.uk-table-responsive td:not(:last-child):not(.uk-table-link),.uk-table-responsive .uk-table-link:not(:last-child)>a{padding-bottom:5px !important}.uk-table-justify.uk-table-responsive th,.uk-table-justify.uk-table-responsive td{padding-left:0;padding-right:0}}.uk-table tbody tr{transition:background-color 0.1s linear}.uk-icon{margin:0;border:none;border-radius:0;overflow:visible;font:inherit;color:inherit;text-transform:none;padding:0;background-color:transparent;display:inline-block;fill:currentcolor;line-height:0}button.uk-icon:not(:disabled){cursor:pointer}.uk-icon::-moz-focus-inner{border:0;padding:0}.uk-icon [fill*='#']:not(.uk-preserve),.uk-icon [FILL*='#']:not(.uk-preserve){fill:currentcolor}.uk-icon [stroke*='#']:not(.uk-preserve),.uk-icon [STROKE*='#']:not(.uk-preserve){stroke:currentcolor}.uk-icon>*{transform:translate(0, 0)}.uk-icon-image{width:20px;height:20px;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;vertical-align:middle}.uk-icon-link{color:#999}.uk-icon-link:hover,.uk-icon-link:focus{color:#666;outline:none}.uk-icon-link:active,.uk-active>.uk-icon-link{color:#595959}.uk-icon-button{box-sizing:border-box;width:36px;height:36px;border-radius:500px;background:#f8f8f8;color:#999;vertical-align:middle;display:inline-flex;justify-content:center;align-items:center;transition:0.1s ease-in-out;transition-property:color, background-color}.uk-icon-button:hover,.uk-icon-button:focus{background-color:#ebebeb;color:#666;outline:none}.uk-icon-button:active,.uk-active>.uk-icon-button{background-color:#dfdfdf;color:#666}.uk-range{box-sizing:border-box;margin:0;vertical-align:middle;max-width:100%;width:100%;-webkit-appearance:none;background:transparent;padding:0}.uk-range:focus{outline:none}.uk-range::-moz-focus-outer{border:none}.uk-range::-ms-track{height:15px;background:transparent;border-color:transparent;color:transparent}.uk-range:not(:disabled)::-webkit-slider-thumb{cursor:pointer}.uk-range:not(:disabled)::-moz-range-thumb{cursor:pointer}.uk-range:not(:disabled)::-ms-thumb{cursor:pointer}.uk-range::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-7px;height:15px;width:15px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-range::-moz-range-thumb{border:none;height:15px;width:15px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-range::-ms-thumb{margin-top:0}.uk-range::-ms-thumb{border:none;height:15px;width:15px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-range::-ms-tooltip{display:none}.uk-range::-webkit-slider-runnable-track{height:3px;background:#ebebeb;border-radius:500px}.uk-range:focus::-webkit-slider-runnable-track,.uk-range:active::-webkit-slider-runnable-track{background:#d2d2d2}.uk-range::-moz-range-track{height:3px;background:#ebebeb;border-radius:500px}.uk-range:focus::-moz-range-track{background:#d2d2d2}.uk-range::-ms-fill-lower,.uk-range::-ms-fill-upper{height:3px;background:#ebebeb;border-radius:500px}.uk-range:focus::-ms-fill-lower,.uk-range:focus::-ms-fill-upper{background:#d2d2d2}.uk-input,.uk-select,.uk-textarea,.uk-radio,.uk-checkbox{box-sizing:border-box;margin:0;border-radius:0;font:inherit}.uk-input{overflow:visible}.uk-select{text-transform:none}.uk-select optgroup{font:inherit;font-weight:bold}.uk-textarea{overflow:auto}.uk-input[type="search"]::-webkit-search-cancel-button,.uk-input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}.uk-input[type="number"]::-webkit-inner-spin-button,.uk-input[type="number"]::-webkit-outer-spin-button{height:auto}.uk-input::-moz-placeholder,.uk-textarea::-moz-placeholder{opacity:1}.uk-radio:not(:disabled),.uk-checkbox:not(:disabled){cursor:pointer}.uk-fieldset{border:none;margin:0;padding:0}.uk-input,.uk-textarea{-webkit-appearance:none}.uk-input,.uk-select,.uk-textarea{max-width:100%;width:100%;border:0 none;padding:0 10px;background:#fff;color:#666;border:1px solid #e5e5e5;transition:0.2s ease-in-out;transition-property:color, background-color, border}.uk-input,.uk-select:not([multiple]):not([size]){height:40px;vertical-align:middle;display:inline-block}.uk-input:not(input),.uk-select:not(select){line-height:38px}.uk-select[multiple],.uk-select[size],.uk-textarea{padding-top:4px;padding-bottom:4px;vertical-align:top}.uk-input:focus,.uk-select:focus,.uk-textarea:focus{outline:none;background-color:#fff;color:#666;border-color:#1e87f0}.uk-input:disabled,.uk-select:disabled,.uk-textarea:disabled{background-color:#f8f8f8;color:#999;border-color:#e5e5e5}.uk-input:-ms-input-placeholder{color:#999 !important}.uk-input::placeholder{color:#999}.uk-textarea:-ms-input-placeholder{color:#999 !important}.uk-textarea::placeholder{color:#999}.uk-form-small{font-size:.875rem}.uk-form-small:not(textarea):not([multiple]):not([size]){height:30px;padding-left:8px;padding-right:8px}.uk-form-small:not(select):not(input):not(textarea){line-height:28px}.uk-form-large{font-size:1.25rem}.uk-form-large:not(textarea):not([multiple]):not([size]){height:55px;padding-left:12px;padding-right:12px}.uk-form-large:not(select):not(input):not(textarea){line-height:53px}.uk-form-danger,.uk-form-danger:focus{color:#f0506e;border-color:#f0506e}.uk-form-success,.uk-form-success:focus{color:#32d296;border-color:#32d296}.uk-form-blank{background:none;border-color:transparent}.uk-form-blank:focus{border-color:#e5e5e5;border-style:dashed}input.uk-form-width-xsmall{width:50px}select.uk-form-width-xsmall{width:75px}.uk-form-width-small{width:130px}.uk-form-width-medium{width:200px}.uk-form-width-large{width:500px}.uk-select:not([multiple]):not([size]){-webkit-appearance:none;-moz-appearance:none;padding-right:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:100% 50%}.uk-select:not([multiple]):not([size])::-ms-expand{display:none}.uk-select:not([multiple]):not([size]) option{color:#444}.uk-select:not([multiple]):not([size]):disabled{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-radio,.uk-checkbox{display:inline-block;height:16px;width:16px;overflow:hidden;margin-top:-4px;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;background-color:rgba(0,0,0,0);background-repeat:no-repeat;background-position:50% 50%;border:1px solid #ccc;transition:0.2s ease-in-out;transition-property:background-color, border}.uk-radio{border-radius:50%}.uk-radio:focus,.uk-checkbox:focus{outline:none;border-color:#1e87f0}.uk-radio:checked,.uk-checkbox:checked,.uk-checkbox:indeterminate{background-color:#1e87f0;border-color:rgba(0,0,0,0)}.uk-radio:checked:focus,.uk-checkbox:checked:focus,.uk-checkbox:indeterminate:focus{background-color:#0e6ecd}.uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23fff%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23fff%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23fff%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-radio:disabled,.uk-checkbox:disabled{background-color:#f8f8f8;border-color:#e5e5e5}.uk-radio:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23999%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:disabled:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23999%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-legend{width:100%;color:inherit;padding:0;font-size:1.5rem;line-height:1.4}.uk-form-custom{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-form-custom select,.uk-form-custom input[type="file"]{position:absolute;top:0;z-index:1;width:100%;height:100%;left:0;-webkit-appearance:none;opacity:0;cursor:pointer}.uk-form-custom input[type="file"]{font-size:500px;overflow:hidden}.uk-form-label{color:#333;font-size:.875rem}.uk-form-stacked .uk-form-label{display:block;margin-bottom:5px}@media (max-width: 959px){.uk-form-horizontal .uk-form-label{display:block;margin-bottom:5px}}@media (min-width: 960px){.uk-form-horizontal .uk-form-label{width:200px;margin-top:7px;float:left}.uk-form-horizontal .uk-form-controls{margin-left:215px}.uk-form-horizontal .uk-form-controls-text{padding-top:7px}}.uk-form-icon{position:absolute;top:0;bottom:0;left:0;width:40px;display:inline-flex;justify-content:center;align-items:center;color:#999}.uk-form-icon:hover{color:#666}.uk-form-icon:not(a):not(button):not(input){pointer-events:none}.uk-form-icon:not(.uk-form-icon-flip) ~ .uk-input{padding-left:40px !important}.uk-form-icon-flip{right:0;left:auto}.uk-form-icon-flip ~ .uk-input{padding-right:40px !important}.uk-button{margin:0;border:none;border-radius:0;overflow:visible;font:inherit;color:inherit;text-transform:none;display:inline-block;box-sizing:border-box;padding:0 30px;vertical-align:middle;font-size:.875rem;line-height:38px;text-align:center;text-decoration:none;text-transform:uppercase;transition:0.1s ease-in-out;transition-property:color, background-color, border-color}.uk-button:not(:disabled){cursor:pointer}.uk-button::-moz-focus-inner{border:0;padding:0}.uk-button:hover{text-decoration:none}.uk-button:focus{outline:none}.uk-button-default{background-color:rgba(0,0,0,0);color:#333;border:1px solid #e5e5e5}.uk-button-default:hover,.uk-button-default:focus{background-color:rgba(0,0,0,0);color:#333;border-color:#b2b2b2}.uk-button-default:active,.uk-button-default.uk-active{background-color:rgba(0,0,0,0);color:#333;border-color:#999}.uk-button-primary{background-color:#1e87f0;color:#fff;border:1px solid transparent}.uk-button-primary:hover,.uk-button-primary:focus{background-color:#0f7ae5;color:#fff}.uk-button-primary:active,.uk-button-primary.uk-active{background-color:#0e6ecd;color:#fff}.uk-button-secondary{background-color:#222;color:#fff;border:1px solid transparent}.uk-button-secondary:hover,.uk-button-secondary:focus{background-color:#151515;color:#fff}.uk-button-secondary:active,.uk-button-secondary.uk-active{background-color:#090909;color:#fff}.uk-button-danger{background-color:#f0506e;color:#fff;border:1px solid transparent}.uk-button-danger:hover,.uk-button-danger:focus{background-color:#ee395b;color:#fff}.uk-button-danger:active,.uk-button-danger.uk-active{background-color:#ec2147;color:#fff}.uk-button-default:disabled,.uk-button-primary:disabled,.uk-button-secondary:disabled,.uk-button-danger:disabled{background-color:rgba(0,0,0,0);color:#999;border-color:#e5e5e5}.uk-button-small{padding:0 15px;line-height:28px;font-size:.875rem}.uk-button-large{padding:0 40px;line-height:53px;font-size:.875rem}.uk-button-text{padding:0;line-height:1.5;background:none;color:#333;position:relative}.uk-button-text::before{content:"";position:absolute;bottom:0;left:0;right:100%;border-bottom:1px solid #333;transition:right 0.3s ease-out}.uk-button-text:hover,.uk-button-text:focus{color:#333}.uk-button-text:hover::before,.uk-button-text:focus::before{right:0}.uk-button-text:disabled{color:#999}.uk-button-text:disabled::before{display:none}.uk-button-link{padding:0;line-height:1.5;background:none;color:#1e87f0}.uk-button-link:hover,.uk-button-link:focus{color:#0f6ecd;text-decoration:underline}.uk-button-link:disabled{color:#999;text-decoration:none}.uk-button-group{display:inline-flex;vertical-align:middle;position:relative}.uk-button-group>.uk-button:nth-child(n+2),.uk-button-group>div:nth-child(n+2) .uk-button{margin-left:-1px}.uk-button-group .uk-button:hover,.uk-button-group .uk-button:focus,.uk-button-group .uk-button:active,.uk-button-group .uk-button.uk-active{position:relative;z-index:1}.uk-section{box-sizing:border-box;padding-top:40px;padding-bottom:40px}@media (min-width: 960px){.uk-section{padding-top:70px;padding-bottom:70px}}.uk-section::before,.uk-section::after{content:"";display:table}.uk-section::after{clear:both}.uk-section>:last-child{margin-bottom:0}.uk-section-xsmall{padding-top:20px;padding-bottom:20px}.uk-section-small{padding-top:40px;padding-bottom:40px}.uk-section-large{padding-top:70px;padding-bottom:70px}@media (min-width: 960px){.uk-section-large{padding-top:140px;padding-bottom:140px}}.uk-section-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width: 960px){.uk-section-xlarge{padding-top:210px;padding-bottom:210px}}.uk-section-default{background:#fff}.uk-section-muted{background:#f8f8f8}.uk-section-primary{background:#1e87f0}.uk-section-secondary{background:#222}.uk-container{box-sizing:content-box;max-width:1200px;margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}@media (min-width: 640px){.uk-container{padding-left:30px;padding-right:30px}}@media (min-width: 960px){.uk-container{padding-left:40px;padding-right:40px}}.uk-container::before,.uk-container::after{content:"";display:table}.uk-container::after{clear:both}.uk-container>:last-child{margin-bottom:0}.uk-container .uk-container{padding-left:0;padding-right:0}.uk-container-small{max-width:900px}.uk-container-large{max-width:1600px}.uk-container-expand{max-width:none}.uk-grid{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none}.uk-grid>*{margin:0}.uk-grid>*>:last-child{margin-bottom:0}.uk-grid{margin-left:-30px}.uk-grid>*{padding-left:30px}.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin,*+.uk-grid-margin{margin-top:30px}@media (min-width: 1200px){.uk-grid{margin-left:-40px}.uk-grid>*{padding-left:40px}.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin,*+.uk-grid-margin{margin-top:40px}}.uk-grid-small{margin-left:-15px}.uk-grid-small>*{padding-left:15px}.uk-grid+.uk-grid-small,.uk-grid-small>.uk-grid-margin,*+.uk-grid-margin-small{margin-top:15px}.uk-grid-medium{margin-left:-30px}.uk-grid-medium>*{padding-left:30px}.uk-grid+.uk-grid-medium,.uk-grid-medium>.uk-grid-margin,*+.uk-grid-margin-medium{margin-top:30px}.uk-grid-large{margin-left:-40px}.uk-grid-large>*{padding-left:40px}.uk-grid+.uk-grid-large,.uk-grid-large>.uk-grid-margin,*+.uk-grid-margin-large{margin-top:40px}@media (min-width: 1200px){.uk-grid-large{margin-left:-70px}.uk-grid-large>*{padding-left:70px}.uk-grid+.uk-grid-large,.uk-grid-large>.uk-grid-margin,*+.uk-grid-margin-large{margin-top:70px}}.uk-grid-collapse{margin-left:0}.uk-grid-collapse>*{padding-left:0}.uk-grid+.uk-grid-collapse,.uk-grid-collapse>.uk-grid-margin{margin-top:0}.uk-grid-divider>*{position:relative}.uk-grid-divider>:not(.uk-first-column)::before{content:"";position:absolute;top:0;bottom:0;border-left:1px solid #e5e5e5}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{content:"";position:absolute;left:0;right:0;border-top:1px solid #e5e5e5}.uk-grid-divider{margin-left:-60px}.uk-grid-divider>*{padding-left:60px}.uk-grid-divider>:not(.uk-first-column)::before{left:30px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-30px;left:60px}@media (min-width: 1200px){.uk-grid-divider{margin-left:-80px}.uk-grid-divider>*{padding-left:80px}.uk-grid-divider>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}}.uk-grid-divider.uk-grid-small{margin-left:-30px}.uk-grid-divider.uk-grid-small>*{padding-left:30px}.uk-grid-divider.uk-grid-small>:not(.uk-first-column)::before{left:15px}.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin{margin-top:30px}.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin::before{top:-15px;left:30px}.uk-grid-divider.uk-grid-medium{margin-left:-60px}.uk-grid-divider.uk-grid-medium>*{padding-left:60px}.uk-grid-divider.uk-grid-medium>:not(.uk-first-column)::before{left:30px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin::before{top:-30px;left:60px}.uk-grid-divider.uk-grid-large{margin-left:-80px}.uk-grid-divider.uk-grid-large>*{padding-left:80px}.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}@media (min-width: 1200px){.uk-grid-divider.uk-grid-large{margin-left:-140px}.uk-grid-divider.uk-grid-large>*{padding-left:140px}.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before{left:70px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin{margin-top:140px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-70px;left:140px}}.uk-grid-match>*,.uk-grid-item-match{display:flex;flex-wrap:wrap}.uk-grid-match>*>:not([class*='uk-width']),.uk-grid-item-match>:not([class*='uk-width']){box-sizing:border-box;width:100%;flex:auto}.uk-tile{position:relative;box-sizing:border-box;padding-left:15px;padding-right:15px;padding-top:40px;padding-bottom:40px}@media (min-width: 640px){.uk-tile{padding-left:30px;padding-right:30px}}@media (min-width: 960px){.uk-tile{padding-left:40px;padding-right:40px;padding-top:70px;padding-bottom:70px}}.uk-tile::before,.uk-tile::after{content:"";display:table}.uk-tile::after{clear:both}.uk-tile>:last-child{margin-bottom:0}.uk-tile-xsmall{padding-top:20px;padding-bottom:20px}.uk-tile-small{padding-top:40px;padding-bottom:40px}.uk-tile-large{padding-top:70px;padding-bottom:70px}@media (min-width: 960px){.uk-tile-large{padding-top:140px;padding-bottom:140px}}.uk-tile-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width: 960px){.uk-tile-xlarge{padding-top:210px;padding-bottom:210px}}.uk-tile-default{background:#fff}.uk-tile-muted{background:#f8f8f8}.uk-tile-primary{background:#1e87f0}.uk-tile-secondary{background:#222}.uk-card{position:relative;box-sizing:border-box;transition:box-shadow 0.1s ease-in-out}.uk-card-body{padding:30px 30px}.uk-card-header{padding:15px 30px}.uk-card-footer{padding:15px 30px}@media (min-width: 1200px){.uk-card-body{padding:40px 40px}.uk-card-header{padding:20px 40px}.uk-card-footer{padding:20px 40px}}.uk-card-body::before,.uk-card-body::after,.uk-card-header::before,.uk-card-header::after,.uk-card-footer::before,.uk-card-footer::after{content:"";display:table}.uk-card-body::after,.uk-card-header::after,.uk-card-footer::after{clear:both}.uk-card-body>:last-child,.uk-card-header>:last-child,.uk-card-footer>:last-child{margin-bottom:0}.uk-card-title{font-size:1.5rem;line-height:1.4}.uk-card-badge{position:absolute;top:30px;right:30px;z-index:1}.uk-card-badge:first-child+*{margin-top:0}.uk-card-hover:not(.uk-card-default):not(.uk-card-primary):not(.uk-card-secondary):hover{background:#fff;box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-card-default{background:#fff;color:#666;box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-card-default .uk-card-title{color:#333}.uk-card-default.uk-card-hover:hover{background-color:#fff;box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-card-default .uk-card-header{border-bottom:1px solid #e5e5e5}.uk-card-default .uk-card-footer{border-top:1px solid #e5e5e5}.uk-card-primary{background:#1e87f0;color:#fff;box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-card-primary .uk-card-title{color:#fff}.uk-card-primary.uk-card-hover:hover{background-color:#1e87f0;box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-card-secondary{background:#222;color:#fff;box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-card-secondary .uk-card-title{color:#fff}.uk-card-secondary.uk-card-hover:hover{background-color:#222;box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-card-small.uk-card-body,.uk-card-small .uk-card-body{padding:20px 20px}.uk-card-small .uk-card-header{padding:13px 20px}.uk-card-small .uk-card-footer{padding:13px 20px}@media (min-width: 1200px){.uk-card-large.uk-card-body,.uk-card-large .uk-card-body{padding:70px 70px}.uk-card-large .uk-card-header{padding:35px 70px}.uk-card-large .uk-card-footer{padding:35px 70px}}.uk-card-body>.uk-nav-default{margin-left:-30px;margin-right:-30px}.uk-card-body>.uk-nav-default:only-child{margin-top:-15px;margin-bottom:-15px}.uk-card-body .uk-nav-default>li>a,.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-body .uk-nav-default .uk-nav-divider{padding-left:30px;padding-right:30px}.uk-card-body .uk-nav-default .uk-nav-sub{padding-left:45px}@media (min-width: 1200px){.uk-card-body>.uk-nav-default{margin-left:-40px;margin-right:-40px}.uk-card-body>.uk-nav-default:only-child{margin-top:-25px;margin-bottom:-25px}.uk-card-body .uk-nav-default>li>a,.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-body .uk-nav-default .uk-nav-divider{padding-left:40px;padding-right:40px}.uk-card-body .uk-nav-default .uk-nav-sub{padding-left:55px}}.uk-card-small>.uk-nav-default{margin-left:-20px;margin-right:-20px}.uk-card-small>.uk-nav-default:only-child{margin-top:-5px;margin-bottom:-5px}.uk-card-small .uk-nav-default>li>a,.uk-card-small .uk-nav-default .uk-nav-header,.uk-card-small .uk-nav-default .uk-nav-divider{padding-left:20px;padding-right:20px}.uk-card-small .uk-nav-default .uk-nav-sub{padding-left:35px}@media (min-width: 1200px){.uk-card-large>.uk-nav-default{margin:0}.uk-card-large>.uk-nav-default:only-child{margin:0}.uk-card-large .uk-nav-default>li>a,.uk-card-large .uk-nav-default .uk-nav-header,.uk-card-large .uk-nav-default .uk-nav-divider{padding-left:0;padding-right:0}.uk-card-large .uk-nav-default .uk-nav-sub{padding-left:15px}}.uk-close{color:#999;transition:0.1s ease-in-out;transition-property:color, opacity}.uk-close:hover,.uk-close:focus{color:#666;outline:none}.uk-spinner>*{animation:uk-spinner-rotate 1.4s linear infinite}@keyframes uk-spinner-rotate{0%{transform:rotate(0deg)}100%{transform:rotate(270deg)}}.uk-spinner>*>*{stroke-dasharray:88px;stroke-dashoffset:0;transform-origin:center;animation:uk-spinner-dash 1.4s ease-in-out infinite;stroke-width:1;stroke-linecap:round}@keyframes uk-spinner-dash{0%{stroke-dashoffset:88px}50%{stroke-dashoffset:22px;transform:rotate(135deg)}100%{stroke-dashoffset:88px;transform:rotate(450deg)}}.uk-totop{padding:5px;color:#999;transition:color 0.1s ease-in-out}.uk-totop:hover,.uk-totop:focus{color:#666;outline:none}.uk-totop:active{color:#333}.uk-marker{padding:5px;background:#222;color:#fff;border-radius:500px}.uk-marker:hover,.uk-marker:focus{color:#fff;outline:none}.uk-alert{position:relative;margin-bottom:20px;padding:15px 29px 15px 15px;background:#f8f8f8;color:#666}*+.uk-alert{margin-top:20px}.uk-alert>:last-child{margin-bottom:0}.uk-alert-close{position:absolute;top:20px;right:15px;color:inherit;opacity:.4}.uk-alert-close:first-child+*{margin-top:0}.uk-alert-close:hover,.uk-alert-close:focus{color:inherit;opacity:.8}.uk-alert-primary{background:#d8eafc;color:#1e87f0}.uk-alert-success{background:#edfbf6;color:#32d296}.uk-alert-warning{background:#fef5ee;color:#faa05a}.uk-alert-danger{background:#fef4f6;color:#f0506e}.uk-alert h1,.uk-alert h2,.uk-alert h3,.uk-alert h4,.uk-alert h5,.uk-alert h6{color:inherit}.uk-alert a:not([class]){color:inherit;text-decoration:underline}.uk-alert a:not([class]):hover{color:inherit;text-decoration:underline}.uk-badge{box-sizing:border-box;min-width:22px;height:22px;padding:0 5px;border-radius:500px;vertical-align:middle;background:#1e87f0;color:#fff;font-size:.875rem;display:inline-flex;justify-content:center;align-items:center}.uk-badge:hover,.uk-badge:focus{color:#fff;text-decoration:none;outline:none}.uk-label{display:inline-block;padding:0 10px;background:#1e87f0;line-height:1.5;font-size:.875rem;color:#fff;vertical-align:middle;white-space:nowrap;border-radius:2px;text-transform:uppercase}.uk-label-success{background-color:#32d296;color:#fff}.uk-label-warning{background-color:#faa05a;color:#fff}.uk-label-danger{background-color:#f0506e;color:#fff}.uk-overlay{padding:30px 30px}.uk-overlay>:last-child{margin-bottom:0}.uk-overlay-default{background:rgba(255,255,255,0.8)}.uk-overlay-primary{background:rgba(34,34,34,0.8)}.uk-article::before,.uk-article::after{content:"";display:table}.uk-article::after{clear:both}.uk-article>:last-child{margin-bottom:0}.uk-article+.uk-article{margin-top:70px}.uk-article-title{font-size:2.23125rem;line-height:1.2}@media (min-width: 960px){.uk-article-title{font-size:2.625rem}}.uk-article-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-article-meta a{color:#999}.uk-article-meta a:hover{color:#666;text-decoration:none}.uk-comment-body{overflow-wrap:break-word;word-wrap:break-word}.uk-comment-header{margin-bottom:20px}.uk-comment-body::before,.uk-comment-body::after,.uk-comment-header::before,.uk-comment-header::after{content:"";display:table}.uk-comment-body::after,.uk-comment-header::after{clear:both}.uk-comment-body>:last-child,.uk-comment-header>:last-child{margin-bottom:0}.uk-comment-title{font-size:1.25rem;line-height:1.4}.uk-comment-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-comment-list{padding:0;list-style:none}.uk-comment-list>:nth-child(n+2){margin-top:70px}.uk-comment-list .uk-comment ~ ul{margin:70px 0 0 0;padding-left:30px;list-style:none}@media (min-width: 960px){.uk-comment-list .uk-comment ~ ul{padding-left:100px}}.uk-comment-list .uk-comment ~ ul>:nth-child(n+2){margin-top:70px}.uk-comment-primary{padding:30px;background-color:#f8f8f8}.uk-search{display:inline-block;position:relative;max-width:100%;margin:0}.uk-search-input::-webkit-search-cancel-button,.uk-search-input::-webkit-search-decoration{-webkit-appearance:none}.uk-search-input::-moz-placeholder{opacity:1}.uk-search-input{box-sizing:border-box;margin:0;border-radius:0;font:inherit;overflow:visible;-webkit-appearance:none;vertical-align:middle;width:100%;border:none;color:#666}.uk-search-input:focus{outline:none}.uk-search-input:-ms-input-placeholder{color:#999 !important}.uk-search-input::placeholder{color:#999}.uk-search-icon:focus{outline:none}.uk-search .uk-search-icon{position:absolute;top:0;bottom:0;left:0;display:inline-flex;justify-content:center;align-items:center;color:#999}.uk-search .uk-search-icon:hover{color:#999}.uk-search .uk-search-icon:not(a):not(button):not(input){pointer-events:none}.uk-search .uk-search-icon-flip{right:0;left:auto}.uk-search-default{width:180px}.uk-search-default .uk-search-input{height:40px;padding-left:6px;padding-right:6px;background:rgba(0,0,0,0);border:1px solid #e5e5e5}.uk-search-default .uk-search-input:focus{background-color:rgba(0,0,0,0)}.uk-search-default .uk-search-icon{width:40px}.uk-search-default .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input{padding-left:40px}.uk-search-default .uk-search-icon-flip ~ .uk-search-input{padding-right:40px}.uk-search-navbar{width:400px}.uk-search-navbar .uk-search-input{height:40px;background:rgba(0,0,0,0);font-size:1.5rem}.uk-search-navbar .uk-search-icon{width:40px}.uk-search-navbar .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input{padding-left:40px}.uk-search-navbar .uk-search-icon-flip ~ .uk-search-input{padding-right:40px}.uk-search-large{width:500px}.uk-search-large .uk-search-input{height:80px;background:rgba(0,0,0,0);font-size:2.625rem}.uk-search-large .uk-search-icon{width:80px}.uk-search-large .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input{padding-left:80px}.uk-search-large .uk-search-icon-flip ~ .uk-search-input{padding-right:80px}.uk-search-toggle{color:#999}.uk-search-toggle:hover,.uk-search-toggle:focus{color:#666}.uk-nav,.uk-nav ul{margin:0;padding:0;list-style:none}.uk-nav li>a{display:block;text-decoration:none}.uk-nav li>a:focus{outline:none}.uk-nav>li>a{padding:5px 0}ul.uk-nav-sub{padding:5px 0 5px 15px}.uk-nav-sub ul{padding-left:15px}.uk-nav-sub a{padding:2px 0}.uk-nav-parent-icon>.uk-parent>a::after{content:"";width:1.5em;height:1.5em;float:right;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23666%22%20stroke-width%3D%221.1%22%20points%3D%2210%201%204%207%2010%2013%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-nav-parent-icon>.uk-parent.uk-open>a::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23666%22%20stroke-width%3D%221.1%22%20points%3D%221%204%207%2010%2013%204%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-nav-header{padding:5px 0;text-transform:uppercase;font-size:.875rem}.uk-nav-header:not(:first-child){margin-top:20px}.uk-nav-divider{margin:5px 0}.uk-nav-default{font-size:.875rem}.uk-nav-default>li>a{color:#999}.uk-nav-default>li>a:hover,.uk-nav-default>li>a:focus{color:#666}.uk-nav-default>li.uk-active>a{color:#333}.uk-nav-default .uk-nav-header{color:#333}.uk-nav-default .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-default .uk-nav-sub a{color:#999}.uk-nav-default .uk-nav-sub a:hover,.uk-nav-default .uk-nav-sub a:focus{color:#666}.uk-nav-primary>li>a{font-size:1.5rem;line-height:1.5;color:#999}.uk-nav-primary>li>a:hover,.uk-nav-primary>li>a:focus{color:#666}.uk-nav-primary>li.uk-active>a{color:#333}.uk-nav-primary .uk-nav-header{color:#333}.uk-nav-primary .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-primary .uk-nav-sub a{color:#999}.uk-nav-primary .uk-nav-sub a:hover,.uk-nav-primary .uk-nav-sub a:focus{color:#666}.uk-nav-center{text-align:center}.uk-nav-center .uk-nav-sub,.uk-nav-center .uk-nav-sub ul{padding-left:0}.uk-nav-center.uk-nav-parent-icon>.uk-parent>a::after{position:absolute}.uk-navbar{display:flex;position:relative}.uk-navbar-container:not(.uk-navbar-transparent){background:#f8f8f8}.uk-navbar-container>::before,.uk-navbar-container>::after{display:none !important}.uk-navbar-left,.uk-navbar-right,.uk-navbar-center,.uk-navbar-center-left>*,.uk-navbar-center-right>*{display:flex;align-items:center}.uk-navbar-right{margin-left:auto}.uk-navbar-center:only-child{margin-left:auto;margin-right:auto;position:relative}.uk-navbar-center:not(:only-child){position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);z-index:990}.uk-navbar-center:not(:only-child) .uk-navbar-nav>li>a,.uk-navbar-center:not(:only-child) .uk-navbar-item,.uk-navbar-center:not(:only-child) .uk-navbar-toggle{white-space:nowrap}.uk-navbar-center-left,.uk-navbar-center-right{position:absolute;top:0}.uk-navbar-center-left{right:100%}.uk-navbar-center-right{left:100%}[class*='uk-navbar-center-'] .uk-navbar-nav>li>a,[class*='uk-navbar-center-'] .uk-navbar-item,[class*='uk-navbar-center-'] .uk-navbar-toggle{white-space:nowrap}.uk-navbar-nav{display:flex;margin:0;padding:0;list-style:none}.uk-navbar-left,.uk-navbar-right,.uk-navbar-center:only-child{flex-wrap:wrap}.uk-navbar-nav>li>a,.uk-navbar-item,.uk-navbar-toggle{display:flex;justify-content:center;align-items:center;box-sizing:border-box;height:80px;padding:0 15px;font-size:.875rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;text-decoration:none}.uk-navbar-nav>li>a{color:#999;text-transform:uppercase;transition:0.1s ease-in-out;transition-property:color, background-color}.uk-navbar-nav>li:hover>a,.uk-navbar-nav>li>a:focus,.uk-navbar-nav>li>a.uk-open{color:#666;outline:none}.uk-navbar-nav>li>a:active{color:#333}.uk-navbar-nav>li.uk-active>a{color:#333}.uk-navbar-item{color:#666}.uk-navbar-toggle{color:#999}.uk-navbar-toggle:hover,.uk-navbar-toggle:focus,.uk-navbar-toggle.uk-open{color:#666;outline:none;text-decoration:none}.uk-navbar-subtitle{font-size:.875rem}.uk-navbar-dropdown{display:none;position:absolute;z-index:1020;box-sizing:border-box;width:200px;padding:25px;background:#fff;color:#666;box-shadow:0 5px 12px rgba(0,0,0,0.15)}.uk-navbar-dropdown.uk-open{display:block}[class*='uk-navbar-dropdown-top']{margin-top:-15px}[class*='uk-navbar-dropdown-bottom']{margin-top:15px}[class*='uk-navbar-dropdown-left']{margin-left:-15px}[class*='uk-navbar-dropdown-right']{margin-left:15px}.uk-navbar-dropdown-grid{margin-left:-50px}.uk-navbar-dropdown-grid>*{padding-left:50px}.uk-navbar-dropdown-grid>.uk-grid-margin{margin-top:50px}.uk-navbar-dropdown-stack .uk-navbar-dropdown-grid>*{width:100% !important}.uk-navbar-dropdown-width-2:not(.uk-navbar-dropdown-stack){width:400px}.uk-navbar-dropdown-width-3:not(.uk-navbar-dropdown-stack){width:600px}.uk-navbar-dropdown-width-4:not(.uk-navbar-dropdown-stack){width:800px}.uk-navbar-dropdown-width-5:not(.uk-navbar-dropdown-stack){width:1000px}.uk-navbar-dropdown-dropbar{margin-top:0;margin-bottom:0;box-shadow:none}.uk-navbar-dropdown-nav{font-size:.875rem}.uk-navbar-dropdown-nav>li>a{color:#999}.uk-navbar-dropdown-nav>li>a:hover,.uk-navbar-dropdown-nav>li>a:focus{color:#666}.uk-navbar-dropdown-nav>li.uk-active>a{color:#333}.uk-navbar-dropdown-nav .uk-nav-header{color:#333}.uk-navbar-dropdown-nav .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-navbar-dropdown-nav .uk-nav-sub a{color:#999}.uk-navbar-dropdown-nav .uk-nav-sub a:hover,.uk-navbar-dropdown-nav .uk-nav-sub a:focus{color:#666}.uk-navbar-dropbar{background:#fff}.uk-navbar-dropbar-slide{position:absolute;z-index:980;left:0;right:0;box-shadow:0 5px 7px rgba(0,0,0,0.05)}.uk-navbar-container>.uk-container .uk-navbar-left{margin-left:-15px;margin-right:-15px}.uk-navbar-container>.uk-container .uk-navbar-right{margin-right:-15px}.uk-navbar-dropdown-grid>*{position:relative}.uk-navbar-dropdown-grid>:not(.uk-first-column)::before{content:"";position:absolute;top:0;bottom:0;left:25px;border-left:1px solid #e5e5e5}.uk-navbar-dropdown-grid.uk-grid-stack>.uk-grid-margin::before{content:"";position:absolute;top:-25px;left:50px;right:0;border-top:1px solid #e5e5e5}.uk-subnav{display:flex;flex-wrap:wrap;margin-left:-20px;padding:0;list-style:none}.uk-subnav>*{flex:none;padding-left:20px;position:relative}.uk-subnav>*>:first-child{display:block;color:#999;font-size:.875rem;text-transform:uppercase;transition:0.1s ease-in-out;transition-property:color, background-color}.uk-subnav>*>a:hover,.uk-subnav>*>a:focus{color:#666;text-decoration:none;outline:none}.uk-subnav>.uk-active>a{color:#333}.uk-subnav-divider>*{display:flex;align-items:center}.uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{content:"";height:1.5em;margin-left:0px;margin-right:20px;border-left:1px solid #e5e5e5}.uk-subnav-pill>*>:first-child{padding:5px 10px;background:rgba(0,0,0,0);color:#999}.uk-subnav-pill>*>a:hover,.uk-subnav-pill>*>a:focus{background-color:#f8f8f8;color:#666}.uk-subnav-pill>*>a:active{background-color:#f8f8f8;color:#666}.uk-subnav-pill>.uk-active>a{background-color:#1e87f0;color:#fff}.uk-subnav>.uk-disabled>a{color:#999}.uk-breadcrumb{display:flex;flex-wrap:wrap;padding:0;list-style:none}.uk-breadcrumb>*{flex:none}.uk-breadcrumb>*>*{display:inline-block;font-size:.875rem;color:#999}.uk-breadcrumb>*>:hover,.uk-breadcrumb>*>:focus{color:#666;text-decoration:none}.uk-breadcrumb>:last-child>*{color:#666}.uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{content:"/";display:inline-block;margin:0 20px;color:#999}.uk-pagination{display:flex;flex-wrap:wrap;margin-left:-20px;padding:0;list-style:none}.uk-pagination>*{flex:none;padding-left:20px;position:relative}.uk-pagination>*>*{display:block;color:#999;transition:color 0.1s ease-in-out}.uk-pagination>*>:hover,.uk-pagination>*>:focus{color:#666;text-decoration:none}.uk-pagination>.uk-active>*{color:#666}.uk-pagination>.uk-disabled>*{color:#999}.uk-tab{display:flex;flex-wrap:wrap;margin-left:-20px;padding:0;list-style:none;position:relative}.uk-tab::before{content:"";position:absolute;bottom:0;left:20px;right:0;border-bottom:1px solid #e5e5e5}.uk-tab>*{flex:none;padding-left:20px;position:relative}.uk-tab>*>a{display:block;text-align:center;padding:5px 10px;color:#999;border-bottom:1px solid transparent;font-size:.875rem;text-transform:uppercase;transition:color 0.1s ease-in-out}.uk-tab>*>a:hover,.uk-tab>*>a:focus{color:#666;text-decoration:none}.uk-tab>.uk-active>a{color:#333;border-color:#1e87f0}.uk-tab>.uk-disabled>a{color:#999}.uk-tab-bottom::before{top:0;bottom:auto}.uk-tab-bottom>*>a{border-top:1px solid transparent;border-bottom:none}.uk-tab-left,.uk-tab-right{flex-direction:column;margin-left:0}.uk-tab-left>*,.uk-tab-right>*{padding-left:0}.uk-tab-left::before{top:0;bottom:0;left:auto;right:0;border-left:1px solid #e5e5e5;border-bottom:none}.uk-tab-right::before{top:0;bottom:0;left:0;right:auto;border-left:1px solid #e5e5e5;border-bottom:none}.uk-tab-left>*>a{text-align:left;border-right:1px solid transparent;border-bottom:none}.uk-tab-right>*>a{text-align:left;border-left:1px solid transparent;border-bottom:none}.uk-tab .uk-dropdown{margin-left:30px}.uk-slidenav{padding:5px 10px;color:rgba(102,102,102,0.5);transition:color 0.1s ease-in-out}.uk-slidenav:hover,.uk-slidenav:focus{color:rgba(102,102,102,0.9);outline:none}.uk-slidenav:active{color:rgba(102,102,102,0.5)}.uk-slidenav-large{padding:10px 10px}.uk-slidenav-container{display:flex}.uk-dotnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-12px}.uk-dotnav>*{flex:none;padding-left:12px}.uk-dotnav>*>*{display:block;box-sizing:border-box;width:10px;height:10px;border-radius:50%;background:rgba(0,0,0,0);text-indent:100%;overflow:hidden;white-space:nowrap;border:1px solid rgba(102,102,102,0.4);transition:0.2s ease-in-out;transition-property:background-color, border-color}.uk-dotnav>*>:hover,.uk-dotnav>*>:focus{background-color:rgba(102,102,102,0.6);outline:none;border-color:rgba(0,0,0,0)}.uk-dotnav>*>:active{background-color:rgba(102,102,102,0.2);border-color:rgba(0,0,0,0)}.uk-dotnav>.uk-active>*{background-color:rgba(102,102,102,0.6);border-color:rgba(0,0,0,0)}.uk-dotnav-vertical{flex-direction:column;margin-left:0;margin-top:-12px}.uk-dotnav-vertical>*{padding-left:0;padding-top:12px}.uk-thumbnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-15px}.uk-thumbnav>*{padding-left:15px}.uk-thumbnav>*>*{display:inline-block;position:relative}.uk-thumbnav>*>*::after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(255,255,255,0.4);transition:background-color 0.1s ease-in-out}.uk-thumbnav>*>:hover,.uk-thumbnav>*>:focus{outline:none}.uk-thumbnav>*>:hover::after,.uk-thumbnav>*>:focus::after{background-color:rgba(0,0,0,0)}.uk-thumbnav>.uk-active>*::after{background-color:rgba(0,0,0,0)}.uk-thumbnav-vertical{flex-direction:column;margin-left:0;margin-top:-15px}.uk-thumbnav-vertical>*{padding-left:0;padding-top:15px}.uk-accordion{padding:0;list-style:none}.uk-accordion>:nth-child(n+2){margin-top:20px}.uk-accordion-title{display:block;font-size:1.25rem;line-height:1.4;color:#333;overflow:hidden}.uk-accordion-title::after{content:"";width:1.4em;height:1.4em;float:right;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-open>.uk-accordion-title::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-accordion-title:hover,.uk-accordion-title:focus{color:#666;text-decoration:none;outline:none}.uk-accordion-content{margin-top:20px}.uk-accordion-content::before,.uk-accordion-content::after{content:"";display:table}.uk-accordion-content::after{clear:both}.uk-accordion-content>:last-child{margin-bottom:0}.uk-drop{display:none;position:absolute;z-index:1020;box-sizing:border-box;width:300px}.uk-drop.uk-open{display:block}[class*='uk-drop-top']{margin-top:-20px}[class*='uk-drop-bottom']{margin-top:20px}[class*='uk-drop-left']{margin-left:-20px}[class*='uk-drop-right']{margin-left:20px}.uk-drop-stack .uk-drop-grid>*{width:100% !important}.uk-dropdown{display:none;position:absolute;z-index:1020;box-sizing:border-box;min-width:200px;padding:25px;background:#fff;color:#666;box-shadow:0 5px 12px rgba(0,0,0,0.15)}.uk-dropdown.uk-open{display:block}.uk-dropdown-nav{white-space:nowrap;font-size:.875rem}.uk-dropdown-nav>li>a{color:#999}.uk-dropdown-nav>li>a:hover,.uk-dropdown-nav>li>a:focus,.uk-dropdown-nav>li.uk-active>a{color:#666}.uk-dropdown-nav .uk-nav-header{color:#333}.uk-dropdown-nav .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-dropdown-nav .uk-nav-sub a{color:#999}.uk-dropdown-nav .uk-nav-sub a:hover,.uk-dropdown-nav .uk-nav-sub a:focus{color:#666}[class*='uk-dropdown-top']{margin-top:-10px}[class*='uk-dropdown-bottom']{margin-top:10px}[class*='uk-dropdown-left']{margin-left:-10px}[class*='uk-dropdown-right']{margin-left:10px}.uk-dropdown-stack .uk-dropdown-grid>*{width:100% !important}.uk-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:15px 15px;background:rgba(0,0,0,0.6);opacity:0;transition:opacity 0.15s linear}@media (min-width: 640px){.uk-modal{padding:50px 30px}}@media (min-width: 960px){.uk-modal{padding-left:40px;padding-right:40px}}.uk-modal.uk-open{opacity:1}.uk-modal-page{overflow:hidden}.uk-modal-dialog{position:relative;box-sizing:border-box;margin:0 auto;width:600px;max-width:calc(100% - 0.01px) !important;background:#fff;opacity:0;transform:translateY(-100px);transition:0.3s linear;transition-property:opacity, transform}.uk-open>.uk-modal-dialog{opacity:1;transform:translateY(0)}.uk-modal-container .uk-modal-dialog{width:1200px}.uk-modal-full{padding:0;background:none}.uk-modal-full .uk-modal-dialog{margin:0;width:100%;max-width:100%;transform:translateY(0)}.uk-modal-body{padding:30px 30px}.uk-modal-header{padding:15px 30px;background:#fff;border-bottom:1px solid #e5e5e5}.uk-modal-footer{padding:15px 30px;background:#fff;border-top:1px solid #e5e5e5}.uk-modal-body::before,.uk-modal-body::after,.uk-modal-header::before,.uk-modal-header::after,.uk-modal-footer::before,.uk-modal-footer::after{content:"";display:table}.uk-modal-body::after,.uk-modal-header::after,.uk-modal-footer::after{clear:both}.uk-modal-body>:last-child,.uk-modal-header>:last-child,.uk-modal-footer>:last-child{margin-bottom:0}.uk-modal-title{font-size:2rem;line-height:1.3}[class*='uk-modal-close-']{position:absolute;z-index:1010;top:10px;right:10px;padding:5px}[class*='uk-modal-close-']:first-child+*{margin-top:0}.uk-modal-close-outside{top:0;right:-5px;transform:translate(0, -100%);color:#fff}.uk-modal-close-outside:hover{color:#fff}@media (min-width: 960px){.uk-modal-close-outside{right:0;transform:translate(100%, -100%)}}.uk-modal-close-full{top:0;right:0;padding:20px;background:#fff}.uk-lightbox{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;background:#000;opacity:0;transition:opacity 0.15s linear}.uk-lightbox.uk-open{display:block;opacity:1}.uk-lightbox-page{overflow:hidden}.uk-lightbox-items>*{position:absolute;top:0;right:0;bottom:0;left:0;display:none;justify-content:center;align-items:center;color:rgba(255,255,255,0.7);will-change:transform, opacity}.uk-lightbox-items>*>*{max-width:100vw;max-height:100vh}.uk-lightbox-items>*>:not(iframe){width:auto;height:auto}.uk-lightbox-items>.uk-active{display:flex}.uk-lightbox-toolbar{padding:10px 10px;background:rgba(0,0,0,0.3);color:rgba(255,255,255,0.7)}.uk-lightbox-toolbar *{color:rgba(255,255,255,0.7)}.uk-lightbox-toolbar-icon{padding:5px;color:rgba(255,255,255,0.7)}.uk-lightbox-toolbar-icon:hover{color:#fff}.uk-lightbox-button{box-sizing:border-box;width:50px;height:50px;background:rgba(0,0,0,0.3);color:rgba(255,255,255,0.7);display:inline-flex;justify-content:center;align-items:center}.uk-lightbox-button:hover{color:#fff}.uk-lightbox-iframe{width:80%;height:80%}.uk-slideshow{-webkit-tap-highlight-color:transparent}.uk-slideshow-items{position:relative;z-index:0;margin:0;padding:0;list-style:none;overflow:hidden;-webkit-touch-callout:none}.uk-slideshow-items>*{position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden;will-change:transform, opacity;touch-action:pan-y}.uk-slideshow-items>:not(.uk-active){display:none}.uk-slider{-webkit-tap-highlight-color:transparent}.uk-slider-container{overflow:hidden}.uk-slider-items{will-change:transform;position:relative}.uk-slider-items:not(.uk-grid){display:flex;margin:0;padding:0;list-style:none;-webkit-touch-callout:none}.uk-slider-items.uk-grid{flex-wrap:nowrap}.uk-slider-items>*{flex:none;position:relative;touch-action:pan-y}.uk-sticky-fixed{z-index:980;box-sizing:border-box;margin:0 !important;-webkit-backface-visibility:hidden;backface-visibility:hidden}.uk-sticky[class*='uk-animation-']{animation-duration:.2s}.uk-sticky.uk-animation-reverse{animation-duration:.2s}.uk-offcanvas{display:none;position:fixed;top:0;bottom:0;left:0;z-index:1000}.uk-offcanvas-flip .uk-offcanvas{right:0;left:auto}.uk-offcanvas-bar{position:absolute;top:0;bottom:0;left:0;box-sizing:border-box;width:270px;padding:20px 20px;background:#222;overflow-y:auto;-webkit-overflow-scrolling:touch;transform:translateX(-100%)}@media (min-width: 960px){.uk-offcanvas-bar{width:350px;padding:40px 40px}}.uk-offcanvas-flip .uk-offcanvas-bar{left:auto;right:0;transform:translateX(100%)}.uk-open>.uk-offcanvas-bar{transform:translateX(0)}.uk-offcanvas-bar-animation{transition:transform 0.3s ease-out}.uk-offcanvas-reveal{position:absolute;top:0;bottom:0;left:0;width:0;overflow:hidden;transition:width 0.3s ease-out}.uk-offcanvas-reveal .uk-offcanvas-bar{transform:translateX(0)}.uk-open>.uk-offcanvas-reveal{width:270px}@media (min-width: 960px){.uk-open>.uk-offcanvas-reveal{width:350px}}.uk-offcanvas-flip .uk-offcanvas-reveal{right:0;left:auto}.uk-offcanvas-close{position:absolute;z-index:1000;top:20px;right:20px;padding:5px}.uk-offcanvas-overlay{width:100vw;touch-action:none}.uk-offcanvas-overlay::before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(0,0,0,0.1);opacity:0;transition:opacity 0.15s linear}.uk-offcanvas-overlay.uk-open::before{opacity:1}.uk-offcanvas-page,.uk-offcanvas-container{overflow-x:hidden}.uk-offcanvas-container-overlay{overflow:hidden}.uk-offcanvas-container .uk-offcanvas-content{position:relative;left:0;transition:left 0.3s ease-out;-webkit-overflow-scrolling:touch}.uk-offcanvas-overlay .uk-offcanvas-content{overflow-y:hidden}:not(.uk-offcanvas-flip)>.uk-offcanvas-content-animation{left:270px}.uk-offcanvas-flip>.uk-offcanvas-content-animation{left:-270px}@media (min-width: 960px){:not(.uk-offcanvas-flip)>.uk-offcanvas-content-animation{left:350px}.uk-offcanvas-flip>.uk-offcanvas-content-animation{left:-350px}}.uk-switcher{margin:0;padding:0;list-style:none}.uk-switcher>:not(.uk-active){display:none}.uk-switcher>*>:last-child{margin-bottom:0}.uk-leader{overflow:hidden}.uk-leader-fill::after{display:inline-block;margin-left:15px;width:0;content:attr(data-fill);white-space:nowrap}.uk-leader-fill.uk-leader-hide::after{display:none}.var-leader-fill::before{content:"."}.uk-iconnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-10px}.uk-iconnav>*{flex:none;padding-left:10px}.uk-iconnav>*>a{display:block;color:#999}.uk-iconnav>*>a:hover,.uk-iconnav>*>a:focus{color:#666;outline:none}.uk-iconnav>.uk-active>a{color:#666}.uk-iconnav-vertical{flex-direction:column;margin-left:0;margin-top:-10px}.uk-iconnav-vertical>*{padding-left:0;padding-top:10px}.uk-notification{position:fixed;top:10px;left:10px;z-index:1040;box-sizing:border-box;width:350px}.uk-notification-top-right,.uk-notification-bottom-right{left:auto;right:10px}.uk-notification-top-center,.uk-notification-bottom-center{left:50%;margin-left:-175px}.uk-notification-bottom-left,.uk-notification-bottom-right,.uk-notification-bottom-center{top:auto;bottom:10px}@media (max-width: 639px){.uk-notification{left:10px;right:10px;width:auto;margin:0}}.uk-notification-message{position:relative;margin-bottom:10px;padding:15px;background:#f8f8f8;color:#666;font-size:1.25rem;line-height:1.4;cursor:pointer}.uk-notification-close{display:none;position:absolute;top:20px;right:15px}.uk-notification-message:hover .uk-notification-close{display:block}.uk-notification-message-primary{color:#1e87f0}.uk-notification-message-success{color:#32d296}.uk-notification-message-warning{color:#faa05a}.uk-notification-message-danger{color:#f0506e}.uk-tooltip{display:none;position:absolute;z-index:1030;box-sizing:border-box;max-width:200px;padding:3px 6px;background:#666;border-radius:2px;color:#fff;font-size:12px}.uk-tooltip.uk-active{display:block}[class*='uk-tooltip-top']{margin-top:-10px}[class*='uk-tooltip-bottom']{margin-top:10px}[class*='uk-tooltip-left']{margin-left:-10px}[class*='uk-tooltip-right']{margin-left:10px}.uk-placeholder{margin-bottom:20px;padding:30px 30px;background:rgba(0,0,0,0);border:1px dashed #e5e5e5}*+.uk-placeholder{margin-top:20px}.uk-placeholder>:last-child{margin-bottom:0}.uk-progress{vertical-align:baseline;-webkit-appearance:none;-moz-appearance:none;display:block;width:100%;border:0;background-color:#f8f8f8;margin-bottom:20px;height:15px;border-radius:500px;overflow:hidden}*+.uk-progress{margin-top:20px}.uk-progress:indeterminate{color:transparent}.uk-progress::-webkit-progress-bar{background-color:#f8f8f8;border-radius:500px;overflow:hidden}.uk-progress:indeterminate::-moz-progress-bar{width:0}.uk-progress::-webkit-progress-value{background-color:#1e87f0;transition:width 0.6s ease}.uk-progress::-moz-progress-bar{background-color:#1e87f0}.uk-progress::-ms-fill{background-color:#1e87f0;transition:width 0.6s ease;border:0}.uk-sortable{position:relative}.uk-sortable>*{touch-action:none}.uk-sortable svg{pointer-events:none}.uk-sortable>:last-child{margin-bottom:0}.uk-sortable-drag{position:absolute !important;z-index:1050 !important;pointer-events:none}.uk-sortable-placeholder{opacity:0}.uk-sortable-empty{min-height:50px}.uk-sortable-handle:hover{cursor:move}.uk-countdown-number,.uk-countdown-separator{line-height:70px}.uk-countdown-number{font-size:2rem}@media (min-width: 640px){.uk-countdown-number{font-size:4rem}}@media (min-width: 960px){.uk-countdown-number{font-size:6rem}}.uk-countdown-separator{font-size:1rem}@media (min-width: 640px){.uk-countdown-separator{font-size:2rem}}@media (min-width: 960px){.uk-countdown-separator{font-size:3rem}}[class*='uk-animation-']{animation-duration:.5s;animation-timing-function:ease-out;animation-fill-mode:both}.uk-animation-reverse{animation-direction:reverse;animation-timing-function:ease-in}.uk-animation-fade{animation-name:uk-fade;animation-duration:.8s;animation-timing-function:linear}.uk-animation-scale-up{animation-name:uk-fade-scale-02}.uk-animation-scale-down{animation-name:uk-fade-scale-18}.uk-animation-slide-top{animation-name:uk-fade-top}.uk-animation-slide-bottom{animation-name:uk-fade-bottom}.uk-animation-slide-left{animation-name:uk-fade-left}.uk-animation-slide-right{animation-name:uk-fade-right}.uk-animation-slide-top-small{animation-name:uk-fade-top-small}.uk-animation-slide-bottom-small{animation-name:uk-fade-bottom-small}.uk-animation-slide-left-small{animation-name:uk-fade-left-small}.uk-animation-slide-right-small{animation-name:uk-fade-right-small}.uk-animation-slide-top-medium{animation-name:uk-fade-top-medium}.uk-animation-slide-bottom-medium{animation-name:uk-fade-bottom-medium}.uk-animation-slide-left-medium{animation-name:uk-fade-left-medium}.uk-animation-slide-right-medium{animation-name:uk-fade-right-medium}.uk-animation-kenburns{animation-name:uk-scale-kenburns;animation-duration:15s}.uk-animation-shake{animation-name:uk-shake}.uk-animation-fast{animation-duration:.1s}.uk-animation-toggle:not(:hover):not(.uk-hover) [class*='uk-animation-']{animation-name:none}@keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@keyframes uk-fade-top{0%{opacity:0;transform:translateY(-100%)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-bottom{0%{opacity:0;transform:translateY(100%)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-left{0%{opacity:0;transform:translateX(-100%)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-right{0%{opacity:0;transform:translateX(100%)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-top-small{0%{opacity:0;transform:translateY(-10px)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-bottom-small{0%{opacity:0;transform:translateY(10px)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-left-small{0%{opacity:0;transform:translateX(-10px)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-right-small{0%{opacity:0;transform:translateX(10px)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-top-medium{0%{opacity:0;transform:translateY(-50px)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-bottom-medium{0%{opacity:0;transform:translateY(50px)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-left-medium{0%{opacity:0;transform:translateX(-50px)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-right-medium{0%{opacity:0;transform:translateX(50px)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-scale-02{0%{opacity:0;transform:scale(0.2)}100%{opacity:1;transform:scale(1)}}@keyframes uk-fade-scale-18{0%{opacity:0;transform:scale(1.8)}100%{opacity:1;transform:scale(1)}}@keyframes uk-scale-kenburns{0%{transform:scale(1)}100%{transform:scale(1.2)}}@keyframes uk-shake{0%,100%{transform:translateX(0)}10%{transform:translateX(-9px)}20%{transform:translateX(8px)}30%{transform:translateX(-7px)}40%{transform:translateX(6px)}50%{transform:translateX(-5px)}60%{transform:translateX(4px)}70%{transform:translateX(-3px)}80%{transform:translateX(2px)}90%{transform:translateX(-1px)}}[class*='uk-child-width']>*{box-sizing:border-box;width:100%}.uk-child-width-1-2>*{width:50%}.uk-child-width-1-3>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4>*{width:25%}.uk-child-width-1-5>*{width:20%}.uk-child-width-1-6>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto>*{width:auto}.uk-child-width-expand>*{width:1px}.uk-child-width-expand>:not([class*='uk-width']){flex:1;min-width:0;flex-basis:1px}@media (min-width: 640px){.uk-child-width-1-1\@s>*{width:100%}.uk-child-width-1-2\@s>*{width:50%}.uk-child-width-1-3\@s>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@s>*{width:25%}.uk-child-width-1-5\@s>*{width:20%}.uk-child-width-1-6\@s>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@s>*{width:auto}.uk-child-width-expand\@s>*{width:1px}.uk-child-width-expand\@s>:not([class*='uk-width']){flex:1;min-width:0;flex-basis:1px}}@media (min-width: 960px){.uk-child-width-1-1\@m>*{width:100%}.uk-child-width-1-2\@m>*{width:50%}.uk-child-width-1-3\@m>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@m>*{width:25%}.uk-child-width-1-5\@m>*{width:20%}.uk-child-width-1-6\@m>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@m>*{width:auto}.uk-child-width-expand\@m>*{width:1px}.uk-child-width-expand\@m>:not([class*='uk-width']){flex:1;min-width:0;flex-basis:1px}}@media (min-width: 1200px){.uk-child-width-1-1\@l>*{width:100%}.uk-child-width-1-2\@l>*{width:50%}.uk-child-width-1-3\@l>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@l>*{width:25%}.uk-child-width-1-5\@l>*{width:20%}.uk-child-width-1-6\@l>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@l>*{width:auto}.uk-child-width-expand\@l>*{width:1px}.uk-child-width-expand\@l>:not([class*='uk-width']){flex:1;min-width:0;flex-basis:1px}}@media (min-width: 1600px){.uk-child-width-1-1\@xl>*{width:100%}.uk-child-width-1-2\@xl>*{width:50%}.uk-child-width-1-3\@xl>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@xl>*{width:25%}.uk-child-width-1-5\@xl>*{width:20%}.uk-child-width-1-6\@xl>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@xl>*{width:auto}.uk-child-width-expand\@xl>*{width:1px}.uk-child-width-expand\@xl>:not([class*='uk-width']){flex:1;min-width:0;flex-basis:1px}}[class*='uk-width']{box-sizing:border-box;width:100%;max-width:100%}.uk-width-1-2{width:50%}.uk-width-1-3{width:calc(100% * 1 / 3.001)}.uk-width-2-3{width:calc(100% * 2 / 3.001)}.uk-width-1-4{width:25%}.uk-width-3-4{width:75%}.uk-width-1-5{width:20%}.uk-width-2-5{width:40%}.uk-width-3-5{width:60%}.uk-width-4-5{width:80%}.uk-width-1-6{width:calc(100% * 1 / 6.001)}.uk-width-5-6{width:calc(100% * 5 / 6.001)}.uk-width-small{width:150px}.uk-width-medium{width:300px}.uk-width-large{width:450px}.uk-width-xlarge{width:600px}.uk-width-xxlarge{width:750px}.uk-width-auto{width:auto}.uk-width-expand{width:1px;flex:1;min-width:0;flex-basis:1px}@media (min-width: 640px){.uk-width-1-1\@s{width:100%}.uk-width-1-2\@s{width:50%}.uk-width-1-3\@s{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@s{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@s{width:25%}.uk-width-3-4\@s{width:75%}.uk-width-1-5\@s{width:20%}.uk-width-2-5\@s{width:40%}.uk-width-3-5\@s{width:60%}.uk-width-4-5\@s{width:80%}.uk-width-1-6\@s{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@s{width:calc(100% * 5 / 6.001)}.uk-width-small\@s{width:150px}.uk-width-medium\@s{width:300px}.uk-width-large\@s{width:450px}.uk-width-xlarge\@s{width:600px}.uk-width-xxlarge\@s{width:750px}.uk-width-auto\@s{width:auto}.uk-width-expand\@s{width:1px;flex:1;min-width:0;flex-basis:1px}}@media (min-width: 960px){.uk-width-1-1\@m{width:100%}.uk-width-1-2\@m{width:50%}.uk-width-1-3\@m{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@m{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@m{width:25%}.uk-width-3-4\@m{width:75%}.uk-width-1-5\@m{width:20%}.uk-width-2-5\@m{width:40%}.uk-width-3-5\@m{width:60%}.uk-width-4-5\@m{width:80%}.uk-width-1-6\@m{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@m{width:calc(100% * 5 / 6.001)}.uk-width-small\@m{width:150px}.uk-width-medium\@m{width:300px}.uk-width-large\@m{width:450px}.uk-width-xlarge\@m{width:600px}.uk-width-xxlarge\@m{width:750px}.uk-width-auto\@m{width:auto}.uk-width-expand\@m{width:1px;flex:1;min-width:0;flex-basis:1px}}@media (min-width: 1200px){.uk-width-1-1\@l{width:100%}.uk-width-1-2\@l{width:50%}.uk-width-1-3\@l{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@l{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@l{width:25%}.uk-width-3-4\@l{width:75%}.uk-width-1-5\@l{width:20%}.uk-width-2-5\@l{width:40%}.uk-width-3-5\@l{width:60%}.uk-width-4-5\@l{width:80%}.uk-width-1-6\@l{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@l{width:calc(100% * 5 / 6.001)}.uk-width-small\@l{width:150px}.uk-width-medium\@l{width:300px}.uk-width-large\@l{width:450px}.uk-width-xlarge\@l{width:600px}.uk-width-xxlarge\@l{width:750px}.uk-width-auto\@l{width:auto}.uk-width-expand\@l{width:1px;flex:1;min-width:0;flex-basis:1px}}@media (min-width: 1600px){.uk-width-1-1\@xl{width:100%}.uk-width-1-2\@xl{width:50%}.uk-width-1-3\@xl{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@xl{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@xl{width:25%}.uk-width-3-4\@xl{width:75%}.uk-width-1-5\@xl{width:20%}.uk-width-2-5\@xl{width:40%}.uk-width-3-5\@xl{width:60%}.uk-width-4-5\@xl{width:80%}.uk-width-1-6\@xl{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@xl{width:calc(100% * 5 / 6.001)}.uk-width-small\@xl{width:150px}.uk-width-medium\@xl{width:300px}.uk-width-large\@xl{width:450px}.uk-width-xlarge\@xl{width:600px}.uk-width-xxlarge\@xl{width:750px}.uk-width-auto\@xl{width:auto}.uk-width-expand\@xl{width:1px;flex:1;min-width:0;flex-basis:1px}}[class*='uk-height']{box-sizing:border-box}.uk-height-1-1{height:100%}.uk-height-viewport{min-height:100vh}.uk-height-small{height:150px}.uk-height-medium{height:300px}.uk-height-large{height:450px}.uk-height-max-small{max-height:150px}.uk-height-max-medium{max-height:300px}.uk-height-max-large{max-height:450px}.uk-text-lead{font-size:1.5rem;line-height:1.5;color:#333}.uk-text-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-text-meta a{color:#999}.uk-text-meta a:hover{color:#666;text-decoration:none}.uk-text-small{font-size:.875rem;line-height:1.5}.uk-text-large{font-size:1.5rem;line-height:1.5}.uk-text-bold{font-weight:bolder}.uk-text-uppercase{text-transform:uppercase !important}.uk-text-capitalize{text-transform:capitalize !important}.uk-text-lowercase{text-transform:lowercase !important}.uk-text-muted{color:#999 !important}.uk-text-primary{color:#1e87f0 !important}.uk-text-success{color:#32d296 !important}.uk-text-warning{color:#faa05a !important}.uk-text-danger{color:#f0506e !important}.uk-text-background{-webkit-background-clip:text;-webkit-text-fill-color:transparent;display:inline-block;color:#1e87f0 !important}@supports (-webkit-background-clip: text){.uk-text-background{background-color:#1e87f0}}.uk-text-left{text-align:left !important}.uk-text-right{text-align:right !important}.uk-text-center{text-align:center !important}.uk-text-justify{text-align:justify !important}@media (min-width: 640px){.uk-text-left\@s{text-align:left !important}.uk-text-right\@s{text-align:right !important}.uk-text-center\@s{text-align:center !important}}@media (min-width: 960px){.uk-text-left\@m{text-align:left !important}.uk-text-right\@m{text-align:right !important}.uk-text-center\@m{text-align:center !important}}@media (min-width: 1200px){.uk-text-left\@l{text-align:left !important}.uk-text-right\@l{text-align:right !important}.uk-text-center\@l{text-align:center !important}}@media (min-width: 1600px){.uk-text-left\@xl{text-align:left !important}.uk-text-right\@xl{text-align:right !important}.uk-text-center\@xl{text-align:center !important}}.uk-text-top{vertical-align:top !important}.uk-text-middle{vertical-align:middle !important}.uk-text-bottom{vertical-align:bottom !important}.uk-text-baseline{vertical-align:baseline !important}.uk-text-nowrap{white-space:nowrap}.uk-text-truncate{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}th.uk-text-truncate,td.uk-text-truncate{max-width:0}.uk-text-break{overflow-wrap:break-word;word-wrap:break-word}th.uk-text-break,td.uk-text-break{word-break:break-all}[class*='uk-column-']{column-gap:30px}@media (min-width: 1200px){[class*='uk-column-']{column-gap:40px}}[class*='uk-column-'] img{transform:translate3d(0, 0, 0)}.uk-column-divider{column-rule:1px solid #e5e5e5;column-gap:60px}@media (min-width: 1200px){.uk-column-divider{column-gap:80px}}.uk-column-1-2{column-count:2}.uk-column-1-3{column-count:3}.uk-column-1-4{column-count:4}.uk-column-1-5{column-count:5}.uk-column-1-6{column-count:6}@media (min-width: 640px){.uk-column-1-2\@s{column-count:2}.uk-column-1-3\@s{column-count:3}.uk-column-1-4\@s{column-count:4}.uk-column-1-5\@s{column-count:5}.uk-column-1-6\@s{column-count:6}}@media (min-width: 960px){.uk-column-1-2\@m{column-count:2}.uk-column-1-3\@m{column-count:3}.uk-column-1-4\@m{column-count:4}.uk-column-1-5\@m{column-count:5}.uk-column-1-6\@m{column-count:6}}@media (min-width: 1200px){.uk-column-1-2\@l{column-count:2}.uk-column-1-3\@l{column-count:3}.uk-column-1-4\@l{column-count:4}.uk-column-1-5\@l{column-count:5}.uk-column-1-6\@l{column-count:6}}@media (min-width: 1600px){.uk-column-1-2\@xl{column-count:2}.uk-column-1-3\@xl{column-count:3}.uk-column-1-4\@xl{column-count:4}.uk-column-1-5\@xl{column-count:5}.uk-column-1-6\@xl{column-count:6}}.uk-column-span{column-span:all}.uk-cover{max-width:none;position:absolute;left:50%;top:50%;transform:translate(-50%, -50%)}iframe.uk-cover{pointer-events:none}.uk-cover-container{overflow:hidden;position:relative}.uk-background-default{background-color:#fff}.uk-background-muted{background-color:#f8f8f8}.uk-background-primary{background-color:#1e87f0}.uk-background-secondary{background-color:#222}.uk-background-cover,.uk-background-contain{background-position:50% 50%;background-repeat:no-repeat}.uk-background-cover{background-size:cover}.uk-background-contain{background-size:contain}.uk-background-top-left{background-position:0 0}.uk-background-top-center{background-position:50% 0}.uk-background-top-right{background-position:100% 0}.uk-background-center-left{background-position:0 50%}.uk-background-center-center{background-position:50% 50%}.uk-background-center-right{background-position:100% 50%}.uk-background-bottom-left{background-position:0 100%}.uk-background-bottom-center{background-position:50% 100%}.uk-background-bottom-right{background-position:100% 100%}.uk-background-norepeat{background-repeat:no-repeat}.uk-background-fixed{background-attachment:fixed;backface-visibility:hidden}@media (pointer: coarse){.uk-background-fixed{background-attachment:scroll}}@media (max-width: 639px){.uk-background-image\@s{background-image:none !important}}@media (max-width: 959px){.uk-background-image\@m{background-image:none !important}}@media (max-width: 1199px){.uk-background-image\@l{background-image:none !important}}@media (max-width: 1599px){.uk-background-image\@xl{background-image:none !important}}.uk-background-blend-multiply{background-blend-mode:multiply}.uk-background-blend-screen{background-blend-mode:screen}.uk-background-blend-overlay{background-blend-mode:overlay}.uk-background-blend-darken{background-blend-mode:darken}.uk-background-blend-lighten{background-blend-mode:lighten}.uk-background-blend-color-dodge{background-blend-mode:color-dodge}.uk-background-blend-color-burn{background-blend-mode:color-burn}.uk-background-blend-hard-light{background-blend-mode:hard-light}.uk-background-blend-soft-light{background-blend-mode:soft-light}.uk-background-blend-difference{background-blend-mode:difference}.uk-background-blend-exclusion{background-blend-mode:exclusion}.uk-background-blend-hue{background-blend-mode:hue}.uk-background-blend-saturation{background-blend-mode:saturation}.uk-background-blend-color{background-blend-mode:color}.uk-background-blend-luminosity{background-blend-mode:luminosity}[class*='uk-align']{display:block;margin-bottom:30px}*+[class*='uk-align']{margin-top:30px}.uk-align-center{margin-left:auto;margin-right:auto}.uk-align-left{margin-top:0;margin-right:30px;float:left}.uk-align-right{margin-top:0;margin-left:30px;float:right}@media (min-width: 640px){.uk-align-left\@s{margin-top:0;margin-right:30px;float:left}.uk-align-right\@s{margin-top:0;margin-left:30px;float:right}}@media (min-width: 960px){.uk-align-left\@m{margin-top:0;margin-right:30px;float:left}.uk-align-right\@m{margin-top:0;margin-left:30px;float:right}}@media (min-width: 1200px){.uk-align-left\@l{margin-top:0;float:left}.uk-align-right\@l{margin-top:0;float:right}.uk-align-left,.uk-align-left\@s,.uk-align-left\@m,.uk-align-left\@l{margin-right:40px}.uk-align-right,.uk-align-right\@s,.uk-align-right\@m,.uk-align-right\@l{margin-left:40px}}@media (min-width: 1600px){.uk-align-left\@xl{margin-top:0;margin-right:40px;float:left}.uk-align-right\@xl{margin-top:0;margin-left:40px;float:right}}.uk-svg,.uk-svg:not(.uk-preserve) [fill*='#']:not(.uk-preserve),.uk-svg:not(.uk-preserve) [FILL*='#']:not(.uk-preserve){fill:currentcolor}.uk-svg:not(.uk-preserve) [stroke*='#']:not(.uk-preserve),.uk-svg:not(.uk-preserve) [STROKE*='#']:not(.uk-preserve){stroke:currentcolor}.uk-svg{transform:translate(0, 0)}.uk-panel{position:relative;box-sizing:border-box}.uk-panel::before,.uk-panel::after{content:"";display:table}.uk-panel::after{clear:both}.uk-panel>:last-child{margin-bottom:0}.uk-panel-scrollable{height:170px;padding:10px;border:1px solid #e5e5e5;overflow:auto;-webkit-overflow-scrolling:touch;resize:both}.uk-clearfix::before{content:"";display:table-cell}.uk-clearfix::after{content:"";display:table;clear:both}.uk-float-left{float:left}.uk-float-right{float:right}[class*='uk-float-']{max-width:100%}.uk-overflow-hidden{overflow:hidden}.uk-overflow-auto{overflow:auto;-webkit-overflow-scrolling:touch}.uk-overflow-auto>:last-child{margin-bottom:0}.uk-resize{resize:both}.uk-resize-vertical{resize:vertical}.uk-display-block{display:block !important}.uk-display-inline{display:inline !important}.uk-display-inline-block{display:inline-block !important}[class*='uk-inline']{display:inline-block;position:relative;max-width:100%;vertical-align:middle;-webkit-backface-visibility:hidden}.uk-inline-clip{overflow:hidden}.uk-preserve-width,.uk-preserve-width audio,.uk-preserve-width canvas,.uk-preserve-width img,.uk-preserve-width svg,.uk-preserve-width video{max-width:none}.uk-responsive-width,.uk-responsive-height{box-sizing:border-box}.uk-responsive-width{max-width:100% !important;height:auto}.uk-responsive-height{max-height:100%;width:auto;max-width:none}.uk-border-circle{border-radius:50%}.uk-border-rounded{border-radius:5px}.uk-inline-clip[class*='uk-border-']{-webkit-transform:translateZ(0)}.uk-box-shadow-small{box-shadow:0 2px 8px rgba(0,0,0,0.08)}.uk-box-shadow-medium{box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-box-shadow-large{box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-box-shadow-xlarge{box-shadow:0 28px 50px rgba(0,0,0,0.16)}[class*='uk-box-shadow-hover']{transition:box-shadow .1s ease-in-out}.uk-box-shadow-hover-small:hover{box-shadow:0 2px 8px rgba(0,0,0,0.08)}.uk-box-shadow-hover-medium:hover{box-shadow:0 5px 15px rgba(0,0,0,0.08)}.uk-box-shadow-hover-large:hover{box-shadow:0 14px 25px rgba(0,0,0,0.16)}.uk-box-shadow-hover-xlarge:hover{box-shadow:0 28px 50px rgba(0,0,0,0.16)}@supports (filter: blur(0)){.uk-box-shadow-bottom{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-box-shadow-bottom::before{content:'';position:absolute;bottom:-30px;left:0;right:0;height:30px;border-radius:100%;background:#444;filter:blur(20px)}.uk-box-shadow-bottom>*{position:relative}}.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{display:block;margin-right:10px;float:left;font-size:4.5em;line-height:1;margin-bottom:-2px}@-moz-document url-prefix(){.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{margin-top:1.1%}}@supports (-ms-ime-align: auto){.uk-dropcap>p:first-of-type::first-letter{font-size:1em}}.uk-logo{font-size:1.5rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;color:#666;text-decoration:none}.uk-logo:hover,.uk-logo:focus{color:#666;outline:none;text-decoration:none}.uk-logo-inverse{display:none}.uk-disabled{pointer-events:none}.uk-drag,.uk-drag *{cursor:move}.uk-drag iframe{pointer-events:none}.uk-dragover{box-shadow:0 0 20px rgba(100,100,100,0.3)}.uk-blend-multiply{mix-blend-mode:multiply}.uk-blend-screen{mix-blend-mode:screen}.uk-blend-overlay{mix-blend-mode:overlay}.uk-blend-darken{mix-blend-mode:darken}.uk-blend-lighten{mix-blend-mode:lighten}.uk-blend-color-dodge{mix-blend-mode:color-dodge}.uk-blend-color-burn{mix-blend-mode:color-burn}.uk-blend-hard-light{mix-blend-mode:hard-light}.uk-blend-soft-light{mix-blend-mode:soft-light}.uk-blend-difference{mix-blend-mode:difference}.uk-blend-exclusion{mix-blend-mode:exclusion}.uk-blend-hue{mix-blend-mode:hue}.uk-blend-saturation{mix-blend-mode:saturation}.uk-blend-color{mix-blend-mode:color}.uk-blend-luminosity{mix-blend-mode:luminosity}.uk-transform-center{transform:translate(-50%, -50%)}.uk-transform-origin-top-left{transform-origin:0 0}.uk-transform-origin-top-center{transform-origin:50% 0}.uk-transform-origin-top-right{transform-origin:100% 0}.uk-transform-origin-center-left{transform-origin:0 50%}.uk-transform-origin-center-right{transform-origin:100% 50%}.uk-transform-origin-bottom-left{transform-origin:0 100%}.uk-transform-origin-bottom-center{transform-origin:50% 100%}.uk-transform-origin-bottom-right{transform-origin:100% 100%}.uk-flex{display:flex}.uk-flex-inline{display:inline-flex}.uk-flex::before,.uk-flex::after,.uk-flex-inline::before,.uk-flex-inline::after{display:none}.uk-flex-left{justify-content:flex-start}.uk-flex-center{justify-content:center}.uk-flex-right{justify-content:flex-end}.uk-flex-between{justify-content:space-between}.uk-flex-around{justify-content:space-around}@media (min-width: 640px){.uk-flex-left\@s{justify-content:flex-start}.uk-flex-center\@s{justify-content:center}.uk-flex-right\@s{justify-content:flex-end}.uk-flex-between\@s{justify-content:space-between}.uk-flex-around\@s{justify-content:space-around}}@media (min-width: 960px){.uk-flex-left\@m{justify-content:flex-start}.uk-flex-center\@m{justify-content:center}.uk-flex-right\@m{justify-content:flex-end}.uk-flex-between\@m{justify-content:space-between}.uk-flex-around\@m{justify-content:space-around}}@media (min-width: 1200px){.uk-flex-left\@l{justify-content:flex-start}.uk-flex-center\@l{justify-content:center}.uk-flex-right\@l{justify-content:flex-end}.uk-flex-between\@l{justify-content:space-between}.uk-flex-around\@l{justify-content:space-around}}@media (min-width: 1600px){.uk-flex-left\@xl{justify-content:flex-start}.uk-flex-center\@xl{justify-content:center}.uk-flex-right\@xl{justify-content:flex-end}.uk-flex-between\@xl{justify-content:space-between}.uk-flex-around\@xl{justify-content:space-around}}.uk-flex-stretch{align-items:stretch}.uk-flex-top{align-items:flex-start}.uk-flex-middle{align-items:center}.uk-flex-bottom{align-items:flex-end}.uk-flex-row{flex-direction:row}.uk-flex-row-reverse{flex-direction:row-reverse}.uk-flex-column{flex-direction:column}.uk-flex-column-reverse{flex-direction:column-reverse}.uk-flex-nowrap{flex-wrap:nowrap}.uk-flex-wrap{flex-wrap:wrap}.uk-flex-wrap-reverse{flex-wrap:wrap-reverse}.uk-flex-wrap-stretch{align-content:stretch}.uk-flex-wrap-top{align-content:flex-start}.uk-flex-wrap-middle{align-content:center}.uk-flex-wrap-bottom{align-content:flex-end}.uk-flex-wrap-between{align-content:space-between}.uk-flex-wrap-around{align-content:space-around}.uk-flex-first{order:-1}.uk-flex-last{order:99}@media (min-width: 640px){.uk-flex-first\@s{order:-1}.uk-flex-last\@s{order:99}}@media (min-width: 960px){.uk-flex-first\@m{order:-1}.uk-flex-last\@m{order:99}}@media (min-width: 1200px){.uk-flex-first\@l{order:-1}.uk-flex-last\@l{order:99}}@media (min-width: 1600px){.uk-flex-first\@xl{order:-1}.uk-flex-last\@xl{order:99}}.uk-flex-none{flex:none}.uk-flex-auto{flex:auto}.uk-flex-1{flex:1}.uk-margin{margin-bottom:20px}*+.uk-margin{margin-top:20px !important}.uk-margin-top{margin-top:20px !important}.uk-margin-bottom{margin-bottom:20px !important}.uk-margin-left{margin-left:20px !important}.uk-margin-right{margin-right:20px !important}.uk-margin-small{margin-bottom:10px}*+.uk-margin-small{margin-top:10px !important}.uk-margin-small-top{margin-top:10px !important}.uk-margin-small-bottom{margin-bottom:10px !important}.uk-margin-small-left{margin-left:10px !important}.uk-margin-small-right{margin-right:10px !important}.uk-margin-medium{margin-bottom:40px}*+.uk-margin-medium{margin-top:40px !important}.uk-margin-medium-top{margin-top:40px !important}.uk-margin-medium-bottom{margin-bottom:40px !important}.uk-margin-medium-left{margin-left:40px !important}.uk-margin-medium-right{margin-right:40px !important}.uk-margin-large{margin-bottom:40px}*+.uk-margin-large{margin-top:40px !important}.uk-margin-large-top{margin-top:40px !important}.uk-margin-large-bottom{margin-bottom:40px !important}.uk-margin-large-left{margin-left:40px !important}.uk-margin-large-right{margin-right:40px !important}@media (min-width: 1200px){.uk-margin-large{margin-bottom:70px}*+.uk-margin-large{margin-top:70px !important}.uk-margin-large-top{margin-top:70px !important}.uk-margin-large-bottom{margin-bottom:70px !important}.uk-margin-large-left{margin-left:70px !important}.uk-margin-large-right{margin-right:70px !important}}.uk-margin-xlarge{margin-bottom:70px}*+.uk-margin-xlarge{margin-top:70px !important}.uk-margin-xlarge-top{margin-top:70px !important}.uk-margin-xlarge-bottom{margin-bottom:70px !important}.uk-margin-xlarge-left{margin-left:70px !important}.uk-margin-xlarge-right{margin-right:70px !important}@media (min-width: 1200px){.uk-margin-xlarge{margin-bottom:140px}*+.uk-margin-xlarge{margin-top:140px !important}.uk-margin-xlarge-top{margin-top:140px !important}.uk-margin-xlarge-bottom{margin-bottom:140px !important}.uk-margin-xlarge-left{margin-left:140px !important}.uk-margin-xlarge-right{margin-right:140px !important}}.uk-margin-remove{margin:0 !important}.uk-margin-remove-top{margin-top:0 !important}.uk-margin-remove-bottom{margin-bottom:0 !important}.uk-margin-remove-left{margin-left:0 !important}.uk-margin-remove-right{margin-right:0 !important}.uk-margin-remove-vertical{margin-top:0 !important;margin-bottom:0 !important}.uk-margin-remove-adjacent+*{margin-top:0 !important}.uk-margin-auto{margin-left:auto !important;margin-right:auto !important}.uk-margin-auto-top{margin-top:auto !important}.uk-margin-auto-bottom{margin-bottom:auto !important}.uk-margin-auto-left{margin-left:auto !important}.uk-margin-auto-right{margin-right:auto !important}.uk-margin-auto-vertical{margin-top:auto !important;margin-bottom:auto !important}.uk-padding{padding:30px}@media (min-width: 1200px){.uk-padding{padding:40px}}.uk-padding-small{padding:15px}.uk-padding-large{padding:30px}@media (min-width: 1200px){.uk-padding-large{padding:70px}}.uk-padding-remove{padding:0 !important}.uk-padding-remove-top{padding-top:0 !important}.uk-padding-remove-bottom{padding-bottom:0 !important}.uk-padding-remove-left{padding-left:0 !important}.uk-padding-remove-right{padding-right:0 !important}.uk-padding-remove-vertical{padding-top:0 !important;padding-bottom:0 !important}.uk-padding-remove-horizontal{padding-left:0 !important;padding-right:0 !important}[class*='uk-position-top'],[class*='uk-position-bottom'],[class*='uk-position-left'],[class*='uk-position-right'],[class*='uk-position-center']{position:absolute !important}.uk-position-top{top:0;left:0;right:0}.uk-position-bottom{bottom:0;left:0;right:0}.uk-position-left{top:0;bottom:0;left:0}.uk-position-right{top:0;bottom:0;right:0}.uk-position-top-left{top:0;left:0}.uk-position-top-right{top:0;right:0}.uk-position-bottom-left{bottom:0;left:0}.uk-position-bottom-right{bottom:0;right:0}.uk-position-center{top:50%;left:50%;transform:translate(-50%, -50%);display:table;width:-moz-max-content;max-width:100%;box-sizing:border-box}[class*='uk-position-center-left'],[class*='uk-position-center-right']{top:50%;transform:translateY(-50%)}.uk-position-center-left{left:0}.uk-position-center-right{right:0}.uk-position-center-left-out{right:100%;width:max-content}.uk-position-center-right-out{left:100%;width:max-content}.uk-position-top-center,.uk-position-bottom-center{left:50%;transform:translateX(-50%);display:table;width:-moz-max-content;max-width:100%;box-sizing:border-box}.uk-position-top-center{top:0}.uk-position-bottom-center{bottom:0}.uk-position-cover{position:absolute;top:0;bottom:0;left:0;right:0}.uk-position-relative{position:relative !important}.uk-position-absolute{position:absolute !important}.uk-position-fixed{position:fixed !important}.uk-position-z-index{z-index:1}.uk-position-small{margin:15px}.uk-position-small.uk-position-center{transform:translate(-50%, -50%) translate(-15px, -15px)}.uk-position-small[class*='uk-position-center-left'],.uk-position-small[class*='uk-position-center-right']{transform:translateY(-50%) translateY(-15px)}.uk-position-small.uk-position-top-center,.uk-position-small.uk-position-bottom-center{transform:translateX(-50%) translateX(-15px)}.uk-position-medium{margin:30px}.uk-position-medium.uk-position-center{transform:translate(-50%, -50%) translate(-30px, -30px)}.uk-position-medium[class*='uk-position-center-left'],.uk-position-medium[class*='uk-position-center-right']{transform:translateY(-50%) translateY(-30px)}.uk-position-medium.uk-position-top-center,.uk-position-medium.uk-position-bottom-center{transform:translateX(-50%) translateX(-30px)}.uk-position-large{margin:30px}.uk-position-large.uk-position-center{transform:translate(-50%, -50%) translate(-30px, -30px)}.uk-position-large[class*='uk-position-center-left'],.uk-position-large[class*='uk-position-center-right']{transform:translateY(-50%) translateY(-30px)}.uk-position-large.uk-position-top-center,.uk-position-large.uk-position-bottom-center{transform:translateX(-50%) translateX(-30px)}@media (min-width: 1200px){.uk-position-large{margin:50px}.uk-position-large.uk-position-center{transform:translate(-50%, -50%) translate(-50px, -50px)}.uk-position-large[class*='uk-position-center-left'],.uk-position-large[class*='uk-position-center-right']{transform:translateY(-50%) translateY(-50px)}.uk-position-large.uk-position-top-center,.uk-position-large.uk-position-bottom-center{transform:translateX(-50%) translateX(-50px)}}.uk-transition-fade,[class*='uk-transition-scale'],[class*='uk-transition-slide']{transition:.3s ease-out;transition-property:opacity, transform, filter}.uk-transition-toggle:focus{outline:none}.uk-transition-fade{opacity:0}.uk-transition-toggle:hover [class*='uk-transition-fade'],.uk-transition-toggle.uk-hover [class*='uk-transition-fade'],.uk-transition-toggle:focus [class*='uk-transition-fade'],.uk-transition-active.uk-active [class*='uk-transition-fade']{opacity:1}[class*='uk-transition-scale']{opacity:0}.uk-transition-scale-up{transform:scale3d(1, 1, 1)}.uk-transition-scale-down{transform:scale3d(1.1, 1.1, 1)}.uk-transition-toggle:hover .uk-transition-scale-up,.uk-transition-toggle.uk-hover .uk-transition-scale-up,.uk-transition-toggle:focus .uk-transition-scale-up,.uk-transition-active.uk-active .uk-transition-scale-up{opacity:1;transform:scale3d(1.1, 1.1, 1)}.uk-transition-toggle:hover .uk-transition-scale-down,.uk-transition-toggle.uk-hover .uk-transition-scale-down,.uk-transition-toggle:focus .uk-transition-scale-down,.uk-transition-active.uk-active .uk-transition-scale-down{opacity:1;transform:scale3d(1, 1, 1)}[class*='uk-transition-slide']{opacity:0}.uk-transition-slide-top{transform:translateY(-100%)}.uk-transition-slide-bottom{transform:translateY(100%)}.uk-transition-slide-left{transform:translateX(-100%)}.uk-transition-slide-right{transform:translateX(100%)}.uk-transition-slide-top-small{transform:translateY(-10px)}.uk-transition-slide-bottom-small{transform:translateY(10px)}.uk-transition-slide-left-small{transform:translateX(-10px)}.uk-transition-slide-right-small{transform:translateX(10px)}.uk-transition-slide-top-medium{transform:translateY(-50px)}.uk-transition-slide-bottom-medium{transform:translateY(50px)}.uk-transition-slide-left-medium{transform:translateX(-50px)}.uk-transition-slide-right-medium{transform:translateX(50px)}.uk-transition-toggle:hover [class*='uk-transition-slide'],.uk-transition-toggle.uk-hover [class*='uk-transition-slide'],.uk-transition-toggle:focus [class*='uk-transition-slide'],.uk-transition-active.uk-active [class*='uk-transition-slide']{opacity:1;transform:translateX(0) translateY(0)}.uk-transition-opaque{opacity:1}.uk-transition-slow{transition-duration:.7s}[hidden],.uk-hidden{display:none !important}@media (min-width: 640px){.uk-hidden\@s{display:none !important}}@media (min-width: 960px){.uk-hidden\@m{display:none !important}}@media (min-width: 1200px){.uk-hidden\@l{display:none !important}}@media (min-width: 1600px){.uk-hidden\@xl{display:none !important}}@media (max-width: 639px){.uk-visible\@s{display:none !important}}@media (max-width: 959px){.uk-visible\@m{display:none !important}}@media (max-width: 1199px){.uk-visible\@l{display:none !important}}@media (max-width: 1599px){.uk-visible\@xl{display:none !important}}.uk-invisible{visibility:hidden !important}.uk-visible-toggle:not(:hover):not(.uk-hover) .uk-hidden-hover:not(:focus){position:absolute !important;width:0 !important;height:0 !important;padding:0 !important;margin:0 !important;overflow:hidden !important}.uk-visible-toggle:not(:hover):not(.uk-hover) .uk-invisible-hover:not(:focus){opacity:0 !important}@media (pointer: coarse){.uk-hidden-touch{display:none !important}}.uk-hidden-notouch{display:none !important}@media (pointer: coarse){.uk-hidden-notouch{display:block !important}}.uk-light,.uk-section-primary:not(.uk-preserve-color),.uk-section-secondary:not(.uk-preserve-color),.uk-tile-primary:not(.uk-preserve-color),.uk-tile-secondary:not(.uk-preserve-color),.uk-card-primary.uk-card-body,.uk-card-primary>:not([class*='uk-card-media']),.uk-card-secondary.uk-card-body,.uk-card-secondary>:not([class*='uk-card-media']),.uk-overlay-primary,.uk-offcanvas-bar{color:rgba(255,255,255,0.7)}.uk-light a,.uk-section-primary:not(.uk-preserve-color) a,.uk-section-secondary:not(.uk-preserve-color) a,.uk-tile-primary:not(.uk-preserve-color) a,.uk-tile-secondary:not(.uk-preserve-color) a,.uk-card-primary.uk-card-body a,.uk-card-primary>:not([class*='uk-card-media']) a,.uk-card-secondary.uk-card-body a,.uk-card-secondary>:not([class*='uk-card-media']) a,.uk-overlay-primary a,.uk-offcanvas-bar a,.uk-light .uk-link,.uk-section-primary:not(.uk-preserve-color) .uk-link,.uk-section-secondary:not(.uk-preserve-color) .uk-link,.uk-tile-primary:not(.uk-preserve-color) .uk-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-link,.uk-card-primary.uk-card-body .uk-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-link,.uk-card-secondary.uk-card-body .uk-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link,.uk-overlay-primary .uk-link,.uk-offcanvas-bar .uk-link{color:#fff}.uk-light a:hover,.uk-section-primary:not(.uk-preserve-color) a:hover,.uk-section-secondary:not(.uk-preserve-color) a:hover,.uk-tile-primary:not(.uk-preserve-color) a:hover,.uk-tile-secondary:not(.uk-preserve-color) a:hover,.uk-card-primary.uk-card-body a:hover,.uk-card-primary>:not([class*='uk-card-media']) a:hover,.uk-card-secondary.uk-card-body a:hover,.uk-card-secondary>:not([class*='uk-card-media']) a:hover,.uk-overlay-primary a:hover,.uk-offcanvas-bar a:hover,.uk-light .uk-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-card-primary.uk-card-body .uk-link:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link:hover,.uk-card-secondary.uk-card-body .uk-link:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link:hover,.uk-overlay-primary .uk-link:hover,.uk-offcanvas-bar .uk-link:hover{color:#fff}.uk-light :not(pre)>code,.uk-section-primary:not(.uk-preserve-color) :not(pre)>code,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-card-primary.uk-card-body :not(pre)>code,.uk-card-primary>:not([class*='uk-card-media']) :not(pre)>code,.uk-card-secondary.uk-card-body :not(pre)>code,.uk-card-secondary>:not([class*='uk-card-media']) :not(pre)>code,.uk-overlay-primary :not(pre)>code,.uk-offcanvas-bar :not(pre)>code,.uk-light :not(pre)>kbd,.uk-section-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-card-primary.uk-card-body :not(pre)>kbd,.uk-card-primary>:not([class*='uk-card-media']) :not(pre)>kbd,.uk-card-secondary.uk-card-body :not(pre)>kbd,.uk-card-secondary>:not([class*='uk-card-media']) :not(pre)>kbd,.uk-overlay-primary :not(pre)>kbd,.uk-offcanvas-bar :not(pre)>kbd,.uk-light :not(pre)>samp,.uk-section-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>samp,.uk-card-primary.uk-card-body :not(pre)>samp,.uk-card-primary>:not([class*='uk-card-media']) :not(pre)>samp,.uk-card-secondary.uk-card-body :not(pre)>samp,.uk-card-secondary>:not([class*='uk-card-media']) :not(pre)>samp,.uk-overlay-primary :not(pre)>samp,.uk-offcanvas-bar :not(pre)>samp{color:rgba(255,255,255,0.7);background:rgba(255,255,255,0.1)}.uk-light em,.uk-section-primary:not(.uk-preserve-color) em,.uk-section-secondary:not(.uk-preserve-color) em,.uk-tile-primary:not(.uk-preserve-color) em,.uk-tile-secondary:not(.uk-preserve-color) em,.uk-card-primary.uk-card-body em,.uk-card-primary>:not([class*='uk-card-media']) em,.uk-card-secondary.uk-card-body em,.uk-card-secondary>:not([class*='uk-card-media']) em,.uk-overlay-primary em,.uk-offcanvas-bar em{color:#fff}.uk-light h1,.uk-section-primary:not(.uk-preserve-color) h1,.uk-section-secondary:not(.uk-preserve-color) h1,.uk-tile-primary:not(.uk-preserve-color) h1,.uk-tile-secondary:not(.uk-preserve-color) h1,.uk-card-primary.uk-card-body h1,.uk-card-primary>:not([class*='uk-card-media']) h1,.uk-card-secondary.uk-card-body h1,.uk-card-secondary>:not([class*='uk-card-media']) h1,.uk-overlay-primary h1,.uk-offcanvas-bar h1,.uk-light .uk-h1,.uk-section-primary:not(.uk-preserve-color) .uk-h1,.uk-section-secondary:not(.uk-preserve-color) .uk-h1,.uk-tile-primary:not(.uk-preserve-color) .uk-h1,.uk-tile-secondary:not(.uk-preserve-color) .uk-h1,.uk-card-primary.uk-card-body .uk-h1,.uk-card-primary>:not([class*='uk-card-media']) .uk-h1,.uk-card-secondary.uk-card-body .uk-h1,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h1,.uk-overlay-primary .uk-h1,.uk-offcanvas-bar .uk-h1,.uk-light h2,.uk-section-primary:not(.uk-preserve-color) h2,.uk-section-secondary:not(.uk-preserve-color) h2,.uk-tile-primary:not(.uk-preserve-color) h2,.uk-tile-secondary:not(.uk-preserve-color) h2,.uk-card-primary.uk-card-body h2,.uk-card-primary>:not([class*='uk-card-media']) h2,.uk-card-secondary.uk-card-body h2,.uk-card-secondary>:not([class*='uk-card-media']) h2,.uk-overlay-primary h2,.uk-offcanvas-bar h2,.uk-light .uk-h2,.uk-section-primary:not(.uk-preserve-color) .uk-h2,.uk-section-secondary:not(.uk-preserve-color) .uk-h2,.uk-tile-primary:not(.uk-preserve-color) .uk-h2,.uk-tile-secondary:not(.uk-preserve-color) .uk-h2,.uk-card-primary.uk-card-body .uk-h2,.uk-card-primary>:not([class*='uk-card-media']) .uk-h2,.uk-card-secondary.uk-card-body .uk-h2,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h2,.uk-overlay-primary .uk-h2,.uk-offcanvas-bar .uk-h2,.uk-light h3,.uk-section-primary:not(.uk-preserve-color) h3,.uk-section-secondary:not(.uk-preserve-color) h3,.uk-tile-primary:not(.uk-preserve-color) h3,.uk-tile-secondary:not(.uk-preserve-color) h3,.uk-card-primary.uk-card-body h3,.uk-card-primary>:not([class*='uk-card-media']) h3,.uk-card-secondary.uk-card-body h3,.uk-card-secondary>:not([class*='uk-card-media']) h3,.uk-overlay-primary h3,.uk-offcanvas-bar h3,.uk-light .uk-h3,.uk-section-primary:not(.uk-preserve-color) .uk-h3,.uk-section-secondary:not(.uk-preserve-color) .uk-h3,.uk-tile-primary:not(.uk-preserve-color) .uk-h3,.uk-tile-secondary:not(.uk-preserve-color) .uk-h3,.uk-card-primary.uk-card-body .uk-h3,.uk-card-primary>:not([class*='uk-card-media']) .uk-h3,.uk-card-secondary.uk-card-body .uk-h3,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h3,.uk-overlay-primary .uk-h3,.uk-offcanvas-bar .uk-h3,.uk-light h4,.uk-section-primary:not(.uk-preserve-color) h4,.uk-section-secondary:not(.uk-preserve-color) h4,.uk-tile-primary:not(.uk-preserve-color) h4,.uk-tile-secondary:not(.uk-preserve-color) h4,.uk-card-primary.uk-card-body h4,.uk-card-primary>:not([class*='uk-card-media']) h4,.uk-card-secondary.uk-card-body h4,.uk-card-secondary>:not([class*='uk-card-media']) h4,.uk-overlay-primary h4,.uk-offcanvas-bar h4,.uk-light .uk-h4,.uk-section-primary:not(.uk-preserve-color) .uk-h4,.uk-section-secondary:not(.uk-preserve-color) .uk-h4,.uk-tile-primary:not(.uk-preserve-color) .uk-h4,.uk-tile-secondary:not(.uk-preserve-color) .uk-h4,.uk-card-primary.uk-card-body .uk-h4,.uk-card-primary>:not([class*='uk-card-media']) .uk-h4,.uk-card-secondary.uk-card-body .uk-h4,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h4,.uk-overlay-primary .uk-h4,.uk-offcanvas-bar .uk-h4,.uk-light h5,.uk-section-primary:not(.uk-preserve-color) h5,.uk-section-secondary:not(.uk-preserve-color) h5,.uk-tile-primary:not(.uk-preserve-color) h5,.uk-tile-secondary:not(.uk-preserve-color) h5,.uk-card-primary.uk-card-body h5,.uk-card-primary>:not([class*='uk-card-media']) h5,.uk-card-secondary.uk-card-body h5,.uk-card-secondary>:not([class*='uk-card-media']) h5,.uk-overlay-primary h5,.uk-offcanvas-bar h5,.uk-light .uk-h5,.uk-section-primary:not(.uk-preserve-color) .uk-h5,.uk-section-secondary:not(.uk-preserve-color) .uk-h5,.uk-tile-primary:not(.uk-preserve-color) .uk-h5,.uk-tile-secondary:not(.uk-preserve-color) .uk-h5,.uk-card-primary.uk-card-body .uk-h5,.uk-card-primary>:not([class*='uk-card-media']) .uk-h5,.uk-card-secondary.uk-card-body .uk-h5,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h5,.uk-overlay-primary .uk-h5,.uk-offcanvas-bar .uk-h5,.uk-light h6,.uk-section-primary:not(.uk-preserve-color) h6,.uk-section-secondary:not(.uk-preserve-color) h6,.uk-tile-primary:not(.uk-preserve-color) h6,.uk-tile-secondary:not(.uk-preserve-color) h6,.uk-card-primary.uk-card-body h6,.uk-card-primary>:not([class*='uk-card-media']) h6,.uk-card-secondary.uk-card-body h6,.uk-card-secondary>:not([class*='uk-card-media']) h6,.uk-overlay-primary h6,.uk-offcanvas-bar h6,.uk-light .uk-h6,.uk-section-primary:not(.uk-preserve-color) .uk-h6,.uk-section-secondary:not(.uk-preserve-color) .uk-h6,.uk-tile-primary:not(.uk-preserve-color) .uk-h6,.uk-tile-secondary:not(.uk-preserve-color) .uk-h6,.uk-card-primary.uk-card-body .uk-h6,.uk-card-primary>:not([class*='uk-card-media']) .uk-h6,.uk-card-secondary.uk-card-body .uk-h6,.uk-card-secondary>:not([class*='uk-card-media']) .uk-h6,.uk-overlay-primary .uk-h6,.uk-offcanvas-bar .uk-h6{color:#fff}.uk-light blockquote,.uk-section-primary:not(.uk-preserve-color) blockquote,.uk-section-secondary:not(.uk-preserve-color) blockquote,.uk-tile-primary:not(.uk-preserve-color) blockquote,.uk-tile-secondary:not(.uk-preserve-color) blockquote,.uk-card-primary.uk-card-body blockquote,.uk-card-primary>:not([class*='uk-card-media']) blockquote,.uk-card-secondary.uk-card-body blockquote,.uk-card-secondary>:not([class*='uk-card-media']) blockquote,.uk-overlay-primary blockquote,.uk-offcanvas-bar blockquote{color:#fff}.uk-light blockquote footer,.uk-section-primary:not(.uk-preserve-color) blockquote footer,.uk-section-secondary:not(.uk-preserve-color) blockquote footer,.uk-tile-primary:not(.uk-preserve-color) blockquote footer,.uk-tile-secondary:not(.uk-preserve-color) blockquote footer,.uk-card-primary.uk-card-body blockquote footer,.uk-card-primary>:not([class*='uk-card-media']) blockquote footer,.uk-card-secondary.uk-card-body blockquote footer,.uk-card-secondary>:not([class*='uk-card-media']) blockquote footer,.uk-overlay-primary blockquote footer,.uk-offcanvas-bar blockquote footer{color:rgba(255,255,255,0.7)}.uk-light hr,.uk-section-primary:not(.uk-preserve-color) hr,.uk-section-secondary:not(.uk-preserve-color) hr,.uk-tile-primary:not(.uk-preserve-color) hr,.uk-tile-secondary:not(.uk-preserve-color) hr,.uk-card-primary.uk-card-body hr,.uk-card-primary>:not([class*='uk-card-media']) hr,.uk-card-secondary.uk-card-body hr,.uk-card-secondary>:not([class*='uk-card-media']) hr,.uk-overlay-primary hr,.uk-offcanvas-bar hr,.uk-light .uk-hr,.uk-section-primary:not(.uk-preserve-color) .uk-hr,.uk-section-secondary:not(.uk-preserve-color) .uk-hr,.uk-tile-primary:not(.uk-preserve-color) .uk-hr,.uk-tile-secondary:not(.uk-preserve-color) .uk-hr,.uk-card-primary.uk-card-body .uk-hr,.uk-card-primary>:not([class*='uk-card-media']) .uk-hr,.uk-card-secondary.uk-card-body .uk-hr,.uk-card-secondary>:not([class*='uk-card-media']) .uk-hr,.uk-overlay-primary .uk-hr,.uk-offcanvas-bar .uk-hr{border-top-color:rgba(255,255,255,0.2)}.uk-light a.uk-link-muted,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted,.uk-card-primary.uk-card-body a.uk-link-muted,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-muted,.uk-card-secondary.uk-card-body a.uk-link-muted,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-muted,.uk-overlay-primary a.uk-link-muted,.uk-offcanvas-bar a.uk-link-muted,.uk-light .uk-link-muted a,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-card-primary.uk-card-body .uk-link-muted a,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-muted a,.uk-card-secondary.uk-card-body .uk-link-muted a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-muted a,.uk-overlay-primary .uk-link-muted a,.uk-offcanvas-bar .uk-link-muted a{color:rgba(255,255,255,0.5)}.uk-light a.uk-link-muted:hover,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-card-primary.uk-card-body a.uk-link-muted:hover,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-muted:hover,.uk-card-secondary.uk-card-body a.uk-link-muted:hover,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-muted:hover,.uk-overlay-primary a.uk-link-muted:hover,.uk-offcanvas-bar a.uk-link-muted:hover,.uk-light .uk-link-muted a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-card-primary.uk-card-body .uk-link-muted a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-muted a:hover,.uk-card-secondary.uk-card-body .uk-link-muted a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-muted a:hover,.uk-overlay-primary .uk-link-muted a:hover,.uk-offcanvas-bar .uk-link-muted a:hover{color:rgba(255,255,255,0.7)}.uk-light a.uk-link-text:hover,.uk-section-primary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-card-primary.uk-card-body a.uk-link-text:hover,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-text:hover,.uk-card-secondary.uk-card-body a.uk-link-text:hover,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-text:hover,.uk-overlay-primary a.uk-link-text:hover,.uk-offcanvas-bar a.uk-link-text:hover,.uk-light .uk-link-text a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-card-primary.uk-card-body .uk-link-text a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-text a:hover,.uk-card-secondary.uk-card-body .uk-link-text a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-text a:hover,.uk-overlay-primary .uk-link-text a:hover,.uk-offcanvas-bar .uk-link-text a:hover{color:rgba(255,255,255,0.5)}.uk-light a.uk-link-heading:hover,.uk-section-primary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-card-primary.uk-card-body a.uk-link-heading:hover,.uk-card-primary>:not([class*='uk-card-media']) a.uk-link-heading:hover,.uk-card-secondary.uk-card-body a.uk-link-heading:hover,.uk-card-secondary>:not([class*='uk-card-media']) a.uk-link-heading:hover,.uk-overlay-primary a.uk-link-heading:hover,.uk-offcanvas-bar a.uk-link-heading:hover,.uk-light .uk-link-heading a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-card-primary.uk-card-body .uk-link-heading a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-link-heading a:hover,.uk-card-secondary.uk-card-body .uk-link-heading a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-link-heading a:hover,.uk-overlay-primary .uk-link-heading a:hover,.uk-offcanvas-bar .uk-link-heading a:hover{color:#fff}.uk-light .uk-heading-divider,.uk-section-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-divider,.uk-card-primary.uk-card-body .uk-heading-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-divider,.uk-card-secondary.uk-card-body .uk-heading-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-divider,.uk-overlay-primary .uk-heading-divider,.uk-offcanvas-bar .uk-heading-divider{border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-heading-bullet::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-card-primary.uk-card-body .uk-heading-bullet::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-bullet::before,.uk-card-secondary.uk-card-body .uk-heading-bullet::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-bullet::before,.uk-overlay-primary .uk-heading-bullet::before,.uk-offcanvas-bar .uk-heading-bullet::before{border-left-color:rgba(255,255,255,0.2)}.uk-light .uk-heading-line>::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-card-primary.uk-card-body .uk-heading-line>::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-line>::before,.uk-card-secondary.uk-card-body .uk-heading-line>::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-line>::before,.uk-overlay-primary .uk-heading-line>::before,.uk-offcanvas-bar .uk-heading-line>::before,.uk-light .uk-heading-line>::after,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-card-primary.uk-card-body .uk-heading-line>::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-heading-line>::after,.uk-card-secondary.uk-card-body .uk-heading-line>::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-heading-line>::after,.uk-overlay-primary .uk-heading-line>::after,.uk-offcanvas-bar .uk-heading-line>::after{border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-divider-icon,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon,.uk-card-primary.uk-card-body .uk-divider-icon,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-icon,.uk-card-secondary.uk-card-body .uk-divider-icon,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-icon,.uk-overlay-primary .uk-divider-icon,.uk-offcanvas-bar .uk-divider-icon{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22rgba(255,255,255,0.2)%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-divider-icon::before,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-card-primary.uk-card-body .uk-divider-icon::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-icon::before,.uk-card-secondary.uk-card-body .uk-divider-icon::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-icon::before,.uk-overlay-primary .uk-divider-icon::before,.uk-offcanvas-bar .uk-divider-icon::before,.uk-light .uk-divider-icon::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-card-primary.uk-card-body .uk-divider-icon::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-icon::after,.uk-card-secondary.uk-card-body .uk-divider-icon::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-icon::after,.uk-overlay-primary .uk-divider-icon::after,.uk-offcanvas-bar .uk-divider-icon::after{border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-divider-small::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-small::after,.uk-card-primary.uk-card-body .uk-divider-small::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-divider-small::after,.uk-card-secondary.uk-card-body .uk-divider-small::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-divider-small::after,.uk-overlay-primary .uk-divider-small::after,.uk-offcanvas-bar .uk-divider-small::after{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-list-divider>li:nth-child(n+2),.uk-section-primary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2),.uk-section-secondary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2),.uk-tile-primary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2),.uk-card-primary.uk-card-body .uk-list-divider>li:nth-child(n+2),.uk-card-primary>:not([class*='uk-card-media']) .uk-list-divider>li:nth-child(n+2),.uk-card-secondary.uk-card-body .uk-list-divider>li:nth-child(n+2),.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-divider>li:nth-child(n+2),.uk-overlay-primary .uk-list-divider>li:nth-child(n+2),.uk-offcanvas-bar .uk-list-divider>li:nth-child(n+2){border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-list-striped>li:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-card-primary.uk-card-body .uk-list-striped>li:nth-of-type(odd),.uk-card-primary>:not([class*='uk-card-media']) .uk-list-striped>li:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>li:nth-of-type(odd),.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-striped>li:nth-of-type(odd),.uk-overlay-primary .uk-list-striped>li:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>li:nth-of-type(odd){border-top-color:rgba(255,255,255,0.2);border-bottom-color:rgba(255,255,255,0.2)}.uk-light .uk-list-striped>li:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-card-primary.uk-card-body .uk-list-striped>li:nth-of-type(odd),.uk-card-primary>:not([class*='uk-card-media']) .uk-list-striped>li:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>li:nth-of-type(odd),.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-striped>li:nth-of-type(odd),.uk-overlay-primary .uk-list-striped>li:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>li:nth-of-type(odd){background-color:rgba(255,255,255,0.1)}.uk-light .uk-list-bullet>li::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-bullet>li::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-bullet>li::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-bullet>li::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-bullet>li::before,.uk-card-primary.uk-card-body .uk-list-bullet>li::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-list-bullet>li::before,.uk-card-secondary.uk-card-body .uk-list-bullet>li::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-list-bullet>li::before,.uk-overlay-primary .uk-list-bullet>li::before,.uk-offcanvas-bar .uk-list-bullet>li::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22rgba(255,255,255,0.7)%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link,.uk-card-primary.uk-card-body .uk-icon-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link,.uk-card-secondary.uk-card-body .uk-icon-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link,.uk-overlay-primary .uk-icon-link,.uk-offcanvas-bar .uk-icon-link{color:rgba(255,255,255,0.5)}.uk-light .uk-icon-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-card-primary.uk-card-body .uk-icon-link:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link:hover,.uk-card-secondary.uk-card-body .uk-icon-link:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link:hover,.uk-overlay-primary .uk-icon-link:hover,.uk-offcanvas-bar .uk-icon-link:hover,.uk-light .uk-icon-link:focus,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:focus,.uk-card-primary.uk-card-body .uk-icon-link:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link:focus,.uk-card-secondary.uk-card-body .uk-icon-link:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link:focus,.uk-overlay-primary .uk-icon-link:focus,.uk-offcanvas-bar .uk-icon-link:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-icon-link:active,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:active,.uk-card-primary.uk-card-body .uk-icon-link:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-link:active,.uk-card-secondary.uk-card-body .uk-icon-link:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-link:active,.uk-overlay-primary .uk-icon-link:active,.uk-offcanvas-bar .uk-icon-link:active,.uk-light .uk-active>.uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-card-primary.uk-card-body .uk-active>.uk-icon-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-active>.uk-icon-link,.uk-card-secondary.uk-card-body .uk-active>.uk-icon-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-active>.uk-icon-link,.uk-overlay-primary .uk-active>.uk-icon-link,.uk-offcanvas-bar .uk-active>.uk-icon-link{color:rgba(255,255,255,0.7)}.uk-light .uk-icon-button,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button,.uk-card-primary.uk-card-body .uk-icon-button,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button,.uk-card-secondary.uk-card-body .uk-icon-button,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button,.uk-overlay-primary .uk-icon-button,.uk-offcanvas-bar .uk-icon-button{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.5)}.uk-light .uk-icon-button:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-card-primary.uk-card-body .uk-icon-button:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button:hover,.uk-card-secondary.uk-card-body .uk-icon-button:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button:hover,.uk-overlay-primary .uk-icon-button:hover,.uk-offcanvas-bar .uk-icon-button:hover,.uk-light .uk-icon-button:focus,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:focus,.uk-card-primary.uk-card-body .uk-icon-button:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button:focus,.uk-card-secondary.uk-card-body .uk-icon-button:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button:focus,.uk-overlay-primary .uk-icon-button:focus,.uk-offcanvas-bar .uk-icon-button:focus{background-color:rgba(242,242,242,0.1);color:rgba(255,255,255,0.7)}.uk-light .uk-icon-button:active,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:active,.uk-card-primary.uk-card-body .uk-icon-button:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-icon-button:active,.uk-card-secondary.uk-card-body .uk-icon-button:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-icon-button:active,.uk-overlay-primary .uk-icon-button:active,.uk-offcanvas-bar .uk-icon-button:active{background-color:rgba(230,230,230,0.1);color:rgba(255,255,255,0.7)}.uk-light .uk-input,.uk-section-primary:not(.uk-preserve-color) .uk-input,.uk-section-secondary:not(.uk-preserve-color) .uk-input,.uk-tile-primary:not(.uk-preserve-color) .uk-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-input,.uk-card-primary.uk-card-body .uk-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-input,.uk-card-secondary.uk-card-body .uk-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input,.uk-overlay-primary .uk-input,.uk-offcanvas-bar .uk-input,.uk-light .uk-select,.uk-section-primary:not(.uk-preserve-color) .uk-select,.uk-section-secondary:not(.uk-preserve-color) .uk-select,.uk-tile-primary:not(.uk-preserve-color) .uk-select,.uk-tile-secondary:not(.uk-preserve-color) .uk-select,.uk-card-primary.uk-card-body .uk-select,.uk-card-primary>:not([class*='uk-card-media']) .uk-select,.uk-card-secondary.uk-card-body .uk-select,.uk-card-secondary>:not([class*='uk-card-media']) .uk-select,.uk-overlay-primary .uk-select,.uk-offcanvas-bar .uk-select,.uk-light .uk-textarea,.uk-section-primary:not(.uk-preserve-color) .uk-textarea,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea,.uk-card-primary.uk-card-body .uk-textarea,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea,.uk-card-secondary.uk-card-body .uk-textarea,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea,.uk-overlay-primary .uk-textarea,.uk-offcanvas-bar .uk-textarea{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7);background-clip:padding-box;border-color:rgba(255,255,255,0.2)}.uk-light .uk-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-card-primary.uk-card-body .uk-input:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-input:focus,.uk-card-secondary.uk-card-body .uk-input:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input:focus,.uk-overlay-primary .uk-input:focus,.uk-offcanvas-bar .uk-input:focus,.uk-light .uk-select:focus,.uk-section-primary:not(.uk-preserve-color) .uk-select:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-card-primary.uk-card-body .uk-select:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-select:focus,.uk-card-secondary.uk-card-body .uk-select:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-select:focus,.uk-overlay-primary .uk-select:focus,.uk-offcanvas-bar .uk-select:focus,.uk-light .uk-textarea:focus,.uk-section-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea:focus,.uk-card-primary.uk-card-body .uk-textarea:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea:focus,.uk-card-secondary.uk-card-body .uk-textarea:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea:focus,.uk-overlay-primary .uk-textarea:focus,.uk-offcanvas-bar .uk-textarea:focus{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.7)}.uk-light .uk-input:-ms-input-placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-input:-ms-input-placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-input:-ms-input-placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-input:-ms-input-placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-input:-ms-input-placeholder,.uk-card-primary.uk-card-body .uk-input:-ms-input-placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-input:-ms-input-placeholder,.uk-card-secondary.uk-card-body .uk-input:-ms-input-placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input:-ms-input-placeholder,.uk-overlay-primary .uk-input:-ms-input-placeholder,.uk-offcanvas-bar .uk-input:-ms-input-placeholder{color:rgba(255,255,255,0.5) !important}.uk-light .uk-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-input::placeholder,.uk-card-primary.uk-card-body .uk-input::placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-input::placeholder,.uk-card-secondary.uk-card-body .uk-input::placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-input::placeholder,.uk-overlay-primary .uk-input::placeholder,.uk-offcanvas-bar .uk-input::placeholder{color:rgba(255,255,255,0.5)}.uk-light .uk-textarea:-ms-input-placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-textarea:-ms-input-placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea:-ms-input-placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea:-ms-input-placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea:-ms-input-placeholder,.uk-card-primary.uk-card-body .uk-textarea:-ms-input-placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea:-ms-input-placeholder,.uk-card-secondary.uk-card-body .uk-textarea:-ms-input-placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea:-ms-input-placeholder,.uk-overlay-primary .uk-textarea:-ms-input-placeholder,.uk-offcanvas-bar .uk-textarea:-ms-input-placeholder{color:rgba(255,255,255,0.5) !important}.uk-light .uk-textarea::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-card-primary.uk-card-body .uk-textarea::placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-textarea::placeholder,.uk-card-secondary.uk-card-body .uk-textarea::placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-textarea::placeholder,.uk-overlay-primary .uk-textarea::placeholder,.uk-offcanvas-bar .uk-textarea::placeholder{color:rgba(255,255,255,0.5)}.uk-light .uk-select:not([multiple]):not([size]),.uk-section-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-section-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-card-primary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-primary>:not([class*='uk-card-media']) .uk-select:not([multiple]):not([size]),.uk-card-secondary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-secondary>:not([class*='uk-card-media']) .uk-select:not([multiple]):not([size]),.uk-overlay-primary .uk-select:not([multiple]):not([size]),.uk-offcanvas-bar .uk-select:not([multiple]):not([size]){background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba(255,255,255,0.7)%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba(255,255,255,0.7)%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-radio,.uk-section-primary:not(.uk-preserve-color) .uk-radio,.uk-section-secondary:not(.uk-preserve-color) .uk-radio,.uk-tile-primary:not(.uk-preserve-color) .uk-radio,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio,.uk-card-primary.uk-card-body .uk-radio,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio,.uk-card-secondary.uk-card-body .uk-radio,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio,.uk-overlay-primary .uk-radio,.uk-offcanvas-bar .uk-radio,.uk-light .uk-checkbox,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-card-primary.uk-card-body .uk-checkbox,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox,.uk-card-secondary.uk-card-body .uk-checkbox,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox,.uk-overlay-primary .uk-checkbox,.uk-offcanvas-bar .uk-checkbox{background-color:rgba(242,242,242,0.1);border-color:rgba(255,255,255,0.2)}.uk-light .uk-radio:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:focus,.uk-card-primary.uk-card-body .uk-radio:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:focus,.uk-card-secondary.uk-card-body .uk-radio:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:focus,.uk-overlay-primary .uk-radio:focus,.uk-offcanvas-bar .uk-radio:focus,.uk-light .uk-checkbox:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-card-primary.uk-card-body .uk-checkbox:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:focus,.uk-card-secondary.uk-card-body .uk-checkbox:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:focus,.uk-overlay-primary .uk-checkbox:focus,.uk-offcanvas-bar .uk-checkbox:focus{border-color:rgba(255,255,255,0.7)}.uk-light .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-overlay-primary .uk-radio:checked,.uk-offcanvas-bar .uk-radio:checked,.uk-light .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:checked,.uk-light .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-checkbox:indeterminate{background-color:#fff;border-color:rgba(255,255,255,0.7)}.uk-light .uk-radio:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-card-primary.uk-card-body .uk-radio:checked:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:checked:focus,.uk-card-secondary.uk-card-body .uk-radio:checked:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:checked:focus,.uk-overlay-primary .uk-radio:checked:focus,.uk-offcanvas-bar .uk-radio:checked:focus,.uk-light .uk-checkbox:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-card-primary.uk-card-body .uk-checkbox:checked:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:checked:focus,.uk-card-secondary.uk-card-body .uk-checkbox:checked:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:checked:focus,.uk-overlay-primary .uk-checkbox:checked:focus,.uk-offcanvas-bar .uk-checkbox:checked:focus,.uk-light .uk-checkbox:indeterminate:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate:focus,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate:focus,.uk-overlay-primary .uk-checkbox:indeterminate:focus,.uk-offcanvas-bar .uk-checkbox:indeterminate:focus{background-color:#e6e6e6}.uk-light .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-radio:checked,.uk-overlay-primary .uk-radio:checked,.uk-offcanvas-bar .uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-light .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*='uk-card-media']) .uk-checkbox:indeterminate,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-form-label,.uk-section-primary:not(.uk-preserve-color) .uk-form-label,.uk-section-secondary:not(.uk-preserve-color) .uk-form-label,.uk-tile-primary:not(.uk-preserve-color) .uk-form-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-label,.uk-card-primary.uk-card-body .uk-form-label,.uk-card-primary>:not([class*='uk-card-media']) .uk-form-label,.uk-card-secondary.uk-card-body .uk-form-label,.uk-card-secondary>:not([class*='uk-card-media']) .uk-form-label,.uk-overlay-primary .uk-form-label,.uk-offcanvas-bar .uk-form-label{color:#fff}.uk-light .uk-form-icon,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon,.uk-card-primary.uk-card-body .uk-form-icon,.uk-card-primary>:not([class*='uk-card-media']) .uk-form-icon,.uk-card-secondary.uk-card-body .uk-form-icon,.uk-card-secondary>:not([class*='uk-card-media']) .uk-form-icon,.uk-overlay-primary .uk-form-icon,.uk-offcanvas-bar .uk-form-icon{color:rgba(255,255,255,0.5)}.uk-light .uk-form-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-card-primary.uk-card-body .uk-form-icon:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-form-icon:hover,.uk-card-secondary.uk-card-body .uk-form-icon:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-form-icon:hover,.uk-overlay-primary .uk-form-icon:hover,.uk-offcanvas-bar .uk-form-icon:hover{color:rgba(255,255,255,0.7)}.uk-light .uk-button-default,.uk-section-primary:not(.uk-preserve-color) .uk-button-default,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default,.uk-card-primary.uk-card-body .uk-button-default,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default,.uk-card-secondary.uk-card-body .uk-button-default,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default,.uk-overlay-primary .uk-button-default,.uk-offcanvas-bar .uk-button-default{background-color:rgba(0,0,0,0);color:#fff;border-color:rgba(255,255,255,0.7)}.uk-light .uk-button-default:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:hover,.uk-card-primary.uk-card-body .uk-button-default:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default:hover,.uk-card-secondary.uk-card-body .uk-button-default:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default:hover,.uk-overlay-primary .uk-button-default:hover,.uk-offcanvas-bar .uk-button-default:hover,.uk-light .uk-button-default:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:focus,.uk-card-primary.uk-card-body .uk-button-default:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default:focus,.uk-card-secondary.uk-card-body .uk-button-default:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default:focus,.uk-overlay-primary .uk-button-default:focus,.uk-offcanvas-bar .uk-button-default:focus{background-color:rgba(0,0,0,0);color:#fff;border-color:#fff}.uk-light .uk-button-default:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:active,.uk-card-primary.uk-card-body .uk-button-default:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default:active,.uk-card-secondary.uk-card-body .uk-button-default:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default:active,.uk-overlay-primary .uk-button-default:active,.uk-offcanvas-bar .uk-button-default:active,.uk-light .uk-button-default.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-card-primary.uk-card-body .uk-button-default.uk-active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-default.uk-active,.uk-card-secondary.uk-card-body .uk-button-default.uk-active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-default.uk-active,.uk-overlay-primary .uk-button-default.uk-active,.uk-offcanvas-bar .uk-button-default.uk-active{background-color:rgba(0,0,0,0);color:#fff;border-color:#fff}.uk-light .uk-button-primary,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary,.uk-card-primary.uk-card-body .uk-button-primary,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary,.uk-card-secondary.uk-card-body .uk-button-primary,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary,.uk-overlay-primary .uk-button-primary,.uk-offcanvas-bar .uk-button-primary{background-color:#fff;color:#666}.uk-light .uk-button-primary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-card-primary.uk-card-body .uk-button-primary:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary:hover,.uk-card-secondary.uk-card-body .uk-button-primary:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary:hover,.uk-overlay-primary .uk-button-primary:hover,.uk-offcanvas-bar .uk-button-primary:hover,.uk-light .uk-button-primary:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:focus,.uk-card-primary.uk-card-body .uk-button-primary:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary:focus,.uk-card-secondary.uk-card-body .uk-button-primary:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary:focus,.uk-overlay-primary .uk-button-primary:focus,.uk-offcanvas-bar .uk-button-primary:focus{background-color:#f2f2f2;color:#666}.uk-light .uk-button-primary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:active,.uk-card-primary.uk-card-body .uk-button-primary:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary:active,.uk-card-secondary.uk-card-body .uk-button-primary:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary:active,.uk-overlay-primary .uk-button-primary:active,.uk-offcanvas-bar .uk-button-primary:active,.uk-light .uk-button-primary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-card-primary.uk-card-body .uk-button-primary.uk-active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-primary.uk-active,.uk-card-secondary.uk-card-body .uk-button-primary.uk-active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-primary.uk-active,.uk-overlay-primary .uk-button-primary.uk-active,.uk-offcanvas-bar .uk-button-primary.uk-active{background-color:#e6e6e6;color:#666}.uk-light .uk-button-secondary,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary,.uk-card-primary.uk-card-body .uk-button-secondary,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary,.uk-card-secondary.uk-card-body .uk-button-secondary,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary,.uk-overlay-primary .uk-button-secondary,.uk-offcanvas-bar .uk-button-secondary{background-color:#fff;color:#666}.uk-light .uk-button-secondary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-card-primary.uk-card-body .uk-button-secondary:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary:hover,.uk-card-secondary.uk-card-body .uk-button-secondary:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary:hover,.uk-overlay-primary .uk-button-secondary:hover,.uk-offcanvas-bar .uk-button-secondary:hover,.uk-light .uk-button-secondary:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:focus,.uk-card-primary.uk-card-body .uk-button-secondary:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary:focus,.uk-card-secondary.uk-card-body .uk-button-secondary:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary:focus,.uk-overlay-primary .uk-button-secondary:focus,.uk-offcanvas-bar .uk-button-secondary:focus{background-color:#f2f2f2;color:#666}.uk-light .uk-button-secondary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-card-primary.uk-card-body .uk-button-secondary:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary:active,.uk-card-secondary.uk-card-body .uk-button-secondary:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary:active,.uk-overlay-primary .uk-button-secondary:active,.uk-offcanvas-bar .uk-button-secondary:active,.uk-light .uk-button-secondary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-card-primary.uk-card-body .uk-button-secondary.uk-active,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-secondary.uk-active,.uk-card-secondary.uk-card-body .uk-button-secondary.uk-active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-secondary.uk-active,.uk-overlay-primary .uk-button-secondary.uk-active,.uk-offcanvas-bar .uk-button-secondary.uk-active{background-color:#e6e6e6;color:#666}.uk-light .uk-button-text,.uk-section-primary:not(.uk-preserve-color) .uk-button-text,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text,.uk-card-primary.uk-card-body .uk-button-text,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text,.uk-card-secondary.uk-card-body .uk-button-text,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text,.uk-overlay-primary .uk-button-text,.uk-offcanvas-bar .uk-button-text{color:#fff}.uk-light .uk-button-text::before,.uk-section-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text::before,.uk-card-primary.uk-card-body .uk-button-text::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text::before,.uk-card-secondary.uk-card-body .uk-button-text::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text::before,.uk-overlay-primary .uk-button-text::before,.uk-offcanvas-bar .uk-button-text::before{border-bottom-color:#fff}.uk-light .uk-button-text:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:hover,.uk-card-primary.uk-card-body .uk-button-text:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text:hover,.uk-card-secondary.uk-card-body .uk-button-text:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text:hover,.uk-overlay-primary .uk-button-text:hover,.uk-offcanvas-bar .uk-button-text:hover,.uk-light .uk-button-text:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:focus,.uk-card-primary.uk-card-body .uk-button-text:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text:focus,.uk-card-secondary.uk-card-body .uk-button-text:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text:focus,.uk-overlay-primary .uk-button-text:focus,.uk-offcanvas-bar .uk-button-text:focus{color:#fff}.uk-light .uk-button-text:disabled,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-card-primary.uk-card-body .uk-button-text:disabled,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-text:disabled,.uk-card-secondary.uk-card-body .uk-button-text:disabled,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-text:disabled,.uk-overlay-primary .uk-button-text:disabled,.uk-offcanvas-bar .uk-button-text:disabled{color:rgba(255,255,255,0.5)}.uk-light .uk-button-link,.uk-section-primary:not(.uk-preserve-color) .uk-button-link,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link,.uk-card-primary.uk-card-body .uk-button-link,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-link,.uk-card-secondary.uk-card-body .uk-button-link,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-link,.uk-overlay-primary .uk-button-link,.uk-offcanvas-bar .uk-button-link{color:rgba(255,255,255,0.5)}.uk-light .uk-button-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link:hover,.uk-card-primary.uk-card-body .uk-button-link:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-link:hover,.uk-card-secondary.uk-card-body .uk-button-link:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-link:hover,.uk-overlay-primary .uk-button-link:hover,.uk-offcanvas-bar .uk-button-link:hover,.uk-light .uk-button-link:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-link:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link:focus,.uk-card-primary.uk-card-body .uk-button-link:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-button-link:focus,.uk-card-secondary.uk-card-body .uk-button-link:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-button-link:focus,.uk-overlay-primary .uk-button-link:focus,.uk-offcanvas-bar .uk-button-link:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-grid-divider>:not(.uk-first-column)::before,.uk-overlay-primary .uk-grid-divider>:not(.uk-first-column)::before,.uk-offcanvas-bar .uk-grid-divider>:not(.uk-first-column)::before{border-left-color:rgba(255,255,255,0.2)}.uk-light .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-primary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-overlay-primary .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-offcanvas-bar .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-close,.uk-section-primary:not(.uk-preserve-color) .uk-close,.uk-section-secondary:not(.uk-preserve-color) .uk-close,.uk-tile-primary:not(.uk-preserve-color) .uk-close,.uk-tile-secondary:not(.uk-preserve-color) .uk-close,.uk-card-primary.uk-card-body .uk-close,.uk-card-primary>:not([class*='uk-card-media']) .uk-close,.uk-card-secondary.uk-card-body .uk-close,.uk-card-secondary>:not([class*='uk-card-media']) .uk-close,.uk-overlay-primary .uk-close,.uk-offcanvas-bar .uk-close{color:rgba(255,255,255,0.5)}.uk-light .uk-close:hover,.uk-section-primary:not(.uk-preserve-color) .uk-close:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-close:hover,.uk-card-primary.uk-card-body .uk-close:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-close:hover,.uk-card-secondary.uk-card-body .uk-close:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-close:hover,.uk-overlay-primary .uk-close:hover,.uk-offcanvas-bar .uk-close:hover,.uk-light .uk-close:focus,.uk-section-primary:not(.uk-preserve-color) .uk-close:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-close:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-close:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-close:focus,.uk-card-primary.uk-card-body .uk-close:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-close:focus,.uk-card-secondary.uk-card-body .uk-close:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-close:focus,.uk-overlay-primary .uk-close:focus,.uk-offcanvas-bar .uk-close:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-totop,.uk-section-primary:not(.uk-preserve-color) .uk-totop,.uk-section-secondary:not(.uk-preserve-color) .uk-totop,.uk-tile-primary:not(.uk-preserve-color) .uk-totop,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop,.uk-card-primary.uk-card-body .uk-totop,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop,.uk-card-secondary.uk-card-body .uk-totop,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop,.uk-overlay-primary .uk-totop,.uk-offcanvas-bar .uk-totop{color:rgba(255,255,255,0.5)}.uk-light .uk-totop:hover,.uk-section-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:hover,.uk-card-primary.uk-card-body .uk-totop:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop:hover,.uk-card-secondary.uk-card-body .uk-totop:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop:hover,.uk-overlay-primary .uk-totop:hover,.uk-offcanvas-bar .uk-totop:hover,.uk-light .uk-totop:focus,.uk-section-primary:not(.uk-preserve-color) .uk-totop:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:focus,.uk-card-primary.uk-card-body .uk-totop:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop:focus,.uk-card-secondary.uk-card-body .uk-totop:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop:focus,.uk-overlay-primary .uk-totop:focus,.uk-offcanvas-bar .uk-totop:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-totop:active,.uk-section-primary:not(.uk-preserve-color) .uk-totop:active,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:active,.uk-card-primary.uk-card-body .uk-totop:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-totop:active,.uk-card-secondary.uk-card-body .uk-totop:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-totop:active,.uk-overlay-primary .uk-totop:active,.uk-offcanvas-bar .uk-totop:active{color:#fff}.uk-light .uk-badge,.uk-section-primary:not(.uk-preserve-color) .uk-badge,.uk-section-secondary:not(.uk-preserve-color) .uk-badge,.uk-tile-primary:not(.uk-preserve-color) .uk-badge,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge,.uk-card-primary.uk-card-body .uk-badge,.uk-card-primary>:not([class*='uk-card-media']) .uk-badge,.uk-card-secondary.uk-card-body .uk-badge,.uk-card-secondary>:not([class*='uk-card-media']) .uk-badge,.uk-overlay-primary .uk-badge,.uk-offcanvas-bar .uk-badge{background-color:#fff;color:#666}.uk-light .uk-badge:hover,.uk-section-primary:not(.uk-preserve-color) .uk-badge:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-badge:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-badge:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge:hover,.uk-card-primary.uk-card-body .uk-badge:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-badge:hover,.uk-card-secondary.uk-card-body .uk-badge:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-badge:hover,.uk-overlay-primary .uk-badge:hover,.uk-offcanvas-bar .uk-badge:hover,.uk-light .uk-badge:focus,.uk-section-primary:not(.uk-preserve-color) .uk-badge:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-badge:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-badge:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge:focus,.uk-card-primary.uk-card-body .uk-badge:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-badge:focus,.uk-card-secondary.uk-card-body .uk-badge:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-badge:focus,.uk-overlay-primary .uk-badge:focus,.uk-offcanvas-bar .uk-badge:focus{color:#666}.uk-light .uk-label,.uk-section-primary:not(.uk-preserve-color) .uk-label,.uk-section-secondary:not(.uk-preserve-color) .uk-label,.uk-tile-primary:not(.uk-preserve-color) .uk-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-label,.uk-card-primary.uk-card-body .uk-label,.uk-card-primary>:not([class*='uk-card-media']) .uk-label,.uk-card-secondary.uk-card-body .uk-label,.uk-card-secondary>:not([class*='uk-card-media']) .uk-label,.uk-overlay-primary .uk-label,.uk-offcanvas-bar .uk-label{background-color:#fff;color:#666}.uk-light .uk-article-meta,.uk-section-primary:not(.uk-preserve-color) .uk-article-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-article-meta,.uk-card-primary.uk-card-body .uk-article-meta,.uk-card-primary>:not([class*='uk-card-media']) .uk-article-meta,.uk-card-secondary.uk-card-body .uk-article-meta,.uk-card-secondary>:not([class*='uk-card-media']) .uk-article-meta,.uk-overlay-primary .uk-article-meta,.uk-offcanvas-bar .uk-article-meta{color:rgba(255,255,255,0.5)}.uk-light .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input,.uk-card-primary.uk-card-body .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-input,.uk-overlay-primary .uk-search-input,.uk-offcanvas-bar .uk-search-input{color:rgba(255,255,255,0.7)}.uk-light .uk-search-input:-ms-input-placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-search-input:-ms-input-placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input:-ms-input-placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input:-ms-input-placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input:-ms-input-placeholder,.uk-card-primary.uk-card-body .uk-search-input:-ms-input-placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-input:-ms-input-placeholder,.uk-card-secondary.uk-card-body .uk-search-input:-ms-input-placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-input:-ms-input-placeholder,.uk-overlay-primary .uk-search-input:-ms-input-placeholder,.uk-offcanvas-bar .uk-search-input:-ms-input-placeholder{color:rgba(255,255,255,0.5) !important}.uk-light .uk-search-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-card-primary.uk-card-body .uk-search-input::placeholder,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-input::placeholder,.uk-card-secondary.uk-card-body .uk-search-input::placeholder,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-input::placeholder,.uk-overlay-primary .uk-search-input::placeholder,.uk-offcanvas-bar .uk-search-input::placeholder{color:rgba(255,255,255,0.5)}.uk-light .uk-search .uk-search-icon,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-card-primary.uk-card-body .uk-search .uk-search-icon,.uk-card-primary>:not([class*='uk-card-media']) .uk-search .uk-search-icon,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search .uk-search-icon,.uk-overlay-primary .uk-search .uk-search-icon,.uk-offcanvas-bar .uk-search .uk-search-icon{color:rgba(255,255,255,0.5)}.uk-light .uk-search .uk-search-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-card-primary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-search .uk-search-icon:hover,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search .uk-search-icon:hover,.uk-overlay-primary .uk-search .uk-search-icon:hover,.uk-offcanvas-bar .uk-search .uk-search-icon:hover{color:rgba(255,255,255,0.5)}.uk-light .uk-search-default .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-card-primary.uk-card-body .uk-search-default .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input,.uk-overlay-primary .uk-search-default .uk-search-input,.uk-offcanvas-bar .uk-search-default .uk-search-input{background-color:rgba(0,0,0,0);border-color:rgba(255,255,255,0.2)}.uk-light .uk-search-default .uk-search-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-card-primary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input:focus,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-default .uk-search-input:focus,.uk-overlay-primary .uk-search-default .uk-search-input:focus,.uk-offcanvas-bar .uk-search-default .uk-search-input:focus{background-color:rgba(0,0,0,0)}.uk-light .uk-search-navbar .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-card-primary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-navbar .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-navbar .uk-search-input,.uk-overlay-primary .uk-search-navbar .uk-search-input,.uk-offcanvas-bar .uk-search-navbar .uk-search-input{background-color:rgba(0,0,0,0)}.uk-light .uk-search-large .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-card-primary.uk-card-body .uk-search-large .uk-search-input,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-large .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-large .uk-search-input,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-large .uk-search-input,.uk-overlay-primary .uk-search-large .uk-search-input,.uk-offcanvas-bar .uk-search-large .uk-search-input{background-color:rgba(0,0,0,0)}.uk-light .uk-search-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle,.uk-card-primary.uk-card-body .uk-search-toggle,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-toggle,.uk-card-secondary.uk-card-body .uk-search-toggle,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-toggle,.uk-overlay-primary .uk-search-toggle,.uk-offcanvas-bar .uk-search-toggle{color:rgba(255,255,255,0.5)}.uk-light .uk-search-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-card-primary.uk-card-body .uk-search-toggle:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-toggle:hover,.uk-card-secondary.uk-card-body .uk-search-toggle:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-toggle:hover,.uk-overlay-primary .uk-search-toggle:hover,.uk-offcanvas-bar .uk-search-toggle:hover,.uk-light .uk-search-toggle:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle:focus,.uk-card-primary.uk-card-body .uk-search-toggle:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-search-toggle:focus,.uk-card-secondary.uk-card-body .uk-search-toggle:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-search-toggle:focus,.uk-overlay-primary .uk-search-toggle:focus,.uk-offcanvas-bar .uk-search-toggle:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-parent-icon>.uk-parent>a::after,.uk-section-primary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent>a::after,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent>a::after,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent>a::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent>a::after,.uk-card-primary.uk-card-body .uk-nav-parent-icon>.uk-parent>a::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-parent-icon>.uk-parent>a::after,.uk-card-secondary.uk-card-body .uk-nav-parent-icon>.uk-parent>a::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-parent-icon>.uk-parent>a::after,.uk-overlay-primary .uk-nav-parent-icon>.uk-parent>a::after,.uk-offcanvas-bar .uk-nav-parent-icon>.uk-parent>a::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22rgba(255,255,255,0.7)%22%20stroke-width%3D%221.1%22%20points%3D%2210%201%204%207%2010%2013%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-section-primary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-card-primary.uk-card-body .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-card-secondary.uk-card-body .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-overlay-primary .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-offcanvas-bar .uk-nav-parent-icon>.uk-parent.uk-open>a::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22rgba(255,255,255,0.7)%22%20stroke-width%3D%221.1%22%20points%3D%221%204%207%2010%2013%204%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-nav-default>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-card-primary.uk-card-body .uk-nav-default>li>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li>a,.uk-card-secondary.uk-card-body .uk-nav-default>li>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li>a,.uk-overlay-primary .uk-nav-default>li>a,.uk-offcanvas-bar .uk-nav-default>li>a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-default>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-card-primary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li>a:hover,.uk-overlay-primary .uk-nav-default>li>a:hover,.uk-offcanvas-bar .uk-nav-default>li>a:hover,.uk-light .uk-nav-default>li>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:focus,.uk-card-primary.uk-card-body .uk-nav-default>li>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li>a:focus,.uk-card-secondary.uk-card-body .uk-nav-default>li>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li>a:focus,.uk-overlay-primary .uk-nav-default>li>a:focus,.uk-offcanvas-bar .uk-nav-default>li>a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-default>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default>li.uk-active>a,.uk-overlay-primary .uk-nav-default>li.uk-active>a,.uk-offcanvas-bar .uk-nav-default>li.uk-active>a{color:#fff}.uk-light .uk-nav-default .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-header,.uk-overlay-primary .uk-nav-default .uk-nav-header,.uk-offcanvas-bar .uk-nav-default .uk-nav-header{color:#fff}.uk-light .uk-nav-default .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-divider,.uk-overlay-primary .uk-nav-default .uk-nav-divider,.uk-offcanvas-bar .uk-nav-default .uk-nav-divider{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-nav-default .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a,.uk-overlay-primary .uk-nav-default .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-default .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-default .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a:hover,.uk-light .uk-nav-default .uk-nav-sub a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:focus,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a:focus,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-default .uk-nav-sub a:focus,.uk-overlay-primary .uk-nav-default .uk-nav-sub a:focus,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-primary>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-card-primary.uk-card-body .uk-nav-primary>li>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li>a,.uk-overlay-primary .uk-nav-primary>li>a,.uk-offcanvas-bar .uk-nav-primary>li>a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-primary>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-card-primary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li>a:hover,.uk-overlay-primary .uk-nav-primary>li>a:hover,.uk-offcanvas-bar .uk-nav-primary>li>a:hover,.uk-light .uk-nav-primary>li>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:focus,.uk-card-primary.uk-card-body .uk-nav-primary>li>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li>a:focus,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li>a:focus,.uk-overlay-primary .uk-nav-primary>li>a:focus,.uk-offcanvas-bar .uk-nav-primary>li>a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-nav-primary>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-card-primary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary>li.uk-active>a,.uk-overlay-primary .uk-nav-primary>li.uk-active>a,.uk-offcanvas-bar .uk-nav-primary>li.uk-active>a{color:#fff}.uk-light .uk-nav-primary .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-header,.uk-overlay-primary .uk-nav-primary .uk-nav-header,.uk-offcanvas-bar .uk-nav-primary .uk-nav-header{color:#fff}.uk-light .uk-nav-primary .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-divider,.uk-overlay-primary .uk-nav-primary .uk-nav-divider,.uk-offcanvas-bar .uk-nav-primary .uk-nav-divider{border-top-color:rgba(255,255,255,0.2)}.uk-light .uk-nav-primary .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a{color:rgba(255,255,255,0.5)}.uk-light .uk-nav-primary .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a:hover,.uk-light .uk-nav-primary .uk-nav-sub a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:focus,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a:focus,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-nav-primary .uk-nav-sub a:focus,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a:focus,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-navbar-nav>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a,.uk-overlay-primary .uk-navbar-nav>li>a,.uk-offcanvas-bar .uk-navbar-nav>li>a{color:rgba(255,255,255,0.5)}.uk-light .uk-navbar-nav>li:hover>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li:hover>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li:hover>a,.uk-overlay-primary .uk-navbar-nav>li:hover>a,.uk-offcanvas-bar .uk-navbar-nav>li:hover>a,.uk-light .uk-navbar-nav>li>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:focus,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:focus,.uk-overlay-primary .uk-navbar-nav>li>a:focus,.uk-offcanvas-bar .uk-navbar-nav>li>a:focus,.uk-light .uk-navbar-nav>li>a.uk-open,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a.uk-open,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a.uk-open,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a.uk-open,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a.uk-open,.uk-overlay-primary .uk-navbar-nav>li>a.uk-open,.uk-offcanvas-bar .uk-navbar-nav>li>a.uk-open{color:rgba(255,255,255,0.7)}.uk-light .uk-navbar-nav>li>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:active,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li>a:active,.uk-overlay-primary .uk-navbar-nav>li>a:active,.uk-offcanvas-bar .uk-navbar-nav>li>a:active{color:#fff}.uk-light .uk-navbar-nav>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-nav>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-nav>li.uk-active>a,.uk-overlay-primary .uk-navbar-nav>li.uk-active>a,.uk-offcanvas-bar .uk-navbar-nav>li.uk-active>a{color:#fff}.uk-light .uk-navbar-item,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-item,.uk-card-primary.uk-card-body .uk-navbar-item,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-item,.uk-card-secondary.uk-card-body .uk-navbar-item,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-item,.uk-overlay-primary .uk-navbar-item,.uk-offcanvas-bar .uk-navbar-item{color:rgba(255,255,255,0.7)}.uk-light .uk-navbar-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-card-primary.uk-card-body .uk-navbar-toggle,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle,.uk-card-secondary.uk-card-body .uk-navbar-toggle,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle,.uk-overlay-primary .uk-navbar-toggle,.uk-offcanvas-bar .uk-navbar-toggle{color:rgba(255,255,255,0.5)}.uk-light .uk-navbar-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-card-primary.uk-card-body .uk-navbar-toggle:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle:hover,.uk-card-secondary.uk-card-body .uk-navbar-toggle:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle:hover,.uk-overlay-primary .uk-navbar-toggle:hover,.uk-offcanvas-bar .uk-navbar-toggle:hover,.uk-light .uk-navbar-toggle:focus,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle:focus,.uk-card-primary.uk-card-body .uk-navbar-toggle:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle:focus,.uk-card-secondary.uk-card-body .uk-navbar-toggle:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle:focus,.uk-overlay-primary .uk-navbar-toggle:focus,.uk-offcanvas-bar .uk-navbar-toggle:focus,.uk-light .uk-navbar-toggle.uk-open,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle.uk-open,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle.uk-open,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle.uk-open,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle.uk-open,.uk-card-primary.uk-card-body .uk-navbar-toggle.uk-open,.uk-card-primary>:not([class*='uk-card-media']) .uk-navbar-toggle.uk-open,.uk-card-secondary.uk-card-body .uk-navbar-toggle.uk-open,.uk-card-secondary>:not([class*='uk-card-media']) .uk-navbar-toggle.uk-open,.uk-overlay-primary .uk-navbar-toggle.uk-open,.uk-offcanvas-bar .uk-navbar-toggle.uk-open{color:rgba(255,255,255,0.7)}.uk-light .uk-subnav>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-card-primary.uk-card-body .uk-subnav>*>:first-child,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav>*>:first-child,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>*>:first-child,.uk-overlay-primary .uk-subnav>*>:first-child,.uk-offcanvas-bar .uk-subnav>*>:first-child{color:rgba(255,255,255,0.5)}.uk-light .uk-subnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-card-primary.uk-card-body .uk-subnav>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>*>a:hover,.uk-overlay-primary .uk-subnav>*>a:hover,.uk-offcanvas-bar .uk-subnav>*>a:hover,.uk-light .uk-subnav>*>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>a:focus,.uk-card-primary.uk-card-body .uk-subnav>*>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>*>a:focus,.uk-card-secondary.uk-card-body .uk-subnav>*>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>*>a:focus,.uk-overlay-primary .uk-subnav>*>a:focus,.uk-offcanvas-bar .uk-subnav>*>a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-subnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-card-primary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>.uk-active>a,.uk-overlay-primary .uk-subnav>.uk-active>a,.uk-offcanvas-bar .uk-subnav>.uk-active>a{color:#fff}.uk-light .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{border-left-color:rgba(255,255,255,0.2)}.uk-light .uk-subnav-pill>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-card-primary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>:first-child,.uk-overlay-primary .uk-subnav-pill>*>:first-child,.uk-offcanvas-bar .uk-subnav-pill>*>:first-child{background-color:rgba(0,0,0,0);color:rgba(255,255,255,0.5)}.uk-light .uk-subnav-pill>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:hover,.uk-overlay-primary .uk-subnav-pill>*>a:hover,.uk-offcanvas-bar .uk-subnav-pill>*>a:hover,.uk-light .uk-subnav-pill>*>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:focus,.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:focus,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:focus,.uk-overlay-primary .uk-subnav-pill>*>a:focus,.uk-offcanvas-bar .uk-subnav-pill>*>a:focus{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7)}.uk-light .uk-subnav-pill>*>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:active,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>*>a:active,.uk-overlay-primary .uk-subnav-pill>*>a:active,.uk-offcanvas-bar .uk-subnav-pill>*>a:active{background-color:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7)}.uk-light .uk-subnav-pill>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-card-primary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav-pill>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav-pill>.uk-active>a,.uk-overlay-primary .uk-subnav-pill>.uk-active>a,.uk-offcanvas-bar .uk-subnav-pill>.uk-active>a{background-color:#fff;color:#666}.uk-light .uk-subnav>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-card-primary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-subnav>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-subnav>.uk-disabled>a,.uk-overlay-primary .uk-subnav>.uk-disabled>a,.uk-offcanvas-bar .uk-subnav>.uk-disabled>a{color:rgba(255,255,255,0.5)}.uk-light .uk-breadcrumb>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-card-primary.uk-card-body .uk-breadcrumb>*>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>*>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>*>*,.uk-overlay-primary .uk-breadcrumb>*>*,.uk-offcanvas-bar .uk-breadcrumb>*>*{color:rgba(255,255,255,0.5)}.uk-light .uk-breadcrumb>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-card-primary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>*>:hover,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>*>:hover,.uk-overlay-primary .uk-breadcrumb>*>:hover,.uk-offcanvas-bar .uk-breadcrumb>*>:hover,.uk-light .uk-breadcrumb>*>:focus,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:focus,.uk-card-primary.uk-card-body .uk-breadcrumb>*>:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>*>:focus,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>*>:focus,.uk-overlay-primary .uk-breadcrumb>*>:focus,.uk-offcanvas-bar .uk-breadcrumb>*>:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-breadcrumb>:last-child>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-card-primary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>:last-child>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>:last-child>*,.uk-overlay-primary .uk-breadcrumb>:last-child>*,.uk-offcanvas-bar .uk-breadcrumb>:last-child>*{color:rgba(255,255,255,0.7)}.uk-light .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{color:rgba(255,255,255,0.5)}.uk-light .uk-pagination>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-card-primary.uk-card-body .uk-pagination>*>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>*>*,.uk-card-secondary.uk-card-body .uk-pagination>*>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>*>*,.uk-overlay-primary .uk-pagination>*>*,.uk-offcanvas-bar .uk-pagination>*>*{color:rgba(255,255,255,0.5)}.uk-light .uk-pagination>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-card-primary.uk-card-body .uk-pagination>*>:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>*>:hover,.uk-card-secondary.uk-card-body .uk-pagination>*>:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>*>:hover,.uk-overlay-primary .uk-pagination>*>:hover,.uk-offcanvas-bar .uk-pagination>*>:hover,.uk-light .uk-pagination>*>:focus,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>:focus,.uk-card-primary.uk-card-body .uk-pagination>*>:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>*>:focus,.uk-card-secondary.uk-card-body .uk-pagination>*>:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>*>:focus,.uk-overlay-primary .uk-pagination>*>:focus,.uk-offcanvas-bar .uk-pagination>*>:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-pagination>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-card-primary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>.uk-active>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>.uk-active>*,.uk-overlay-primary .uk-pagination>.uk-active>*,.uk-offcanvas-bar .uk-pagination>.uk-active>*{color:rgba(255,255,255,0.7)}.uk-light .uk-pagination>.uk-disabled>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-card-primary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-pagination>.uk-disabled>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-pagination>.uk-disabled>*,.uk-overlay-primary .uk-pagination>.uk-disabled>*,.uk-offcanvas-bar .uk-pagination>.uk-disabled>*{color:rgba(255,255,255,0.5)}.uk-light .uk-tab::before,.uk-section-primary:not(.uk-preserve-color) .uk-tab::before,.uk-section-secondary:not(.uk-preserve-color) .uk-tab::before,.uk-tile-primary:not(.uk-preserve-color) .uk-tab::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab::before,.uk-card-primary.uk-card-body .uk-tab::before,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab::before,.uk-card-secondary.uk-card-body .uk-tab::before,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab::before,.uk-overlay-primary .uk-tab::before,.uk-offcanvas-bar .uk-tab::before{border-color:rgba(255,255,255,0.2)}.uk-light .uk-tab>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a,.uk-card-primary.uk-card-body .uk-tab>*>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>*>a,.uk-card-secondary.uk-card-body .uk-tab>*>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>*>a,.uk-overlay-primary .uk-tab>*>a,.uk-offcanvas-bar .uk-tab>*>a{color:rgba(255,255,255,0.5)}.uk-light .uk-tab>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-card-primary.uk-card-body .uk-tab>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>*>a:hover,.uk-card-secondary.uk-card-body .uk-tab>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>*>a:hover,.uk-overlay-primary .uk-tab>*>a:hover,.uk-offcanvas-bar .uk-tab>*>a:hover,.uk-light .uk-tab>*>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a:focus,.uk-card-primary.uk-card-body .uk-tab>*>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>*>a:focus,.uk-card-secondary.uk-card-body .uk-tab>*>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>*>a:focus,.uk-overlay-primary .uk-tab>*>a:focus,.uk-offcanvas-bar .uk-tab>*>a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-tab>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-card-primary.uk-card-body .uk-tab>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>.uk-active>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>.uk-active>a,.uk-overlay-primary .uk-tab>.uk-active>a,.uk-offcanvas-bar .uk-tab>.uk-active>a{color:#fff;border-color:#fff}.uk-light .uk-tab>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-card-primary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-tab>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-tab>.uk-disabled>a,.uk-overlay-primary .uk-tab>.uk-disabled>a,.uk-offcanvas-bar .uk-tab>.uk-disabled>a{color:rgba(255,255,255,0.5)}.uk-light .uk-slidenav,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav,.uk-card-primary.uk-card-body .uk-slidenav,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav,.uk-card-secondary.uk-card-body .uk-slidenav,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav,.uk-overlay-primary .uk-slidenav,.uk-offcanvas-bar .uk-slidenav{color:rgba(255,255,255,0.7)}.uk-light .uk-slidenav:hover,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-card-primary.uk-card-body .uk-slidenav:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav:hover,.uk-card-secondary.uk-card-body .uk-slidenav:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav:hover,.uk-overlay-primary .uk-slidenav:hover,.uk-offcanvas-bar .uk-slidenav:hover,.uk-light .uk-slidenav:focus,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:focus,.uk-card-primary.uk-card-body .uk-slidenav:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav:focus,.uk-card-secondary.uk-card-body .uk-slidenav:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav:focus,.uk-overlay-primary .uk-slidenav:focus,.uk-offcanvas-bar .uk-slidenav:focus{color:rgba(255,255,255,0.95)}.uk-light .uk-slidenav:active,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:active,.uk-card-primary.uk-card-body .uk-slidenav:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-slidenav:active,.uk-card-secondary.uk-card-body .uk-slidenav:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-slidenav:active,.uk-overlay-primary .uk-slidenav:active,.uk-offcanvas-bar .uk-slidenav:active{color:rgba(255,255,255,0.7)}.uk-light .uk-dotnav>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-card-primary.uk-card-body .uk-dotnav>*>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>*,.uk-card-secondary.uk-card-body .uk-dotnav>*>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>*,.uk-overlay-primary .uk-dotnav>*>*,.uk-offcanvas-bar .uk-dotnav>*>*{background-color:rgba(0,0,0,0);border-color:rgba(255,255,255,0.9)}.uk-light .uk-dotnav>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-card-primary.uk-card-body .uk-dotnav>*>:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>:hover,.uk-card-secondary.uk-card-body .uk-dotnav>*>:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>:hover,.uk-overlay-primary .uk-dotnav>*>:hover,.uk-offcanvas-bar .uk-dotnav>*>:hover,.uk-light .uk-dotnav>*>:focus,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:focus,.uk-card-primary.uk-card-body .uk-dotnav>*>:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>:focus,.uk-card-secondary.uk-card-body .uk-dotnav>*>:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>:focus,.uk-overlay-primary .uk-dotnav>*>:focus,.uk-offcanvas-bar .uk-dotnav>*>:focus{background-color:rgba(255,255,255,0.9);border-color:transparent}.uk-light .uk-dotnav>*>:active,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-card-primary.uk-card-body .uk-dotnav>*>:active,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>*>:active,.uk-card-secondary.uk-card-body .uk-dotnav>*>:active,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>*>:active,.uk-overlay-primary .uk-dotnav>*>:active,.uk-offcanvas-bar .uk-dotnav>*>:active{background-color:rgba(255,255,255,0.5);border-color:transparent}.uk-light .uk-dotnav>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-card-primary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-primary>:not([class*='uk-card-media']) .uk-dotnav>.uk-active>*,.uk-card-secondary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-secondary>:not([class*='uk-card-media']) .uk-dotnav>.uk-active>*,.uk-overlay-primary .uk-dotnav>.uk-active>*,.uk-offcanvas-bar .uk-dotnav>.uk-active>*{background-color:rgba(255,255,255,0.9);border-color:transparent}.uk-light .uk-accordion-title::after,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title::after,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title::after,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title::after,.uk-card-primary.uk-card-body .uk-accordion-title::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-accordion-title::after,.uk-card-secondary.uk-card-body .uk-accordion-title::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-accordion-title::after,.uk-overlay-primary .uk-accordion-title::after,.uk-offcanvas-bar .uk-accordion-title::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,0.7)%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,0.7)%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-open>.uk-accordion-title::after,.uk-section-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::after,.uk-section-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::after,.uk-tile-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::after,.uk-card-primary.uk-card-body .uk-open>.uk-accordion-title::after,.uk-card-primary>:not([class*='uk-card-media']) .uk-open>.uk-accordion-title::after,.uk-card-secondary.uk-card-body .uk-open>.uk-accordion-title::after,.uk-card-secondary>:not([class*='uk-card-media']) .uk-open>.uk-accordion-title::after,.uk-overlay-primary .uk-open>.uk-accordion-title::after,.uk-offcanvas-bar .uk-open>.uk-accordion-title::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba(255,255,255,0.7)%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-light .uk-iconnav>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-card-primary.uk-card-body .uk-iconnav>*>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>*>a,.uk-card-secondary.uk-card-body .uk-iconnav>*>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>*>a,.uk-overlay-primary .uk-iconnav>*>a,.uk-offcanvas-bar .uk-iconnav>*>a{color:rgba(255,255,255,0.5)}.uk-light .uk-iconnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-card-primary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>*>a:hover,.uk-overlay-primary .uk-iconnav>*>a:hover,.uk-offcanvas-bar .uk-iconnav>*>a:hover,.uk-light .uk-iconnav>*>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:focus,.uk-card-primary.uk-card-body .uk-iconnav>*>a:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>*>a:focus,.uk-card-secondary.uk-card-body .uk-iconnav>*>a:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>*>a:focus,.uk-overlay-primary .uk-iconnav>*>a:focus,.uk-offcanvas-bar .uk-iconnav>*>a:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-iconnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-card-primary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-primary>:not([class*='uk-card-media']) .uk-iconnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-secondary>:not([class*='uk-card-media']) .uk-iconnav>.uk-active>a,.uk-overlay-primary .uk-iconnav>.uk-active>a,.uk-offcanvas-bar .uk-iconnav>.uk-active>a{color:rgba(255,255,255,0.7)}.uk-light .uk-text-lead,.uk-section-primary:not(.uk-preserve-color) .uk-text-lead,.uk-section-secondary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-primary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-lead,.uk-card-primary.uk-card-body .uk-text-lead,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-lead,.uk-card-secondary.uk-card-body .uk-text-lead,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-lead,.uk-overlay-primary .uk-text-lead,.uk-offcanvas-bar .uk-text-lead{color:rgba(255,255,255,0.7)}.uk-light .uk-text-meta,.uk-section-primary:not(.uk-preserve-color) .uk-text-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-meta,.uk-card-primary.uk-card-body .uk-text-meta,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-meta,.uk-card-secondary.uk-card-body .uk-text-meta,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-meta,.uk-overlay-primary .uk-text-meta,.uk-offcanvas-bar .uk-text-meta{color:rgba(255,255,255,0.5)}.uk-light .uk-text-muted,.uk-section-primary:not(.uk-preserve-color) .uk-text-muted,.uk-section-secondary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-primary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-muted,.uk-card-primary.uk-card-body .uk-text-muted,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-muted,.uk-card-secondary.uk-card-body .uk-text-muted,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-muted,.uk-overlay-primary .uk-text-muted,.uk-offcanvas-bar .uk-text-muted{color:rgba(255,255,255,0.5) !important}.uk-light .uk-text-primary,.uk-section-primary:not(.uk-preserve-color) .uk-text-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-primary,.uk-card-primary.uk-card-body .uk-text-primary,.uk-card-primary>:not([class*='uk-card-media']) .uk-text-primary,.uk-card-secondary.uk-card-body .uk-text-primary,.uk-card-secondary>:not([class*='uk-card-media']) .uk-text-primary,.uk-overlay-primary .uk-text-primary,.uk-offcanvas-bar .uk-text-primary{color:rgba(255,255,255,0.7) !important}.uk-light .uk-column-divider,.uk-section-primary:not(.uk-preserve-color) .uk-column-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-column-divider,.uk-card-primary.uk-card-body .uk-column-divider,.uk-card-primary>:not([class*='uk-card-media']) .uk-column-divider,.uk-card-secondary.uk-card-body .uk-column-divider,.uk-card-secondary>:not([class*='uk-card-media']) .uk-column-divider,.uk-overlay-primary .uk-column-divider,.uk-offcanvas-bar .uk-column-divider{column-rule-color:rgba(255,255,255,0.2)}.uk-light .uk-logo,.uk-section-primary:not(.uk-preserve-color) .uk-logo,.uk-section-secondary:not(.uk-preserve-color) .uk-logo,.uk-tile-primary:not(.uk-preserve-color) .uk-logo,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo,.uk-card-primary.uk-card-body .uk-logo,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo,.uk-card-secondary.uk-card-body .uk-logo,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo,.uk-overlay-primary .uk-logo,.uk-offcanvas-bar .uk-logo{color:rgba(255,255,255,0.7)}.uk-light .uk-logo:hover,.uk-section-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:hover,.uk-card-primary.uk-card-body .uk-logo:hover,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo:hover,.uk-card-secondary.uk-card-body .uk-logo:hover,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo:hover,.uk-overlay-primary .uk-logo:hover,.uk-offcanvas-bar .uk-logo:hover,.uk-light .uk-logo:focus,.uk-section-primary:not(.uk-preserve-color) .uk-logo:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-logo:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-logo:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:focus,.uk-card-primary.uk-card-body .uk-logo:focus,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo:focus,.uk-card-secondary.uk-card-body .uk-logo:focus,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo:focus,.uk-overlay-primary .uk-logo:focus,.uk-offcanvas-bar .uk-logo:focus{color:rgba(255,255,255,0.7)}.uk-light .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-section-primary:not(.uk-preserve-color) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-section-secondary:not(.uk-preserve-color) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-tile-primary:not(.uk-preserve-color) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-tile-secondary:not(.uk-preserve-color) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-card-primary.uk-card-body .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-card-primary>:not([class*='uk-card-media']) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-card-secondary.uk-card-body .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-overlay-primary .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-offcanvas-bar .uk-logo>:not(.uk-logo-inverse):not(:only-of-type){display:none}.uk-light .uk-logo-inverse,.uk-section-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-section-secondary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo-inverse,.uk-card-primary.uk-card-body .uk-logo-inverse,.uk-card-primary>:not([class*='uk-card-media']) .uk-logo-inverse,.uk-card-secondary.uk-card-body .uk-logo-inverse,.uk-card-secondary>:not([class*='uk-card-media']) .uk-logo-inverse,.uk-overlay-primary .uk-logo-inverse,.uk-offcanvas-bar .uk-logo-inverse{display:inline}@media print{*,*::before,*::after{background:transparent !important;color:black !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}} diff --git a/tests/backend.rs b/tests/backend.rs deleted file mode 100644 index fdb1f6aeb..000000000 --- a/tests/backend.rs +++ /dev/null @@ -1,224 +0,0 @@ -#[macro_use] -extern crate lazy_static; -extern crate capnp; -extern crate toml; -extern crate tungstenite; -extern crate url; -extern crate webapp; - -use capnp::{ - message::{Builder, ReaderOptions}, - serialize_packed::{read_message, write_message}, -}; -use std::{fs::read_to_string, net::TcpStream, sync::Mutex, thread, time::Duration}; -use tungstenite::{connect, Message, WebSocket}; -use url::Url; -use webapp::{ - config::Config, - protocol_capnp::{request, response}, - Server, CONFIG_FILENAME, -}; - -lazy_static! { - static ref PORT: Mutex = Mutex::new(30000); -} - -fn create_testserver() -> WebSocket { - // Create the server thread - let config_string = read_to_string(CONFIG_FILENAME).unwrap(); - let mut config: Config = toml::from_str(&config_string).unwrap(); - let mut port = PORT.lock().unwrap(); - *port += 1; - config.server.port = port.to_string(); - config.server.tls = false; - let ws_url = format!("ws://{}:{}/ws", config.server.ip, config.server.port); - thread::spawn(move || Server::new(&config).unwrap().start()); - - // Wait until the server is up - thread::sleep(Duration::from_millis(300)); - - // Connect to the websocket - let (socket, _) = connect(Url::parse(&ws_url).unwrap()).unwrap(); - socket -} - -#[test] -fn succeed_to_login_with_username_and_password() { - // Given - let mut socket = create_testserver(); - - // When - let mut builder = Builder::new_default(); - let mut data = Vec::new(); - { - let mut creds = builder.init_root::().init_login().init_credentials(); - creds.set_username("username"); - creds.set_password("username"); - } - write_message(&mut data, &builder).unwrap(); - socket.write_message(Message::binary(data)).unwrap(); - - // Then - match socket.read_message().unwrap() { - Message::Binary(b) => { - let reader = read_message(&mut b.as_ref(), ReaderOptions::new()).unwrap(); - match reader.get_root::().unwrap().which().unwrap() { - response::Login(d) => match d.which().unwrap() { - response::login::Token(_) => {} - _ => panic!("Wrong response content"), - }, - _ => panic!("Wrong response type"), - }; - } - _ => panic!("Wrong message type"), - } -} - -#[test] -fn fail_to_login_with_wrong_username_and_password() { - // Given - let mut socket = create_testserver(); - - // When - let mut builder = Builder::new_default(); - let mut data = Vec::new(); - { - let mut creds = builder.init_root::().init_login().init_credentials(); - creds.set_username("username"); - creds.set_password("password"); - } - write_message(&mut data, &builder).unwrap(); - socket.write_message(Message::binary(data)).unwrap(); - - // Then - match socket.read_message().unwrap() { - Message::Binary(b) => { - let reader = read_message(&mut b.as_ref(), ReaderOptions::new()).unwrap(); - match reader.get_root::().unwrap().which().unwrap() { - response::Login(d) => match d.which().unwrap() { - response::login::Error(_) => {} - _ => panic!("Wrong response content"), - }, - _ => panic!("Wrong response type"), - }; - } - _ => panic!("Wrong message type"), - } -} - -#[test] -fn succeed_to_login_with_token() { - // Given - let mut socket = create_testserver(); - - // When - let mut builder = Builder::new_default(); - let mut data = Vec::new(); - { - let mut creds = builder.init_root::().init_login().init_credentials(); - creds.set_username("username"); - creds.set_password("username"); - } - write_message(&mut data, &builder).unwrap(); - socket.write_message(Message::binary(data)).unwrap(); - - // Then - let token = match socket.read_message().unwrap() { - Message::Binary(b) => { - let reader = read_message(&mut b.as_ref(), ReaderOptions::new()).unwrap(); - match reader.get_root::().unwrap().which().unwrap() { - response::Login(d) => match d.which().unwrap() { - response::login::Token(token) => token.unwrap().to_owned(), - _ => panic!("Wrong response content"), - }, - _ => panic!("Wrong response type"), - } - } - _ => panic!("Wrong message type"), - }; - - // And When - let mut token_data = Vec::new(); - builder.init_root::().init_login().set_token(&token); - write_message(&mut token_data, &builder).unwrap(); - socket.write_message(Message::binary(token_data)).unwrap(); - - // Then - match socket.read_message().unwrap() { - Message::Binary(b) => { - let reader = read_message(&mut b.as_ref(), ReaderOptions::new()).unwrap(); - match reader.get_root::().unwrap().which().unwrap() { - response::Login(d) => match d.which().unwrap() { - response::login::Token(_) => {} - _ => panic!("Wrong response content"), - }, - _ => panic!("Wrong response type"), - } - } - _ => panic!("Wrong message type"), - } -} - -#[test] -fn fail_to_login_with_wrong_token() { - // Given - let mut socket = create_testserver(); - - // When - let mut builder = Builder::new_default(); - let mut data = Vec::new(); - let token = "wrong_token".to_owned(); - builder.init_root::().init_login().set_token(&token); - write_message(&mut data, &builder).unwrap(); - socket.write_message(Message::binary(data)).unwrap(); - - // Then - match socket.read_message().unwrap() { - Message::Binary(b) => { - let reader = read_message(&mut b.as_ref(), ReaderOptions::new()).unwrap(); - match reader.get_root::().unwrap().which().unwrap() { - response::Login(d) => match d.which().unwrap() { - response::login::Error(_) => {} - _ => panic!("Wrong response content"), - }, - _ => panic!("Wrong response type"), - }; - } - _ => panic!("Wrong message type"), - } -} - -#[test] -fn succeed_to_logout() { - // Given - let mut socket = create_testserver(); - - // When - let mut builder = Builder::new_default(); - let mut data = Vec::new(); - let token = "token".to_owned(); - builder.init_root::().set_logout(&token); - write_message(&mut data, &builder).unwrap(); - socket.write_message(Message::binary(data)).unwrap(); - - // Then - match socket.read_message().unwrap() { - Message::Binary(b) => { - let reader = read_message(&mut b.as_ref(), ReaderOptions::new()).unwrap(); - match reader.get_root::().unwrap().which().unwrap() { - response::Logout(_) => {} - _ => panic!("Wrong response type"), - }; - } - _ => panic!("Wrong message type"), - } -} - -#[test] -fn succeed_to_close_the_connection() { - // Given - let mut socket = create_testserver(); - - // When, Then - assert!(socket.close(None).is_ok()); -}