diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index f45ca851..00000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: [dicedtomatoreal] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # ['lol'] diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index b58b603f..00000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 28a804d8..00000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 010fac52..00000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/typex.iml b/.idea/typex.iml deleted file mode 100644 index 24643cc3..00000000 --- a/.idea/typex.iml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7f..00000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/OLDREADME.md b/OLDREADME.md new file mode 100755 index 00000000..3f4fb797 --- /dev/null +++ b/OLDREADME.md @@ -0,0 +1,330 @@ +# TypeX + +A TypeScript based Image/File uploading server. Fast and Elegant. + +## Table of Contents + +1. [Prerequisites](#prerequisites) + 1. [Node](#node--typescript) + 2. [Common Databases](#common-databases) + 3. [Installing Database Drivers](#installing-database-drivers) + 1. [PostgreSQL](#getting-postgresql-drivers) + 2. [CockroachDB](#getting-cockroachdb-drivers) + 3. [MySQL](#getting-mysql-drivers) + 4. [MariaDB](#getting-mariadb-drivers) + 5. [Microsoft SQL Server](#getting-microsoft-sql-drivers) +2. [Updating TypeX](#updating-typex) +3. [Installation](#installation) + 1. [Get the Source](#get-the-source--install-dependencies) + 2. [Setting up configurations](#configuration-options) + 1. [Upload Size](#upload) + 2. [User Settings](#user-settings) + 3. [Site Settings](#site-settings) + 4. [SSL Settings](#site-ssl-settings) + 5. [Administrator user](#administrator-user) + 6. [Database configuration](#database-configuration) + 7. [Session Secret](#session-secret) + 8. [Particles.JS](#meta-configuration) + 3. [Example Config](#example-config) + 4. [Compiling Source](#compiling-typescript-for-running) + 5. [Running Compiled Source](#running-compiled-source) + +## Prerequisites + +Dependencies needed for running TypeX + +### Node & Typescript + +Node.JS is what runs the show, and you will need it before anything else. Install it [here](https://nodejs.org) + +Once Node is installed install Typescript by doing + +```sh +npm i typescript -g +``` + +Verify your installation by running these commands + +```sh +tsc -v +npm -v +node -v +``` + +They should all output something along the lines of + +```sh +-> tsc -v +Version 3.8.3 +-> npm -v +node 6.14.4 +-> node -v +v13.13.0 +``` + +### Common Databases + +- [PostgreSQL](https://www.postgresql.org/ "PostgresSQL") +- [CockroachDB](https://www.cockroachlabs.com/ "Cockroach Labs") +- [MySQL](https://www.mysql.com/ "MySQL") +- [MariaDB](https://www.mariadb.com/ "MariaDB") +- [Microsoft SQL Server](https://www.microsoft.com/en-us/sql-server/ "Microsoft SQL Server") +- [MongoDB](https://www.mongodb.com/ "MongoDB") (Coming soon!) + +(check out [this](https://github.com/typeorm/typeorm/blob/master/docs/connection-options.md) for all types, you will need to use a different ORM config later on, view [this](https://github.com/typeorm/typeorm/blob/master/docs/connection-options.md#common-connection-options) for every option, more on this on Database configuration setup step) + +### Installing Database Drivers + +In this installation step, you will be installing the drivers of your choice database. + +#### Getting PostgreSQL Drivers + +Run the following command in order to get PostgreSQL drivers + +```sh +npm i pg --save-dev +``` + +#### Getting CockroachDB Drivers + +Run the following command in order to get CockroachDB drivers + +```sh +npm i cockroachdb --save-dev +``` + +#### Getting MySQL Drivers + +Run the following command in order to get MySQL drivers + +```sh +npm i mysql --save-dev +``` + +#### Getting MariaDB Drivers + +Run the following command in order to get MariaDB drivers + +```sh +npm i mariadb --save-dev +``` + +#### Getting Microsoft SQL Drivers + +Run the following command in order to get Microsoft SQL drivers + +```sh +npm i mssql --save-dev +``` + +## Updating TypeX + +Updating TypeX, is very simple. You can use this one-liner to update and compile code. + +1. Run the following in the `typex` directory, if there were config changes, you should change them before this command. + +```sh +git pull && tsc -p . +``` + +2. After that, you just need to restart the process for changes to take effect. + +## Installation + +Now that you have considered what prerequisites you would like, lets actually install this! This installation is based on Linux systems, yet will work on both MacOSX and Windows with their respective commands + +### Get the Source & Install Dependencies + +```sh +git clone https://github.com/dicedtomatoreal/typex +cd typex +tsc -p . +npm start +``` + +### Configuration Options + +Every single configuration option will be listed here + +#### Upload + +**Config Property:** `upload` + +| Config Property | Type | Description / Expected Values | +| ------------------- | ------- | ------------------------------------------------------------ | +| `upload.fileLength` | integer | how long the random id for a file should be | +| `upload.tempDir` | string | temporary directory, files are stored here and then deleted. | +| `upload.uploadDir` | string | upload directory (where all uploads are stored) | +| `upload.route` | string | Route for uploads, default is /u, ex.`/u/hd27ua.png` | + +#### User Settings + +**Config Property:** `user` + +| Config Property | Type | Description / Expected Values | +| ------------------- | ------- | ------------------------------------------------------------ | +| `user.tokenLength` | integer | How long the randomly generated user token should be | + +#### Site Settings + +**Config Property:** `site` + +| Config Property | Type | Description / Expected Values | +| --------------- | ------- | ------------------------------------------------------ | +| `site.protocol` | integer | protocol (http or https) | +| `site.serveHTTP` | string | Port to run the web server on with HTTP (can be used with nginx + CloudFlare as a reverse proxy and let CloudFlare take care of SSL) | +| `site.serveHTTPS` | string | Port to run the web server on with HTTPS (only will be used if `site.protocol` is `https`) (you will need SSL certificates! See [this](#site-ssl-settings)) | +| `site.logRoutes` | boolean | Wether or not to log routes when they are requested | + +#### Site SSL Settings + +**Config Property:** `site.ssl` + +| Config Property | Type | Description / Expected Values | +| --------------- | ------ | ----------------------------------------------- | +| `site.ssl.key` | string | path to ssl private key. ex: `./ssl/server.key` | +| `site.ssl.cert` | string | path to ssl certificate. ex: `./ssl/cert.crt` | + +#### Administrator User + +**Config Property:** `administrator` + +| Config Property | Type | Description / Expected Values | +| ----------------------------- | ------ | -------------------------------------------------------------------------------------------------------- | +| `administrator.password` | string | password of administrator user (NOT RECOMENDED to use administrator user, set this to a SECURE password) | + +#### Database Configuration + +**Config Property:** `orm` + +| Config Property | Type | Description / Expected Values | +| ----------------- | -------- | --------------------------------------------------------------------------------- | +| `orm.type` | string | `mariadb`, `mysql`, `postgres`, `cockroach`, `mssql` | +| `orm.host` | string | `localhost` or different IP | +| `orm.port` | integer | `5432` or different pot | +| `orm.username` | string | username | +| `orm.password` | string | password | +| `orm.database` | string | database to use | +| `orm.synchronize` | boolean | synchronize database to database, or not | +| `orm.logging` | boolean | log all queries | +| `orm.entities` | string[] | entity paths (should not be edited, and should be `["out/src/entities/**/*.js"]`) | + +#### Session Secret + +**Config Property:** `sessionSecret` + +A Random string of characters (anything) + +#### Session Secret + +**Config Property:** `saltRounds` + +The ammount of salt rounds needed to salt a password! (used for password encryption) + +#### Meta Configuration + +**Config Property:** `meta` + +Particles.JS, can be enabled and it's config can be changed willingly. + +| Config Property | Type | Description / Expected Values | +| --------------- | ------ | -------------------------------------------------------------------------------------------- | +| `meta.favicon` | string | has to be in /public/assets folder and should be formatted as `"/public/assets/"` | +| `meta.title` | string | title of your server shows up like ` - Login` or `<title> - Dashboard` | + + +### Example Config + +```json +{ + "upload": { + "fileLength": 6, + "tempDir": "./temp", + "uploadDir": "./uploads", + "route": "/u" + }, + "shorten": { + "idLength": 4, + "route": "/s" + }, + "user": { + "tokenLength": 32 + }, + "site": { + "protocol": "http", + "returnProtocol": "https", + "ssl": { + "key": "./ssl/server.key", + "cert": "./ssl/server.crt" + }, + "serveHTTPS": 8000, + "serveHTTP": 443, + "logRoutes": true + }, + "administrator": { + "password": "1234" + }, + "orm": { + "type": "postgres", + "host": "localhost", + "port": 5432, + "username": "user", + "password": "1234", + "database": "typex", + "synchronize": true, + "logging": false, + "entities": [ + "out/src/entities/**/*.js" + ] + }, + "sessionSecret": "1234", + "saltRounds": 10, // You might get an error if its over a certain number, so choose carefully. + "meta": { + "favicon": "/public/assets/typex_small_circle.png", + "title": "TypeX" + }, + "discordWebhook": { + "enabled": true, + "url": "https://canary.discordapp.com/api/webhooks/id/token", + "username": "TypeX Logs", + "avatarURL": "https://domain/public/assets/typex_small_circle.png" + } +} +``` + +### Compiling Typescript for running + +Compile the Typescript code before running the code, or you can run it with `ts-node` which is not recommended. **_MAKE SURE YOU ARE IN THE PROJECT DIR!_** + +```sh +tsc -p . +``` + +### Running Compiled Source + +Run the webserver by running + +```sh +node out/src +``` + +## How you can upload + +These are the options you must pass when uploading a url or image/file + +### Uploader + +| Property | Value | +|-----------|-------------------------------------| +| URL | `https://<DOMAIN>/api/upload` | +| Header | `authorization: <TOKEN>` | +| Header | `content-type: multipart/form-data` | +| File name | `file` | + +### URL Shortener +| Property | Value | +|-----------|-------------------------------------| +| URL | `https://<DOMAIN>/api/shorten` | +| Header | `authorization: <TOKEN>` | +| Header | `content-type: application/json` | +| Data | `{"url": "<URL>"}` | diff --git a/README.md b/README.md index 3f4fb797..17b13551 100644 --- a/README.md +++ b/README.md @@ -1,330 +1,17 @@ # TypeX - -A TypeScript based Image/File uploading server. Fast and Elegant. - -## Table of Contents - -1. [Prerequisites](#prerequisites) - 1. [Node](#node--typescript) - 2. [Common Databases](#common-databases) - 3. [Installing Database Drivers](#installing-database-drivers) - 1. [PostgreSQL](#getting-postgresql-drivers) - 2. [CockroachDB](#getting-cockroachdb-drivers) - 3. [MySQL](#getting-mysql-drivers) - 4. [MariaDB](#getting-mariadb-drivers) - 5. [Microsoft SQL Server](#getting-microsoft-sql-drivers) -2. [Updating TypeX](#updating-typex) -3. [Installation](#installation) - 1. [Get the Source](#get-the-source--install-dependencies) - 2. [Setting up configurations](#configuration-options) - 1. [Upload Size](#upload) - 2. [User Settings](#user-settings) - 3. [Site Settings](#site-settings) - 4. [SSL Settings](#site-ssl-settings) - 5. [Administrator user](#administrator-user) - 6. [Database configuration](#database-configuration) - 7. [Session Secret](#session-secret) - 8. [Particles.JS](#meta-configuration) - 3. [Example Config](#example-config) - 4. [Compiling Source](#compiling-typescript-for-running) - 5. [Running Compiled Source](#running-compiled-source) - -## Prerequisites - -Dependencies needed for running TypeX - -### Node & Typescript - -Node.JS is what runs the show, and you will need it before anything else. Install it [here](https://nodejs.org) - -Once Node is installed install Typescript by doing - -```sh -npm i typescript -g -``` - -Verify your installation by running these commands - -```sh -tsc -v -npm -v -node -v -``` - -They should all output something along the lines of - -```sh --> tsc -v -Version 3.8.3 --> npm -v -node 6.14.4 --> node -v -v13.13.0 -``` - -### Common Databases - -- [PostgreSQL](https://www.postgresql.org/ "PostgresSQL") -- [CockroachDB](https://www.cockroachlabs.com/ "Cockroach Labs") -- [MySQL](https://www.mysql.com/ "MySQL") -- [MariaDB](https://www.mariadb.com/ "MariaDB") -- [Microsoft SQL Server](https://www.microsoft.com/en-us/sql-server/ "Microsoft SQL Server") -- [MongoDB](https://www.mongodb.com/ "MongoDB") (Coming soon!) - -(check out [this](https://github.com/typeorm/typeorm/blob/master/docs/connection-options.md) for all types, you will need to use a different ORM config later on, view [this](https://github.com/typeorm/typeorm/blob/master/docs/connection-options.md#common-connection-options) for every option, more on this on Database configuration setup step) - -### Installing Database Drivers - -In this installation step, you will be installing the drivers of your choice database. - -#### Getting PostgreSQL Drivers - -Run the following command in order to get PostgreSQL drivers - -```sh -npm i pg --save-dev -``` - -#### Getting CockroachDB Drivers - -Run the following command in order to get CockroachDB drivers - -```sh -npm i cockroachdb --save-dev -``` - -#### Getting MySQL Drivers - -Run the following command in order to get MySQL drivers - -```sh -npm i mysql --save-dev -``` - -#### Getting MariaDB Drivers - -Run the following command in order to get MariaDB drivers - -```sh -npm i mariadb --save-dev -``` - -#### Getting Microsoft SQL Drivers - -Run the following command in order to get Microsoft SQL drivers - -```sh -npm i mssql --save-dev -``` - -## Updating TypeX - -Updating TypeX, is very simple. You can use this one-liner to update and compile code. - -1. Run the following in the `typex` directory, if there were config changes, you should change them before this command. - -```sh -git pull && tsc -p . -``` - -2. After that, you just need to restart the process for changes to take effect. - -## Installation - -Now that you have considered what prerequisites you would like, lets actually install this! This installation is based on Linux systems, yet will work on both MacOSX and Windows with their respective commands - -### Get the Source & Install Dependencies - -```sh -git clone https://github.com/dicedtomatoreal/typex -cd typex -tsc -p . -npm start -``` - -### Configuration Options - -Every single configuration option will be listed here - -#### Upload - -**Config Property:** `upload` - -| Config Property | Type | Description / Expected Values | -| ------------------- | ------- | ------------------------------------------------------------ | -| `upload.fileLength` | integer | how long the random id for a file should be | -| `upload.tempDir` | string | temporary directory, files are stored here and then deleted. | -| `upload.uploadDir` | string | upload directory (where all uploads are stored) | -| `upload.route` | string | Route for uploads, default is /u, ex.`/u/hd27ua.png` | - -#### User Settings - -**Config Property:** `user` - -| Config Property | Type | Description / Expected Values | -| ------------------- | ------- | ------------------------------------------------------------ | -| `user.tokenLength` | integer | How long the randomly generated user token should be | - -#### Site Settings - -**Config Property:** `site` - -| Config Property | Type | Description / Expected Values | -| --------------- | ------- | ------------------------------------------------------ | -| `site.protocol` | integer | protocol (http or https) | -| `site.serveHTTP` | string | Port to run the web server on with HTTP (can be used with nginx + CloudFlare as a reverse proxy and let CloudFlare take care of SSL) | -| `site.serveHTTPS` | string | Port to run the web server on with HTTPS (only will be used if `site.protocol` is `https`) (you will need SSL certificates! See [this](#site-ssl-settings)) | -| `site.logRoutes` | boolean | Wether or not to log routes when they are requested | - -#### Site SSL Settings - -**Config Property:** `site.ssl` - -| Config Property | Type | Description / Expected Values | -| --------------- | ------ | ----------------------------------------------- | -| `site.ssl.key` | string | path to ssl private key. ex: `./ssl/server.key` | -| `site.ssl.cert` | string | path to ssl certificate. ex: `./ssl/cert.crt` | - -#### Administrator User - -**Config Property:** `administrator` - -| Config Property | Type | Description / Expected Values | -| ----------------------------- | ------ | -------------------------------------------------------------------------------------------------------- | -| `administrator.password` | string | password of administrator user (NOT RECOMENDED to use administrator user, set this to a SECURE password) | - -#### Database Configuration - -**Config Property:** `orm` - -| Config Property | Type | Description / Expected Values | -| ----------------- | -------- | --------------------------------------------------------------------------------- | -| `orm.type` | string | `mariadb`, `mysql`, `postgres`, `cockroach`, `mssql` | -| `orm.host` | string | `localhost` or different IP | -| `orm.port` | integer | `5432` or different pot | -| `orm.username` | string | username | -| `orm.password` | string | password | -| `orm.database` | string | database to use | -| `orm.synchronize` | boolean | synchronize database to database, or not | -| `orm.logging` | boolean | log all queries | -| `orm.entities` | string[] | entity paths (should not be edited, and should be `["out/src/entities/**/*.js"]`) | - -#### Session Secret - -**Config Property:** `sessionSecret` - -A Random string of characters (anything) - -#### Session Secret - -**Config Property:** `saltRounds` - -The ammount of salt rounds needed to salt a password! (used for password encryption) - -#### Meta Configuration - -**Config Property:** `meta` - -Particles.JS, can be enabled and it's config can be changed willingly. - -| Config Property | Type | Description / Expected Values | -| --------------- | ------ | -------------------------------------------------------------------------------------------- | -| `meta.favicon` | string | has to be in /public/assets folder and should be formatted as `"/public/assets/<file name>"` | -| `meta.title` | string | title of your server shows up like `<title> - Login` or `<title> - Dashboard` | - - -### Example Config - -```json -{ - "upload": { - "fileLength": 6, - "tempDir": "./temp", - "uploadDir": "./uploads", - "route": "/u" - }, - "shorten": { - "idLength": 4, - "route": "/s" - }, - "user": { - "tokenLength": 32 - }, - "site": { - "protocol": "http", - "returnProtocol": "https", - "ssl": { - "key": "./ssl/server.key", - "cert": "./ssl/server.crt" - }, - "serveHTTPS": 8000, - "serveHTTP": 443, - "logRoutes": true - }, - "administrator": { - "password": "1234" - }, - "orm": { - "type": "postgres", - "host": "localhost", - "port": 5432, - "username": "user", - "password": "1234", - "database": "typex", - "synchronize": true, - "logging": false, - "entities": [ - "out/src/entities/**/*.js" - ] - }, - "sessionSecret": "1234", - "saltRounds": 10, // You might get an error if its over a certain number, so choose carefully. - "meta": { - "favicon": "/public/assets/typex_small_circle.png", - "title": "TypeX" - }, - "discordWebhook": { - "enabled": true, - "url": "https://canary.discordapp.com/api/webhooks/id/token", - "username": "TypeX Logs", - "avatarURL": "https://domain/public/assets/typex_small_circle.png" - } -} -``` - -### Compiling Typescript for running - -Compile the Typescript code before running the code, or you can run it with `ts-node` which is not recommended. **_MAKE SURE YOU ARE IN THE PROJECT DIR!_** - -```sh -tsc -p . -``` - -### Running Compiled Source - -Run the webserver by running - -```sh -node out/src -``` - -## How you can upload - -These are the options you must pass when uploading a url or image/file - -### Uploader - -| Property | Value | -|-----------|-------------------------------------| -| URL | `https://<DOMAIN>/api/upload` | -| Header | `authorization: <TOKEN>` | -| Header | `content-type: multipart/form-data` | -| File name | `file` | - -### URL Shortener -| Property | Value | -|-----------|-------------------------------------| -| URL | `https://<DOMAIN>/api/shorten` | -| Header | `authorization: <TOKEN>` | -| Header | `content-type: application/json` | -| Data | `{"url": "<URL>"}` | +TypeX is an elegant, simple, uploader! + +# Images +![](https://cdn.diced.wtf/u/F1vtRX.png) +![](https://cdn.diced.wtf/u/a5BTaP.png) +![](https://cdn.diced.wtf/u/bdntjm.png) +![](https://cdn.diced.wtf/u/s8ulbP.png) +![](https://cdn.diced.wtf/u/DU7Bbr.png) +![](https://cdn.diced.wtf/u/fQMe1r.png) +![](https://cdn.diced.wtf/u/VTXMbo.png) + +# Bugs? +Make sure to open an issue if you think you ran into an issue, or need help with anything. + +# Where is all the old information here? +All configuration options have been moved to the wiki, as the README was getting too long and hard to manage. \ No newline at end of file diff --git a/package-lock.json b/package-lock.json old mode 100644 new mode 100755 index 43872ff5..412d95e0 --- a/package-lock.json +++ b/package-lock.json @@ -12,16 +12,6 @@ "fecha": "^4.1.0" } }, - "@forevolve/bootstrap-dark": { - "version": "1.0.0-alpha.981", - "resolved": "https://registry.npmjs.org/@forevolve/bootstrap-dark/-/bootstrap-dark-1.0.0-alpha.981.tgz", - "integrity": "sha512-3oN8O8nrbfziK4d0QJ3xcL7zctaEWiNaPGX90xsuXxCoW9kVwRbb1Mz97W/yf/8vklq3vycqz9ieCAUY92P89A==", - "requires": { - "bootstrap": "^4.4.1", - "jquery": "^3.4.1", - "popper.js": "^1.16.1" - } - }, "@overnightjs/core": { "version": "1.6.15", "resolved": "https://registry.npmjs.org/@overnightjs/core/-/core-1.6.15.tgz", @@ -309,11 +299,6 @@ "type-is": "~1.6.17" } }, - "bootstrap": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.4.1.tgz", - "integrity": "sha512-tbx5cHubwE6e2ZG7nqM3g/FZ5PQEDMWmMGNrCUBVRPHXTJaH7CBDdsLeu3eCh3B1tzAxTnAbtmrzvWEvT2NNEA==" - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -961,11 +946,6 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, - "jquery": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.0.tgz", - "integrity": "sha512-Xb7SVYMvygPxbFMpTFQiHh1J7HClEaThguL15N/Gg37Lri/qKyhRGZYzHRyLH8Stq3Aow0LsHO2O2ci86fCrNQ==" - }, "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", @@ -1389,11 +1369,6 @@ "split": "^1.0.0" } }, - "popper.js": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", - "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" - }, "postgres-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", @@ -1638,6 +1613,19 @@ "memory-pager": "^1.0.2" } }, + "spectre.css": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/spectre.css/-/spectre.css-0.5.8.tgz", + "integrity": "sha512-3N4WocWY+Dl6b3e5v3nsZYyp+VSDcBfGDzyyHw/H78ie9BoAhHkxmrhLxo9y8RadxYzVrPjfPdlev3hXEUzR2w==" + }, + "spectre.css-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/spectre.css-js/-/spectre.css-js-1.0.3.tgz", + "integrity": "sha512-6x/1gPxgr/9BEzZsyEe2zQ0kxtUzj3kQOiNOB+GSIGV9QadbwHjeNA2WaofdKZM8Kp30N+l8NVMFE+PHuOdmKw==", + "requires": { + "spectre.css": "^0.5.8" + } + }, "split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", diff --git a/package.json b/package.json old mode 100644 new mode 100755 index 1d92286d..1891e742 --- a/package.json +++ b/package.json @@ -1,13 +1,12 @@ { "name": "typex", - "version": "0.5.0", + "version": "2.0.0", "private": true, "scripts": { "start": "node out/src" }, "dependencies": { "@ayanaware/logger": "^2.2.1", - "@forevolve/bootstrap-dark": "^1.0.0-alpha.981", "@overnightjs/core": "^1.6.15", "@types/bcrypt": "^3.0.0", "@types/cookie-parser": "^1.4.2", @@ -23,10 +22,11 @@ "mime": "^2.4.4", "multer": "^1.4.2", "node-fetch": "^2.6.0", + "spectre.css": "^0.5.8", "typeorm": "^0.2.24" }, "devDependencies": { "mongodb": "^3.5.8", "pg": "^8.0.3" } -} +} \ No newline at end of file diff --git a/public/assets/typex-small.png b/public/assets/typex-small.png old mode 100644 new mode 100755 diff --git a/public/assets/typex.png b/public/assets/typex.png old mode 100644 new mode 100755 diff --git a/public/assets/typex_circle.png b/public/assets/typex_circle.png old mode 100644 new mode 100755 diff --git a/public/assets/typex_small.png b/public/assets/typex_small.png old mode 100644 new mode 100755 diff --git a/public/assets/typex_small_circle.png b/public/assets/typex_small_circle.png old mode 100644 new mode 100755 diff --git a/public/css/bootstrap-dark.min.css b/public/css/bootstrap-dark.min.css deleted file mode 100644 index b2855b83..00000000 --- a/public/css/bootstrap-dark.min.css +++ /dev/null @@ -1 +0,0 @@ -:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#d3d3d3;text-align:left;background-color:#191d21}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#adadad;text-decoration:none;background-color:transparent}a:hover{color:#878787;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(255,255,255,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.33333%;max-width:8.33333%}.col-2{flex:0 0 16.66667%;max-width:16.66667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333%;max-width:33.33333%}.col-5{flex:0 0 41.66667%;max-width:41.66667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333%;max-width:58.33333%}.col-8{flex:0 0 66.66667%;max-width:66.66667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333%;max-width:83.33333%}.col-11{flex:0 0 91.66667%;max-width:91.66667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;margin-bottom:1rem;color:#d3d3d3}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #343a40}.table thead th{vertical-align:bottom;border-bottom:2px solid #343a40}.table tbody+tbody{border-top:2px solid #343a40}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #343a40}.table-bordered td,.table-bordered th{border:1px solid #343a40}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#d3d3d3;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#dee2e6;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#343a40}.table-dark{color:#dee2e6;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.table-primary,.table-primary>td,.table-primary>th{color:#212529}.table-hover .table-primary:hover{color:#212529}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{color:#212529}.table-secondary,.table-secondary>td,.table-secondary>th{color:#212529}.table-hover .table-secondary:hover{color:#212529}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{color:#212529}.table-success,.table-success>td,.table-success>th{color:#212529}.table-hover .table-success:hover{color:#212529}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{color:#212529}.table-info,.table-info>td,.table-info>th{color:#212529}.table-hover .table-info:hover{color:#212529}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{color:#212529}.table-warning,.table-warning>td,.table-warning>th{color:#212529}.table-hover .table-warning:hover{color:#212529}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{color:#212529}.table-danger,.table-danger>td,.table-danger>th{color:#212529}.table-hover .table-danger:hover{color:#212529}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{color:#212529}.table-light,.table-light>td,.table-light>th{color:#212529}.table-hover .table-light:hover{color:#212529}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{color:#212529}.table-dark,.table-dark>td,.table-dark>th{color:#212529}.table-hover .table-dark:hover{color:#212529}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{color:#212529}.table-active,.table-active>td,.table-active>th{color:#ced4da}.table-hover .table-active:hover{color:#ced4da}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{color:#ced4da}.table-dark{color:#dee2e6}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#dee2e6;background-color:#000;background-clip:padding-box;border:1px solid #6c757d;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #dee2e6}.form-control:focus{color:#dee2e6;background-color:#191d21;border-color:#b3d7ff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#343a40;opacity:1}select.form-control:focus::-ms-value{color:#dee2e6;background-color:#000}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#ced4da;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #000 no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#ced4da;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #000 no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#d3d3d3;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#d3d3d3;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#ced4da;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#ced4da;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#ced4da;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(31,136,249,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#ced4da;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#ced4da;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(31,136,249,.5)}.btn-secondary{color:#ced4da;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#ced4da;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#ced4da;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(123,131,139,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#ced4da;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#ced4da;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(123,131,139,.5)}.btn-success{color:#ced4da;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#ced4da;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#ced4da;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(65,174,91,.5)}.btn-success.disabled,.btn-success:disabled{color:#ced4da;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#ced4da;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(65,174,91,.5)}.btn-info{color:#ced4da;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#ced4da;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#ced4da;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(50,170,189,.5)}.btn-info.disabled,.btn-info:disabled{color:#ced4da;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#ced4da;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(50,170,189,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#ced4da;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#ced4da;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#ced4da;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(218,77,91,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#ced4da;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#ced4da;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(218,77,91,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#ced4da;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#ced4da;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#ced4da;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(75,81,87,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#ced4da;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#ced4da;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(75,81,87,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#ced4da;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#ced4da;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#ced4da;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#ced4da;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#ced4da;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#ced4da;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#ced4da;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#ced4da;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#ced4da;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#ced4da;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#ced4da;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#ced4da;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#adadad;text-decoration:none}.btn-link:hover{color:#878787;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#d3d3d3;text-align:left;list-style:none;background-color:#000;background-clip:padding-box;border:1px solid rgba(255,255,255,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #343a40}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#f8f9fa;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#fff;text-decoration:none;background-color:#212529}.dropdown-item.active,.dropdown-item:active{color:#000;text-decoration:none;background-color:#3395ff}.dropdown-item.disabled,.dropdown-item:disabled{color:#ced4da;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#ced4da;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#f8f9fa}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;flex:1 1 0%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#dee2e6;text-align:center;white-space:nowrap;background-color:#343a40;border:1px solid #6c757d;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.input-group-append>.custom-select{border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.input-group-prepend>.custom-select{border-top-right-radius:0;border-bottom-right-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#dee2e6;vertical-align:middle;background:#000 url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #6c757d;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#dee2e6;background-color:#000}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#ced4da;background-color:#343a40}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #dee2e6}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid rgba(255,255,255,.125)}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#495057 #495057 rgba(255,255,255,.125)}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#f8f9fa;background-color:#191d21;border-color:#495057 #495057 #191d21}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#212529;background-clip:border-box;border:1px solid rgba(255,255,255,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;min-height:1px;padding:1.25rem;color:#e9ecef}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(255,255,255,.03);border-bottom:1px solid rgba(255,255,255,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(255,255,255,.03);border-top:1px solid rgba(255,255,255,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img,.card-img-bottom,.card-img-top{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:flex;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#343a40;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#ced4da;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#ced4da}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#adadad;background-color:#000;border:1px solid #495057}.page-link:hover{z-index:2;color:#878787;text-decoration:none;background-color:#343a40;border-color:#495057}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#000;background-color:#3395ff;border-color:#3395ff}.page-item.disabled .page-link{color:#ced4da;pointer-events:none;cursor:auto;background-color:#000;border-color:#495057}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#ced4da;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#ced4da;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#ced4da;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#ced4da;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#ced4da;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#ced4da;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#ced4da;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#ced4da;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#ced4da;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#ced4da;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#ced4da;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#ced4da;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#343a40;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#dee2e6;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#dee2e6;text-decoration:none;background-color:#212529}.list-group-item-action:active{color:#d3d3d3;background-color:#343a40}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:rgba(25,29,33,.05);border:1px solid rgba(255,255,255,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#ced4da;pointer-events:none;background-color:rgba(25,29,33,.05)}.list-group-item.active{z-index:2;color:#000;background-color:#3395ff;border-color:#3395ff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal .list-group-item.active{margin-top:0}.list-group-horizontal .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm .list-group-item.active{margin-top:0}.list-group-horizontal-sm .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md .list-group-item.active{margin-top:0}.list-group-horizontal-md .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg .list-group-item.active{margin-top:0}.list-group-horizontal-lg .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl .list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl .list-group-item.active{margin-top:0}.list-group-horizontal-xl .list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl .list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush .list-group-item{border-right-width:0;border-left-width:0;border-radius:0}.list-group-flush .list-group-item:first-child{border-top-width:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#fff;text-shadow:0 1px 0 #000;opacity:.5}.close:hover{color:#fff;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(0,0,0,.85);background-clip:padding-box;border:1px solid rgba(255,255,255,.1);box-shadow:0 .25rem .75rem rgba(255,255,255,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#ced4da;background-color:rgba(0,0,0,.85);background-clip:padding-box;border-bottom:1px solid rgba(255,255,255,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#191d21;background-clip:padding-box;border:1px solid rgba(255,255,255,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #343a40;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #343a40;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{transform:rotate(360deg)}}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #343a40!important}.border-top{border-top:1px solid #343a40!important}.border-right{border-right:1px solid #343a40!important}.border-bottom{border-bottom:1px solid #343a40!important}.border-left{border-left:1px solid #343a40!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.85714%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#d3d3d3!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#343a40}.table .thead-dark th{color:inherit;border-color:#343a40}} \ No newline at end of file diff --git a/public/css/particles.css b/public/css/particles.css deleted file mode 100644 index 07f7a7f1..00000000 --- a/public/css/particles.css +++ /dev/null @@ -1,17 +0,0 @@ -canvas{ - vertical-align: text-bottom; - } - #particles-js canvas{ - position:absolute; - z-index: -1; - width: 100%; - height: auto; - background-image: url(""); - background-repeat: no-repeat; - background-size: cover; - background-position: 50% 50%; } - - - .count-particles{ - border-radius: 0 0 3px 3px; - } \ No newline at end of file diff --git a/public/css/spectre-exp.css b/public/css/spectre-exp.css new file mode 100644 index 00000000..e099ea7b --- /dev/null +++ b/public/css/spectre-exp.css @@ -0,0 +1,1227 @@ +/*! Spectre.css Experimentals v0.5.8 | MIT License | github.com/picturepan2/spectre */ +.form-autocomplete { + position: relative; +} + +.form-autocomplete .form-autocomplete-input { + align-content: flex-start; + display: flex; + display: -ms-flexbox; + -ms-flex-line-pack: start; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + height: auto; + min-height: 1.6rem; + padding: .1rem; +} + +.form-autocomplete .form-autocomplete-input.is-focused { + border-color: #5755d9; + box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); +} + +.form-autocomplete .form-autocomplete-input .form-input { + border-color: transparent; + box-shadow: none; + display: inline-block; + -ms-flex: 1 0 auto; + flex: 1 0 auto; + height: 1.2rem; + line-height: .8rem; + margin: .1rem; + width: auto; +} + +.form-autocomplete .menu { + left: 0; + position: absolute; + top: 100%; + width: 100%; +} + +.form-autocomplete.autocomplete-oneline .form-autocomplete-input { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + overflow-x: auto; +} + +.form-autocomplete.autocomplete-oneline .chip { + -ms-flex: 1 0 auto; + flex: 1 0 auto; +} + +.calendar { + border: .05rem solid #dadee4; + border-radius: .1rem; + display: block; + min-width: 280px; +} + +.calendar .calendar-nav { + align-items: center; + background: #f7f8f9; + border-top-left-radius: .1rem; + border-top-right-radius: .1rem; + display: flex; + display: -ms-flexbox; + -ms-flex-align: center; + font-size: .9rem; + padding: .4rem; +} + +.calendar .calendar-header, +.calendar .calendar-body { + display: flex; + display: -ms-flexbox; + -ms-flex-pack: center; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + justify-content: center; + padding: .4rem 0; +} + +.calendar .calendar-header .calendar-date, +.calendar .calendar-body .calendar-date { + -ms-flex: 0 0 14.28%; + flex: 0 0 14.28%; + max-width: 14.28%; +} + +.calendar .calendar-header { + background: #f7f8f9; + border-bottom: .05rem solid #dadee4; + color: #bcc3ce; + font-size: .7rem; + text-align: center; +} + +.calendar .calendar-body { + color: #66758c; +} + +.calendar .calendar-date { + border: 0; + padding: .2rem; +} + +.calendar .calendar-date .date-item { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: transparent; + border: .05rem solid transparent; + border-radius: 50%; + color: #66758c; + cursor: pointer; + font-size: .7rem; + height: 1.4rem; + line-height: 1rem; + outline: none; + padding: .1rem; + position: relative; + text-align: center; + text-decoration: none; + transition: background .2s, border .2s, box-shadow .2s, color .2s; + vertical-align: middle; + white-space: nowrap; + width: 1.4rem; +} + +.calendar .calendar-date .date-item.date-today { + border-color: #e5e5f9; + color: #5755d9; +} + +.calendar .calendar-date .date-item:focus { + box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); +} + +.calendar .calendar-date .date-item:focus, +.calendar .calendar-date .date-item:hover { + background: #fefeff; + border-color: #e5e5f9; + color: #5755d9; + text-decoration: none; +} + +.calendar .calendar-date .date-item:active, +.calendar .calendar-date .date-item.active { + background: #4b48d6; + border-color: #3634d2; + color: #fff; +} + +.calendar .calendar-date .date-item.badge::after { + position: absolute; + right: 3px; + top: 3px; + transform: translate(50%, -50%); +} + +.calendar .calendar-date .date-item:disabled, +.calendar .calendar-date .date-item.disabled, +.calendar .calendar-date .calendar-event:disabled, +.calendar .calendar-date .calendar-event.disabled { + cursor: default; + opacity: .25; + pointer-events: none; +} + +.calendar .calendar-date.prev-month .date-item, +.calendar .calendar-date.prev-month .calendar-event, +.calendar .calendar-date.next-month .date-item, +.calendar .calendar-date.next-month .calendar-event { + opacity: .25; +} + +.calendar .calendar-range { + position: relative; +} + +.calendar .calendar-range::before { + background: #f1f1fc; + content: ""; + height: 1.4rem; + left: 0; + position: absolute; + right: 0; + top: 50%; + transform: translateY(-50%); +} + +.calendar .calendar-range.range-start::before { + left: 50%; +} + +.calendar .calendar-range.range-end::before { + right: 50%; +} + +.calendar .calendar-range.range-start .date-item, +.calendar .calendar-range.range-end .date-item { + background: #4b48d6; + border-color: #3634d2; + color: #fff; +} + +.calendar .calendar-range .date-item { + color: #5755d9; +} + +.calendar.calendar-lg .calendar-body { + padding: 0; +} + +.calendar.calendar-lg .calendar-body .calendar-date { + border-bottom: .05rem solid #dadee4; + border-right: .05rem solid #dadee4; + display: flex; + display: -ms-flexbox; + -ms-flex-direction: column; + flex-direction: column; + height: 5.5rem; + padding: 0; +} + +.calendar.calendar-lg .calendar-body .calendar-date:nth-child(7n) { + border-right: 0; +} + +.calendar.calendar-lg .calendar-body .calendar-date:nth-last-child(-n+7) { + border-bottom: 0; +} + +.calendar.calendar-lg .date-item { + align-self: flex-end; + -ms-flex-item-align: end; + height: 1.4rem; + margin-right: .2rem; + margin-top: .2rem; +} + +.calendar.calendar-lg .calendar-range::before { + top: 19px; +} + +.calendar.calendar-lg .calendar-range.range-start::before { + left: auto; + width: 19px; +} + +.calendar.calendar-lg .calendar-range.range-end::before { + right: 19px; +} + +.calendar.calendar-lg .calendar-events { + flex-grow: 1; + -ms-flex-positive: 1; + line-height: 1; + overflow-y: auto; + padding: .2rem; +} + +.calendar.calendar-lg .calendar-event { + border-radius: .1rem; + display: block; + font-size: .7rem; + margin: .1rem auto; + overflow: hidden; + padding: 3px 4px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.carousel .carousel-locator:nth-of-type(1):checked ~ .carousel-container .carousel-item:nth-of-type(1), +.carousel .carousel-locator:nth-of-type(2):checked ~ .carousel-container .carousel-item:nth-of-type(2), +.carousel .carousel-locator:nth-of-type(3):checked ~ .carousel-container .carousel-item:nth-of-type(3), +.carousel .carousel-locator:nth-of-type(4):checked ~ .carousel-container .carousel-item:nth-of-type(4), +.carousel .carousel-locator:nth-of-type(5):checked ~ .carousel-container .carousel-item:nth-of-type(5), +.carousel .carousel-locator:nth-of-type(6):checked ~ .carousel-container .carousel-item:nth-of-type(6), +.carousel .carousel-locator:nth-of-type(7):checked ~ .carousel-container .carousel-item:nth-of-type(7), +.carousel .carousel-locator:nth-of-type(8):checked ~ .carousel-container .carousel-item:nth-of-type(8) { + animation: carousel-slidein .75s ease-in-out 1; + opacity: 1; + z-index: 100; +} + +.carousel .carousel-locator:nth-of-type(1):checked ~ .carousel-nav .nav-item:nth-of-type(1), +.carousel .carousel-locator:nth-of-type(2):checked ~ .carousel-nav .nav-item:nth-of-type(2), +.carousel .carousel-locator:nth-of-type(3):checked ~ .carousel-nav .nav-item:nth-of-type(3), +.carousel .carousel-locator:nth-of-type(4):checked ~ .carousel-nav .nav-item:nth-of-type(4), +.carousel .carousel-locator:nth-of-type(5):checked ~ .carousel-nav .nav-item:nth-of-type(5), +.carousel .carousel-locator:nth-of-type(6):checked ~ .carousel-nav .nav-item:nth-of-type(6), +.carousel .carousel-locator:nth-of-type(7):checked ~ .carousel-nav .nav-item:nth-of-type(7), +.carousel .carousel-locator:nth-of-type(8):checked ~ .carousel-nav .nav-item:nth-of-type(8) { + color: #f7f8f9; +} + +.carousel { + background: #f7f8f9; + display: block; + overflow: hidden; + -webkit-overflow-scrolling: touch; + position: relative; + width: 100%; + z-index: 1; +} + +.carousel .carousel-container { + height: 100%; + left: 0; + position: relative; +} + +.carousel .carousel-container::before { + content: ""; + display: block; + padding-bottom: 56.25%; +} + +.carousel .carousel-container .carousel-item { + animation: carousel-slideout 1s ease-in-out 1; + height: 100%; + left: 0; + margin: 0; + opacity: 0; + position: absolute; + top: 0; + width: 100%; +} + +.carousel .carousel-container .carousel-item:hover .item-prev, +.carousel .carousel-container .carousel-item:hover .item-next { + opacity: 1; +} + +.carousel .carousel-container .item-prev, +.carousel .carousel-container .item-next { + background: rgba(247, 248, 249, .25); + border-color: rgba(247, 248, 249, .5); + color: #f7f8f9; + opacity: 0; + position: absolute; + top: 50%; + transform: translateY(-50%); + transition: all .4s; + z-index: 100; +} + +.carousel .carousel-container .item-prev { + left: 1rem; +} + +.carousel .carousel-container .item-next { + right: 1rem; +} + +.carousel .carousel-nav { + bottom: .4rem; + display: flex; + display: -ms-flexbox; + -ms-flex-pack: center; + justify-content: center; + left: 50%; + position: absolute; + transform: translateX(-50%); + width: 10rem; + z-index: 100; +} + +.carousel .carousel-nav .nav-item { + color: rgba(247, 248, 249, .5); + display: block; + -ms-flex: 1 0 auto; + flex: 1 0 auto; + height: 1.6rem; + margin: .2rem; + max-width: 2.5rem; + position: relative; +} + +.carousel .carousel-nav .nav-item::before { + background: currentColor; + content: ""; + display: block; + height: .1rem; + position: absolute; + top: .5rem; + width: 100%; +} + +@keyframes carousel-slidein { + 0% { + transform: translateX(100%); + } + 100% { + transform: translateX(0); + } +} + +@keyframes carousel-slideout { + 0% { + opacity: 1; + transform: translateX(0); + } + 100% { + opacity: 1; + transform: translateX(-50%); + } +} + +.comparison-slider { + height: 50vh; + overflow: hidden; + -webkit-overflow-scrolling: touch; + position: relative; + width: 100%; +} + +.comparison-slider .comparison-before, +.comparison-slider .comparison-after { + height: 100%; + left: 0; + margin: 0; + overflow: hidden; + position: absolute; + top: 0; +} + +.comparison-slider .comparison-before img, +.comparison-slider .comparison-after img { + height: 100%; + object-fit: cover; + object-position: left center; + position: absolute; + width: 100%; +} + +.comparison-slider .comparison-before { + width: 100%; + z-index: 1; +} + +.comparison-slider .comparison-before .comparison-label { + right: .8rem; +} + +.comparison-slider .comparison-after { + max-width: 100%; + min-width: 0; + z-index: 2; +} + +.comparison-slider .comparison-after::before { + background: transparent; + content: ""; + cursor: default; + height: 100%; + left: 0; + position: absolute; + right: .8rem; + top: 0; + z-index: 1; +} + +.comparison-slider .comparison-after::after { + background: currentColor; + border-radius: 50%; + box-shadow: 0 -5px, 0 5px; + color: #fff; + content: ""; + height: 3px; + position: absolute; + right: .4rem; + top: 50%; + transform: translate(50%, -50%); + width: 3px; +} + +.comparison-slider .comparison-after .comparison-label { + left: .8rem; +} + +.comparison-slider .comparison-resizer { + animation: first-run 1.5s 1 ease-in-out; + cursor: ew-resize; + height: .8rem; + left: 0; + max-width: 100%; + min-width: .8rem; + opacity: 0; + outline: none; + position: relative; + resize: horizontal; + top: 50%; + transform: translateY(-50%) scaleY(30); + width: 0; +} + +.comparison-slider .comparison-label { + background: rgba(48, 55, 66, .5); + bottom: .8rem; + color: #fff; + padding: .2rem .4rem; + position: absolute; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +@keyframes first-run { + 0% { + width: 0; + } + 25% { + width: 2.4rem; + } + 50% { + width: .8rem; + } + 75% { + width: 1.2rem; + } + 100% { + width: 0; + } +} + +.filter .filter-tag#tag-0:checked ~ .filter-nav .chip[for="tag-0"], +.filter .filter-tag#tag-1:checked ~ .filter-nav .chip[for="tag-1"], +.filter .filter-tag#tag-2:checked ~ .filter-nav .chip[for="tag-2"], +.filter .filter-tag#tag-3:checked ~ .filter-nav .chip[for="tag-3"], +.filter .filter-tag#tag-4:checked ~ .filter-nav .chip[for="tag-4"], +.filter .filter-tag#tag-5:checked ~ .filter-nav .chip[for="tag-5"], +.filter .filter-tag#tag-6:checked ~ .filter-nav .chip[for="tag-6"], +.filter .filter-tag#tag-7:checked ~ .filter-nav .chip[for="tag-7"], +.filter .filter-tag#tag-8:checked ~ .filter-nav .chip[for="tag-8"] { + background: #5755d9; + color: #fff; +} + +.filter .filter-tag#tag-1:checked ~ .filter-body .filter-item:not([data-tag~="tag-1"]), +.filter .filter-tag#tag-2:checked ~ .filter-body .filter-item:not([data-tag~="tag-2"]), +.filter .filter-tag#tag-3:checked ~ .filter-body .filter-item:not([data-tag~="tag-3"]), +.filter .filter-tag#tag-4:checked ~ .filter-body .filter-item:not([data-tag~="tag-4"]), +.filter .filter-tag#tag-5:checked ~ .filter-body .filter-item:not([data-tag~="tag-5"]), +.filter .filter-tag#tag-6:checked ~ .filter-body .filter-item:not([data-tag~="tag-6"]), +.filter .filter-tag#tag-7:checked ~ .filter-body .filter-item:not([data-tag~="tag-7"]), +.filter .filter-tag#tag-8:checked ~ .filter-body .filter-item:not([data-tag~="tag-8"]) { + display: none; +} + +.filter .filter-nav { + margin: .4rem 0; +} + +.filter .filter-body { + display: flex; + display: -ms-flexbox; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} + +.meter { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: #f7f8f9; + border: 0; + border-radius: .1rem; + display: block; + height: .8rem; + width: 100%; +} + +.meter::-webkit-meter-inner-element { + display: block; +} + +.meter::-webkit-meter-bar, +.meter::-webkit-meter-optimum-value, +.meter::-webkit-meter-suboptimum-value, +.meter::-webkit-meter-even-less-good-value { + border-radius: .1rem; +} + +.meter::-webkit-meter-bar { + background: #f7f8f9; +} + +.meter::-webkit-meter-optimum-value { + background: #32b643; +} + +.meter::-webkit-meter-suboptimum-value { + background: #ffb700; +} + +.meter::-webkit-meter-even-less-good-value { + background: #e85600; +} + +.meter::-moz-meter-bar, +.meter:-moz-meter-optimum, +.meter:-moz-meter-sub-optimum, +.meter:-moz-meter-sub-sub-optimum { + border-radius: .1rem; +} + +.meter:-moz-meter-optimum::-moz-meter-bar { + background: #32b643; +} + +.meter:-moz-meter-sub-optimum::-moz-meter-bar { + background: #ffb700; +} + +.meter:-moz-meter-sub-sub-optimum::-moz-meter-bar { + background: #e85600; +} + +.off-canvas { + display: flex; + display: -ms-flexbox; + -ms-flex-flow: nowrap; + flex-flow: nowrap; + height: 100%; + position: relative; + width: 100%; +} + +.off-canvas .off-canvas-toggle { + display: block; + left: .4rem; + position: absolute; + top: .4rem; + transition: none; + z-index: 1; +} + +.off-canvas .off-canvas-sidebar { + background: #f7f8f9; + bottom: 0; + left: 0; + min-width: 10rem; + overflow-y: auto; + position: fixed; + top: 0; + transform: translateX(-100%); + transition: transform .25s; + z-index: 200; +} + +.off-canvas .off-canvas-content { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + height: 100%; + padding: .4rem .4rem .4rem 4rem; +} + +.off-canvas .off-canvas-overlay { + background: rgba(48, 55, 66, .1); + border-color: transparent; + border-radius: 0; + bottom: 0; + display: none; + height: 100%; + left: 0; + position: fixed; + right: 0; + top: 0; + width: 100%; +} + +.off-canvas .off-canvas-sidebar:target, +.off-canvas .off-canvas-sidebar.active { + transform: translateX(0); +} + +.off-canvas .off-canvas-sidebar:target ~ .off-canvas-overlay, +.off-canvas .off-canvas-sidebar.active ~ .off-canvas-overlay { + display: block; + z-index: 100; +} + +@media (min-width: 960px) { + .off-canvas.off-canvas-sidebar-show .off-canvas-toggle { + display: none; + } + .off-canvas.off-canvas-sidebar-show .off-canvas-sidebar { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + position: relative; + transform: none; + } + .off-canvas.off-canvas-sidebar-show .off-canvas-overlay { + display: none !important; + } +} + +.parallax { + display: block; + height: auto; + position: relative; + width: auto; +} + +.parallax .parallax-content { + box-shadow: 0 1rem 2.1rem rgba(48, 55, 66, .3); + height: auto; + transform: perspective(1000px); + transform-style: preserve-3d; + transition: all .4s ease; + width: 100%; +} + +.parallax .parallax-content::before { + content: ""; + display: block; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} + +.parallax .parallax-front { + align-items: center; + color: #fff; + display: flex; + display: -ms-flexbox; + -ms-flex-align: center; + -ms-flex-pack: center; + height: 100%; + justify-content: center; + left: 0; + position: absolute; + text-align: center; + text-shadow: 0 0 20px rgba(48, 55, 66, .75); + top: 0; + transform: translateZ(50px) scale(.95); + transition: transform .4s; + width: 100%; + z-index: 1; +} + +.parallax .parallax-top-left { + height: 50%; + left: 0; + outline: none; + position: absolute; + top: 0; + width: 50%; + z-index: 100; +} + +.parallax .parallax-top-left:focus ~ .parallax-content, +.parallax .parallax-top-left:hover ~ .parallax-content { + transform: perspective(1000px) rotateX(3deg) rotateY(-3deg); +} + +.parallax .parallax-top-left:focus ~ .parallax-content::before, +.parallax .parallax-top-left:hover ~ .parallax-content::before { + background: linear-gradient(135deg, rgba(255, 255, 255, .35) 0%, transparent 50%); +} + +.parallax .parallax-top-left:focus ~ .parallax-content .parallax-front, +.parallax .parallax-top-left:hover ~ .parallax-content .parallax-front { + transform: translate3d(4.5px, 4.5px, 50px) scale(.95); +} + +.parallax .parallax-top-right { + height: 50%; + outline: none; + position: absolute; + right: 0; + top: 0; + width: 50%; + z-index: 100; +} + +.parallax .parallax-top-right:focus ~ .parallax-content, +.parallax .parallax-top-right:hover ~ .parallax-content { + transform: perspective(1000px) rotateX(3deg) rotateY(3deg); +} + +.parallax .parallax-top-right:focus ~ .parallax-content::before, +.parallax .parallax-top-right:hover ~ .parallax-content::before { + background: linear-gradient(-135deg, rgba(255, 255, 255, .35) 0%, transparent 50%); +} + +.parallax .parallax-top-right:focus ~ .parallax-content .parallax-front, +.parallax .parallax-top-right:hover ~ .parallax-content .parallax-front { + transform: translate3d(-4.5px, 4.5px, 50px) scale(.95); +} + +.parallax .parallax-bottom-left { + bottom: 0; + height: 50%; + left: 0; + outline: none; + position: absolute; + width: 50%; + z-index: 100; +} + +.parallax .parallax-bottom-left:focus ~ .parallax-content, +.parallax .parallax-bottom-left:hover ~ .parallax-content { + transform: perspective(1000px) rotateX(-3deg) rotateY(-3deg); +} + +.parallax .parallax-bottom-left:focus ~ .parallax-content::before, +.parallax .parallax-bottom-left:hover ~ .parallax-content::before { + background: linear-gradient(45deg, rgba(255, 255, 255, .35) 0%, transparent 50%); +} + +.parallax .parallax-bottom-left:focus ~ .parallax-content .parallax-front, +.parallax .parallax-bottom-left:hover ~ .parallax-content .parallax-front { + transform: translate3d(4.5px, -4.5px, 50px) scale(.95); +} + +.parallax .parallax-bottom-right { + bottom: 0; + height: 50%; + outline: none; + position: absolute; + right: 0; + width: 50%; + z-index: 100; +} + +.parallax .parallax-bottom-right:focus ~ .parallax-content, +.parallax .parallax-bottom-right:hover ~ .parallax-content { + transform: perspective(1000px) rotateX(-3deg) rotateY(3deg); +} + +.parallax .parallax-bottom-right:focus ~ .parallax-content::before, +.parallax .parallax-bottom-right:hover ~ .parallax-content::before { + background: linear-gradient(-45deg, rgba(255, 255, 255, .35) 0%, transparent 50%); +} + +.parallax .parallax-bottom-right:focus ~ .parallax-content .parallax-front, +.parallax .parallax-bottom-right:hover ~ .parallax-content .parallax-front { + transform: translate3d(-4.5px, -4.5px, 50px) scale(.95); +} + +.progress { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: #eef0f3; + border: 0; + border-radius: .1rem; + color: #5755d9; + height: .2rem; + position: relative; + width: 100%; +} + +.progress::-webkit-progress-bar { + background: transparent; + border-radius: .1rem; +} + +.progress::-webkit-progress-value { + background: #5755d9; + border-radius: .1rem; +} + +.progress::-moz-progress-bar { + background: #5755d9; + border-radius: .1rem; +} + +.progress:indeterminate { + animation: progress-indeterminate 1.5s linear infinite; + background: #eef0f3 linear-gradient(to right, #5755d9 30%, #eef0f3 30%) top left/150% 150% no-repeat; +} + +.progress:indeterminate::-moz-progress-bar { + background: transparent; +} + +@keyframes progress-indeterminate { + 0% { + background-position: 200% 0; + } + 100% { + background-position: -200% 0; + } +} + +.slider { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: transparent; + display: block; + height: 1.2rem; + width: 100%; +} + +.slider:focus { + box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); + outline: none; +} + +.slider.tooltip:not([data-tooltip])::after { + content: attr(value); +} + +.slider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #5755d9; + border: 0; + border-radius: 50%; + height: .6rem; + margin-top: -.25rem; + transition: transform .2s; + width: .6rem; +} + +.slider::-moz-range-thumb { + background: #5755d9; + border: 0; + border-radius: 50%; + height: .6rem; + transition: transform .2s; + width: .6rem; +} + +.slider::-ms-thumb { + background: #5755d9; + border: 0; + border-radius: 50%; + height: .6rem; + transition: transform .2s; + width: .6rem; +} + +.slider:active::-webkit-slider-thumb { + transform: scale(1.25); +} + +.slider:active::-moz-range-thumb { + transform: scale(1.25); +} + +.slider:active::-ms-thumb { + transform: scale(1.25); +} + +.slider:disabled::-webkit-slider-thumb, +.slider.disabled::-webkit-slider-thumb { + background: #f7f8f9; + transform: scale(1); +} + +.slider:disabled::-moz-range-thumb, +.slider.disabled::-moz-range-thumb { + background: #f7f8f9; + transform: scale(1); +} + +.slider:disabled::-ms-thumb, +.slider.disabled::-ms-thumb { + background: #f7f8f9; + transform: scale(1); +} + +.slider::-webkit-slider-runnable-track { + background: #eef0f3; + border-radius: .1rem; + height: .1rem; + width: 100%; +} + +.slider::-moz-range-track { + background: #eef0f3; + border-radius: .1rem; + height: .1rem; + width: 100%; +} + +.slider::-ms-track { + background: #eef0f3; + border-radius: .1rem; + height: .1rem; + width: 100%; +} + +.slider::-ms-fill-lower { + background: #5755d9; +} + +.timeline .timeline-item { + display: flex; + display: -ms-flexbox; + margin-bottom: 1.2rem; + position: relative; +} + +.timeline .timeline-item::before { + background: #dadee4; + content: ""; + height: 100%; + left: 11px; + position: absolute; + top: 1.2rem; + width: 2px; +} + +.timeline .timeline-item .timeline-left { + -ms-flex: 0 0 auto; + flex: 0 0 auto; +} + +.timeline .timeline-item .timeline-content { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 2px 0 2px .8rem; +} + +.timeline .timeline-item .timeline-icon { + align-items: center; + border-radius: 50%; + color: #fff; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + -ms-flex-pack: center; + height: 1.2rem; + justify-content: center; + text-align: center; + width: 1.2rem; +} + +.timeline .timeline-item .timeline-icon::before { + border: .1rem solid #5755d9; + border-radius: 50%; + content: ""; + display: block; + height: .4rem; + left: .4rem; + position: absolute; + top: .4rem; + width: .4rem; +} + +.timeline .timeline-item .timeline-icon.icon-lg { + background: #5755d9; + line-height: 1.2rem; +} + +.timeline .timeline-item .timeline-icon.icon-lg::before { + content: none; +} + +.viewer-360 { + align-items: center; + display: flex; + display: -ms-flexbox; + -ms-flex-align: center; + -ms-flex-direction: column; + flex-direction: column; +} + +.viewer-360 .viewer-slider[max="36"][value="1"] + .viewer-image { + background-position-y: 0; +} + +.viewer-360 .viewer-slider[max="36"][value="2"] + .viewer-image { + background-position-y: 2.8571428571%; +} + +.viewer-360 .viewer-slider[max="36"][value="3"] + .viewer-image { + background-position-y: 5.7142857143%; +} + +.viewer-360 .viewer-slider[max="36"][value="4"] + .viewer-image { + background-position-y: 8.5714285714%; +} + +.viewer-360 .viewer-slider[max="36"][value="5"] + .viewer-image { + background-position-y: 11.4285714286%; +} + +.viewer-360 .viewer-slider[max="36"][value="6"] + .viewer-image { + background-position-y: 14.2857142857%; +} + +.viewer-360 .viewer-slider[max="36"][value="7"] + .viewer-image { + background-position-y: 17.1428571429%; +} + +.viewer-360 .viewer-slider[max="36"][value="8"] + .viewer-image { + background-position-y: 20%; +} + +.viewer-360 .viewer-slider[max="36"][value="9"] + .viewer-image { + background-position-y: 22.8571428571%; +} + +.viewer-360 .viewer-slider[max="36"][value="10"] + .viewer-image { + background-position-y: 25.7142857143%; +} + +.viewer-360 .viewer-slider[max="36"][value="11"] + .viewer-image { + background-position-y: 28.5714285714%; +} + +.viewer-360 .viewer-slider[max="36"][value="12"] + .viewer-image { + background-position-y: 31.4285714286%; +} + +.viewer-360 .viewer-slider[max="36"][value="13"] + .viewer-image { + background-position-y: 34.2857142857%; +} + +.viewer-360 .viewer-slider[max="36"][value="14"] + .viewer-image { + background-position-y: 37.1428571429%; +} + +.viewer-360 .viewer-slider[max="36"][value="15"] + .viewer-image { + background-position-y: 40%; +} + +.viewer-360 .viewer-slider[max="36"][value="16"] + .viewer-image { + background-position-y: 42.8571428571%; +} + +.viewer-360 .viewer-slider[max="36"][value="17"] + .viewer-image { + background-position-y: 45.7142857143%; +} + +.viewer-360 .viewer-slider[max="36"][value="18"] + .viewer-image { + background-position-y: 48.5714285714%; +} + +.viewer-360 .viewer-slider[max="36"][value="19"] + .viewer-image { + background-position-y: 51.4285714286%; +} + +.viewer-360 .viewer-slider[max="36"][value="20"] + .viewer-image { + background-position-y: 54.2857142857%; +} + +.viewer-360 .viewer-slider[max="36"][value="21"] + .viewer-image { + background-position-y: 57.1428571429%; +} + +.viewer-360 .viewer-slider[max="36"][value="22"] + .viewer-image { + background-position-y: 60%; +} + +.viewer-360 .viewer-slider[max="36"][value="23"] + .viewer-image { + background-position-y: 62.8571428571%; +} + +.viewer-360 .viewer-slider[max="36"][value="24"] + .viewer-image { + background-position-y: 65.7142857143%; +} + +.viewer-360 .viewer-slider[max="36"][value="25"] + .viewer-image { + background-position-y: 68.5714285714%; +} + +.viewer-360 .viewer-slider[max="36"][value="26"] + .viewer-image { + background-position-y: 71.4285714286%; +} + +.viewer-360 .viewer-slider[max="36"][value="27"] + .viewer-image { + background-position-y: 74.2857142857%; +} + +.viewer-360 .viewer-slider[max="36"][value="28"] + .viewer-image { + background-position-y: 77.1428571429%; +} + +.viewer-360 .viewer-slider[max="36"][value="29"] + .viewer-image { + background-position-y: 80%; +} + +.viewer-360 .viewer-slider[max="36"][value="30"] + .viewer-image { + background-position-y: 82.8571428571%; +} + +.viewer-360 .viewer-slider[max="36"][value="31"] + .viewer-image { + background-position-y: 85.7142857143%; +} + +.viewer-360 .viewer-slider[max="36"][value="32"] + .viewer-image { + background-position-y: 88.5714285714%; +} + +.viewer-360 .viewer-slider[max="36"][value="33"] + .viewer-image { + background-position-y: 91.4285714286%; +} + +.viewer-360 .viewer-slider[max="36"][value="34"] + .viewer-image { + background-position-y: 94.2857142857%; +} + +.viewer-360 .viewer-slider[max="36"][value="35"] + .viewer-image { + background-position-y: 97.1428571429%; +} + +.viewer-360 .viewer-slider[max="36"][value="36"] + .viewer-image { + background-position-y: 100%; +} + +.viewer-360 .viewer-slider { + cursor: ew-resize; + -ms-flex-order: 2; + margin: 1rem; + order: 2; + width: 60%; +} + +.viewer-360 .viewer-image { + background-position-y: 0; + background-repeat: no-repeat; + background-size: 100%; + -ms-flex-order: 1; + max-width: 100%; + order: 1; +} \ No newline at end of file diff --git a/public/css/spectre-icons.css b/public/css/spectre-icons.css new file mode 100644 index 00000000..788b460a --- /dev/null +++ b/public/css/spectre-icons.css @@ -0,0 +1,597 @@ +/*! Spectre.css Icons v0.5.8 | MIT License | github.com/picturepan2/spectre */ +.icon { + box-sizing: border-box; + display: inline-block; + font-size: inherit; + font-style: normal; + height: 1em; + position: relative; + text-indent: -9999px; + vertical-align: middle; + width: 1em; +} + +.icon::before, +.icon::after { + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); +} + +.icon.icon-2x { + font-size: 1.6rem; +} + +.icon.icon-3x { + font-size: 2.4rem; +} + +.icon.icon-4x { + font-size: 3.2rem; +} + +.accordion .icon, +.btn .icon, +.toast .icon, +.menu .icon { + vertical-align: -10%; +} + +.btn-lg .icon { + vertical-align: -15%; +} + +.icon-arrow-down::before, +.icon-arrow-left::before, +.icon-arrow-right::before, +.icon-arrow-up::before, +.icon-downward::before, +.icon-back::before, +.icon-forward::before, +.icon-upward::before { + border: .1rem solid currentColor; + border-bottom: 0; + border-right: 0; + height: .65em; + width: .65em; +} + +.icon-arrow-down::before { + transform: translate(-50%, -75%) rotate(225deg); +} + +.icon-arrow-left::before { + transform: translate(-25%, -50%) rotate(-45deg); +} + +.icon-arrow-right::before { + transform: translate(-75%, -50%) rotate(135deg); +} + +.icon-arrow-up::before { + transform: translate(-50%, -25%) rotate(45deg); +} + +.icon-back::after, +.icon-forward::after { + background: currentColor; + height: .1rem; + width: .8em; +} + +.icon-downward::after, +.icon-upward::after { + background: currentColor; + height: .8em; + width: .1rem; +} + +.icon-back::after { + left: 55%; +} + +.icon-back::before { + transform: translate(-50%, -50%) rotate(-45deg); +} + +.icon-downward::after { + top: 45%; +} + +.icon-downward::before { + transform: translate(-50%, -50%) rotate(-135deg); +} + +.icon-forward::after { + left: 45%; +} + +.icon-forward::before { + transform: translate(-50%, -50%) rotate(135deg); +} + +.icon-upward::after { + top: 55%; +} + +.icon-upward::before { + transform: translate(-50%, -50%) rotate(45deg); +} + +.icon-caret::before { + border-left: .3em solid transparent; + border-right: .3em solid transparent; + border-top: .3em solid currentColor; + height: 0; + transform: translate(-50%, -25%); + width: 0; +} + +.icon-menu::before { + background: currentColor; + box-shadow: 0 -.35em, 0 .35em; + height: .1rem; + width: 100%; +} + +.icon-apps::before { + background: currentColor; + box-shadow: -.35em -.35em, -.35em 0, -.35em .35em, 0 -.35em, 0 .35em, .35em -.35em, .35em 0, .35em .35em; + height: 3px; + width: 3px; +} + +.icon-resize-horiz::before, +.icon-resize-horiz::after, +.icon-resize-vert::before, +.icon-resize-vert::after { + border: .1rem solid currentColor; + border-bottom: 0; + border-right: 0; + height: .45em; + width: .45em; +} + +.icon-resize-horiz::before, +.icon-resize-vert::before { + transform: translate(-50%, -90%) rotate(45deg); +} + +.icon-resize-horiz::after, +.icon-resize-vert::after { + transform: translate(-50%, -10%) rotate(225deg); +} + +.icon-resize-horiz::before { + transform: translate(-90%, -50%) rotate(-45deg); +} + +.icon-resize-horiz::after { + transform: translate(-10%, -50%) rotate(135deg); +} + +.icon-more-horiz::before, +.icon-more-vert::before { + background: currentColor; + border-radius: 50%; + box-shadow: -.4em 0, .4em 0; + height: 3px; + width: 3px; +} + +.icon-more-vert::before { + box-shadow: 0 -.4em, 0 .4em; +} + +.icon-plus::before, +.icon-minus::before, +.icon-cross::before { + background: currentColor; + height: .1rem; + width: 100%; +} + +.icon-plus::after, +.icon-cross::after { + background: currentColor; + height: 100%; + width: .1rem; +} + +.icon-cross::before { + width: 100%; +} + +.icon-cross::after { + height: 100%; +} + +.icon-cross::before, +.icon-cross::after { + transform: translate(-50%, -50%) rotate(45deg); +} + +.icon-check::before { + border: .1rem solid currentColor; + border-right: 0; + border-top: 0; + height: .5em; + transform: translate(-50%, -75%) rotate(-45deg); + width: .9em; +} + +.icon-stop { + border: .1rem solid currentColor; + border-radius: 50%; +} + +.icon-stop::before { + background: currentColor; + height: .1rem; + transform: translate(-50%, -50%) rotate(45deg); + width: 1em; +} + +.icon-shutdown { + border: .1rem solid currentColor; + border-radius: 50%; + border-top-color: transparent; +} + +.icon-shutdown::before { + background: currentColor; + content: ""; + height: .5em; + top: .1em; + width: .1rem; +} + +.icon-refresh::before { + border: .1rem solid currentColor; + border-radius: 50%; + border-right-color: transparent; + height: 1em; + width: 1em; +} + +.icon-refresh::after { + border: .2em solid currentColor; + border-left-color: transparent; + border-top-color: transparent; + height: 0; + left: 80%; + top: 20%; + width: 0; +} + +.icon-search::before { + border: .1rem solid currentColor; + border-radius: 50%; + height: .75em; + left: 5%; + top: 5%; + transform: translate(0, 0) rotate(45deg); + width: .75em; +} + +.icon-search::after { + background: currentColor; + height: .1rem; + left: 80%; + top: 80%; + transform: translate(-50%, -50%) rotate(45deg); + width: .4em; +} + +.icon-edit::before { + border: .1rem solid currentColor; + height: .4em; + transform: translate(-40%, -60%) rotate(-45deg); + width: .85em; +} + +.icon-edit::after { + border: .15em solid currentColor; + border-right-color: transparent; + border-top-color: transparent; + height: 0; + left: 5%; + top: 95%; + transform: translate(0, -100%); + width: 0; +} + +.icon-delete::before { + border: .1rem solid currentColor; + border-bottom-left-radius: .1rem; + border-bottom-right-radius: .1rem; + border-top: 0; + height: .75em; + top: 60%; + width: .75em; +} + +.icon-delete::after { + background: currentColor; + box-shadow: -.25em .2em, .25em .2em; + height: .1rem; + top: .05rem; + width: .5em; +} + +.icon-share { + border: .1rem solid currentColor; + border-radius: .1rem; + border-right: 0; + border-top: 0; +} + +.icon-share::before { + border: .1rem solid currentColor; + border-left: 0; + border-top: 0; + height: .4em; + left: 100%; + top: .25em; + transform: translate(-125%, -50%) rotate(-45deg); + width: .4em; +} + +.icon-share::after { + border: .1rem solid currentColor; + border-bottom: 0; + border-radius: 75% 0; + border-right: 0; + height: .5em; + width: .6em; +} + +.icon-flag::before { + background: currentColor; + height: 1em; + left: 15%; + width: .1rem; +} + +.icon-flag::after { + border: .1rem solid currentColor; + border-bottom-right-radius: .1rem; + border-left: 0; + border-top-right-radius: .1rem; + height: .65em; + left: 60%; + top: 35%; + width: .8em; +} + +.icon-bookmark::before { + border: .1rem solid currentColor; + border-bottom: 0; + border-top-left-radius: .1rem; + border-top-right-radius: .1rem; + height: .9em; + width: .8em; +} + +.icon-bookmark::after { + border: .1rem solid currentColor; + border-bottom: 0; + border-left: 0; + border-radius: .1rem; + height: .5em; + transform: translate(-50%, 35%) rotate(-45deg) skew(15deg, 15deg); + width: .5em; +} + +.icon-download, +.icon-upload { + border-bottom: .1rem solid currentColor; +} + +.icon-download::before, +.icon-upload::before { + border: .1rem solid currentColor; + border-bottom: 0; + border-right: 0; + height: .5em; + transform: translate(-50%, -60%) rotate(-135deg); + width: .5em; +} + +.icon-download::after, +.icon-upload::after { + background: currentColor; + height: .6em; + top: 40%; + width: .1rem; +} + +.icon-upload::before { + transform: translate(-50%, -60%) rotate(45deg); +} + +.icon-upload::after { + top: 50%; +} + +.icon-copy::before { + border: .1rem solid currentColor; + border-bottom: 0; + border-radius: .1rem; + border-right: 0; + height: .8em; + left: 40%; + top: 35%; + width: .8em; +} + +.icon-copy::after { + border: .1rem solid currentColor; + border-radius: .1rem; + height: .8em; + left: 60%; + top: 60%; + width: .8em; +} + +.icon-time { + border: .1rem solid currentColor; + border-radius: 50%; +} + +.icon-time::before { + background: currentColor; + height: .4em; + transform: translate(-50%, -75%); + width: .1rem; +} + +.icon-time::after { + background: currentColor; + height: .3em; + transform: translate(-50%, -75%) rotate(90deg); + transform-origin: 50% 90%; + width: .1rem; +} + +.icon-mail::before { + border: .1rem solid currentColor; + border-radius: .1rem; + height: .8em; + width: 1em; +} + +.icon-mail::after { + border: .1rem solid currentColor; + border-right: 0; + border-top: 0; + height: .5em; + transform: translate(-50%, -90%) rotate(-45deg) skew(10deg, 10deg); + width: .5em; +} + +.icon-people::before { + border: .1rem solid currentColor; + border-radius: 50%; + height: .45em; + top: 25%; + width: .45em; +} + +.icon-people::after { + border: .1rem solid currentColor; + border-radius: 50% 50% 0 0; + height: .4em; + top: 75%; + width: .9em; +} + +.icon-message { + border: .1rem solid currentColor; + border-bottom: 0; + border-radius: .1rem; + border-right: 0; +} + +.icon-message::before { + border: .1rem solid currentColor; + border-bottom-right-radius: .1rem; + border-left: 0; + border-top: 0; + height: .8em; + left: 65%; + top: 40%; + width: .7em; +} + +.icon-message::after { + background: currentColor; + border-radius: .1rem; + height: .3em; + left: 10%; + top: 100%; + transform: translate(0, -90%) rotate(45deg); + width: .1rem; +} + +.icon-photo { + border: .1rem solid currentColor; + border-radius: .1rem; +} + +.icon-photo::before { + border: .1rem solid currentColor; + border-radius: 50%; + height: .25em; + left: 35%; + top: 35%; + width: .25em; +} + +.icon-photo::after { + border: .1rem solid currentColor; + border-bottom: 0; + border-left: 0; + height: .5em; + left: 60%; + transform: translate(-50%, 25%) rotate(-45deg); + width: .5em; +} + +.icon-link::before, +.icon-link::after { + border: .1rem solid currentColor; + border-radius: 5em 0 0 5em; + border-right: 0; + height: .5em; + width: .75em; +} + +.icon-link::before { + transform: translate(-70%, -45%) rotate(-45deg); +} + +.icon-link::after { + transform: translate(-30%, -55%) rotate(135deg); +} + +.icon-location::before { + border: .1rem solid currentColor; + border-radius: 50% 50% 50% 0; + height: .8em; + transform: translate(-50%, -60%) rotate(-45deg); + width: .8em; +} + +.icon-location::after { + border: .1rem solid currentColor; + border-radius: 50%; + height: .2em; + transform: translate(-50%, -80%); + width: .2em; +} + +.icon-emoji { + border: .1rem solid currentColor; + border-radius: 50%; +} + +.icon-emoji::before { + border-radius: 50%; + box-shadow: -.17em -.1em, .17em -.1em; + height: .15em; + width: .15em; +} + +.icon-emoji::after { + border: .1rem solid currentColor; + border-bottom-color: transparent; + border-radius: 50%; + border-right-color: transparent; + height: .5em; + transform: translate(-50%, -40%) rotate(-135deg); + width: .5em; +} \ No newline at end of file diff --git a/public/css/spectre.css b/public/css/spectre.css new file mode 100644 index 00000000..6c59eb68 --- /dev/null +++ b/public/css/spectre.css @@ -0,0 +1,3718 @@ +/*! Spectre.css v0.5.8 | MIT License | github.com/picturepan2/spectre */ +/* Manually forked from Normalize.css */ +/* normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */ +/** 1. Change the default font family in all browsers (opinionated). 2. Correct the line height in all browsers. 3. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS. */ +/* Document ========================================================================== */ +html { + font-family: sans-serif; /* 1 */ + -webkit-text-size-adjust: 100%; /* 3 */ + -ms-text-size-adjust: 100%; /* 3 */ +} + +/* Sections ========================================================================== */ +/** Remove the margin in all browsers (opinionated). */ +body { + margin: 0; +} + +/** Add the correct display in IE 9-. */ +article, +aside, +footer, +header, +nav, +section { + display: block; +} + +/** Correct the font size and margin on `h1` elements within `section` and `article` contexts in Chrome, Firefox, and Safari. */ +h1 { + font-size: 2em; + margin: .67em 0; +} + +/* Grouping content ========================================================================== */ +/** Add the correct display in IE 9-. 1. Add the correct display in IE. */ +figcaption, +figure, +main { + /* 1 */ display: block; +} + +/** Add the correct margin in IE 8 (removed). */ +/** 1. Add the correct box sizing in Firefox. 2. Show the overflow in Edge and IE. */ +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** 1. Correct the inheritance and scaling of font size in all browsers. (removed) 2. Correct the odd `em` font sizing in all browsers. */ +/* Text-level semantics ========================================================================== */ +/** 1. Remove the gray background on active links in IE 10. 2. Remove gaps in links underline in iOS 8+ and Safari 8+. */ +a { + background-color: transparent; /* 1 */ + -webkit-text-decoration-skip: objects; /* 2 */ +} + +/** Remove the outline on focused links when they are also active or hovered in all browsers (opinionated). */ +a:active, +a:hover { + outline-width: 0; +} + +/** Modify default styling of address. */ +address { + font-style: normal; +} + +/** 1. Remove the bottom border in Firefox 39-. 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. (removed) */ +/** Prevent the duplicate application of `bolder` by the next rule in Safari 6. */ +b, +strong { + font-weight: inherit; +} + +/** Add the correct font weight in Chrome, Edge, and Safari. */ +b, +strong { + font-weight: bolder; +} + +/** 1. Correct the inheritance and scaling of font size in all browsers. 2. Correct the odd `em` font sizing in all browsers. */ +code, +kbd, +pre, +samp { + font-family: "SF Mono", "Segoe UI Mono", "Roboto Mono", Menlo, Courier, monospace; /* 1 (changed) */ + font-size: 1em; /* 2 */ +} + +/** Add the correct font style in Android 4.3-. */ +dfn { + font-style: italic; +} + +/** Add the correct background and color in IE 9-. (Removed) */ +/** Add the correct font size in all browsers. */ +small { + font-size: 80%; + font-weight: 400; /* (added) */ +} + +/** Prevent `sub` and `sup` elements from affecting the line height in all browsers. */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -.25em; +} + +sup { + top: -.5em; +} + +/* Embedded content ========================================================================== */ +/** Add the correct display in IE 9-. */ +audio, +video { + display: inline-block; +} + +/** Add the correct display in iOS 4-7. */ +audio:not([controls]) { + display: none; + height: 0; +} + +/** Remove the border on images inside links in IE 10-. */ +img { + border-style: none; +} + +/** Hide the overflow in IE. */ +svg:not(:root) { + overflow: hidden; +} + +/* Forms ========================================================================== */ +/** 1. Change the font styles in all browsers (opinionated). 2. Remove the margin in Firefox and Safari. */ +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 (changed) */ + font-size: inherit; /* 1 (changed) */ + line-height: inherit; /* 1 (changed) */ + margin: 0; /* 2 */ +} + +/** Show the overflow in IE. 1. Show the overflow in Edge. */ +button, +input { + /* 1 */ overflow: visible; +} + +/** Remove the inheritance of text transform in Edge, Firefox, and IE. 1. Remove the inheritance of text transform in Firefox. */ +button, +select { + /* 1 */ text-transform: none; +} + +/** 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` controls in Android 4. 2. Correct the inability to style clickable types in iOS and Safari. */ +button, +html [type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; /* 2 */ +} + +/** Remove the inner border and padding in Firefox. */ +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** Restore the focus styles unset by the previous rule (removed). */ +/** Change the border, margin, and padding in all browsers (opinionated) (changed). */ +fieldset { + border: 0; + margin: 0; + padding: 0; +} + +/** 1. Correct the text wrapping in Edge and IE. 2. Correct the color inheritance from `fieldset` elements in IE. 3. Remove the padding so developers are not caught out when they zero out `fieldset` elements in all browsers. */ +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** 1. Add the correct display in IE 9-. 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. */ +progress { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** Remove the default vertical scrollbar in IE. */ +textarea { + overflow: auto; +} + +/** 1. Add the correct box sizing in IE 10-. 2. Remove the padding in IE 10-. */ +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** Correct the cursor style of increment and decrement buttons in Chrome. */ +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */ +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** Remove the inner padding and cancel buttons in Chrome and Safari on macOS. */ +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** 1. Correct the inability to style clickable types in iOS and Safari. 2. Change font properties to `inherit` in Safari. */ +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive ========================================================================== */ +/* Add the correct display in IE 9-. 1. Add the correct display in Edge, IE, and Firefox. */ +details, +menu { + display: block; +} + +/* Add the correct display in all browsers. */ +summary { + display: list-item; + outline: none; +} + +/* Scripting ========================================================================== */ +/** Add the correct display in IE 9-. */ +canvas { + display: inline-block; +} + +/** Add the correct display in IE. */ +template { + display: none; +} + +/* Hidden ========================================================================== */ +/** Add the correct display in IE 10-. */ +[hidden] { + display: none; +} + +*, +*::before, +*::after { + box-sizing: inherit; +} + +html { + box-sizing: border-box; + font-size: 20px; + line-height: 1.5; + -webkit-tap-highlight-color: transparent; +} + +body { + background: #fff; + color: #3b4351; + font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", sans-serif; + font-size: .8rem; + overflow-x: hidden; + text-rendering: optimizeLegibility; +} + +a { + color: #5755d9; + outline: none; + text-decoration: none; +} + +a:focus { + box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); +} + +a:focus, +a:hover, +a:active, +a.active { + color: #302ecd; + text-decoration: underline; +} + +a:visited { + color: #807fe2; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + color: inherit; + font-weight: 500; + line-height: 1.2; + margin-bottom: .5em; + margin-top: 0; +} + +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-weight: 500; +} + +h1, +.h1 { + font-size: 2rem; +} + +h2, +.h2 { + font-size: 1.6rem; +} + +h3, +.h3 { + font-size: 1.4rem; +} + +h4, +.h4 { + font-size: 1.2rem; +} + +h5, +.h5 { + font-size: 1rem; +} + +h6, +.h6 { + font-size: .8rem; +} + +p { + margin: 0 0 1.2rem; +} + +a, +ins, +u { + -webkit-text-decoration-skip: ink edges; + text-decoration-skip: ink edges; +} + +abbr[title] { + border-bottom: .05rem dotted; + cursor: help; + text-decoration: none; +} + +kbd { + background: #303742; + border-radius: .1rem; + color: #fff; + font-size: .7rem; + line-height: 1.25; + padding: .1rem .2rem; +} + +mark { + background: #ffe9b3; + border-bottom: .05rem solid #ffd367; + border-radius: .1rem; + color: #3b4351; + padding: .05rem .1rem 0; +} + +blockquote { + border-left: .1rem solid #dadee4; + margin-left: 0; + padding: .4rem .8rem; +} + +blockquote p:last-child { + margin-bottom: 0; +} + +ul, +ol { + margin: .8rem 0 .8rem .8rem; + padding: 0; +} + +ul ul, +ul ol, +ol ul, +ol ol { + margin: .8rem 0 .8rem .8rem; +} + +ul li, +ol li { + margin-top: .4rem; +} + +ul { + list-style: disc inside; +} + +ul ul { + list-style-type: circle; +} + +ol { + list-style: decimal inside; +} + +ol ol { + list-style-type: lower-alpha; +} + +dl dt { + font-weight: bold; +} + +dl dd { + margin: .4rem 0 .8rem 0; +} + +html:lang(zh), +html:lang(zh-Hans), +.lang-zh, +.lang-zh-hans { + font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", sans-serif; +} + +html:lang(zh-Hant), +.lang-zh-hant { + font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang TC", "Hiragino Sans CNS", "Microsoft JhengHei", "Helvetica Neue", sans-serif; +} + +html:lang(ja), +.lang-ja { + font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Hiragino Sans", "Hiragino Kaku Gothic Pro", "Yu Gothic", YuGothic, Meiryo, "Helvetica Neue", sans-serif; +} + +html:lang(ko), +.lang-ko { + font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Malgun Gothic", "Helvetica Neue", sans-serif; +} + +:lang(zh) ins, +:lang(zh) u, +:lang(ja) ins, +:lang(ja) u, +.lang-cjk ins, +.lang-cjk u { + border-bottom: .05rem solid; + text-decoration: none; +} + +:lang(zh) del + del, +:lang(zh) del + s, +:lang(zh) ins + ins, +:lang(zh) ins + u, +:lang(zh) s + del, +:lang(zh) s + s, +:lang(zh) u + ins, +:lang(zh) u + u, +:lang(ja) del + del, +:lang(ja) del + s, +:lang(ja) ins + ins, +:lang(ja) ins + u, +:lang(ja) s + del, +:lang(ja) s + s, +:lang(ja) u + ins, +:lang(ja) u + u, +.lang-cjk del + del, +.lang-cjk del + s, +.lang-cjk ins + ins, +.lang-cjk ins + u, +.lang-cjk s + del, +.lang-cjk s + s, +.lang-cjk u + ins, +.lang-cjk u + u { + margin-left: .125em; +} + +.table { + border-collapse: collapse; + border-spacing: 0; + text-align: left; + width: 100%; +} + +.table.table-striped tbody tr:nth-of-type(odd) { + background: #f7f8f9; +} + +.table tbody tr.active, +.table.table-striped tbody tr.active { + background: #eef0f3; +} + +.table.table-hover tbody tr:hover { + background: #eef0f3; +} + +.table.table-scroll { + display: block; + overflow-x: auto; + padding-bottom: .75rem; + white-space: nowrap; +} + +.table td, +.table th { + border-bottom: .05rem solid #dadee4; + padding: .6rem .4rem; +} + +.table th { + border-bottom-width: .1rem; +} + +.btn { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: #fff; + border: .05rem solid #5755d9; + border-radius: .1rem; + color: #5755d9; + cursor: pointer; + display: inline-block; + font-size: .8rem; + height: 1.8rem; + line-height: 1.2rem; + outline: none; + padding: .25rem .4rem; + text-align: center; + text-decoration: none; + transition: background .2s, border .2s, box-shadow .2s, color .2s; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + vertical-align: middle; + white-space: nowrap; +} + +.btn:focus { + box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); +} + +.btn:focus, +.btn:hover { + background: #f1f1fc; + border-color: #4b48d6; + text-decoration: none; +} + +.btn:active, +.btn.active { + background: #4b48d6; + border-color: #3634d2; + color: #fff; + text-decoration: none; +} + +.btn:active.loading::after, +.btn.active.loading::after { + border-bottom-color: #fff; + border-left-color: #fff; +} + +.btn[disabled], +.btn:disabled, +.btn.disabled { + cursor: default; + opacity: .5; + pointer-events: none; +} + +.btn.btn-primary { + background: #5755d9; + border-color: #4b48d6; + color: #fff; +} + +.btn.btn-primary:focus, +.btn.btn-primary:hover { + background: #4240d4; + border-color: #3634d2; + color: #fff; +} + +.btn.btn-primary:active, +.btn.btn-primary.active { + background: #3a38d2; + border-color: #302ecd; + color: #fff; +} + +.btn.btn-primary.loading::after { + border-bottom-color: #fff; + border-left-color: #fff; +} + +.btn.btn-success { + background: #32b643; + border-color: #2faa3f; + color: #fff; +} + +.btn.btn-success:focus { + box-shadow: 0 0 0 .1rem rgba(50, 182, 67, .2); +} + +.btn.btn-success:focus, +.btn.btn-success:hover { + background: #30ae40; + border-color: #2da23c; + color: #fff; +} + +.btn.btn-success:active, +.btn.btn-success.active { + background: #2a9a39; + border-color: #278e34; + color: #fff; +} + +.btn.btn-success.loading::after { + border-bottom-color: #fff; + border-left-color: #fff; +} + +.btn.btn-error { + background: #e85600; + border-color: #d95000; + color: #fff; +} + +.btn.btn-error:focus { + box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); +} + +.btn.btn-error:focus, +.btn.btn-error:hover { + background: #de5200; + border-color: #cf4d00; + color: #fff; +} + +.btn.btn-error:active, +.btn.btn-error.active { + background: #c44900; + border-color: #b54300; + color: #fff; +} + +.btn.btn-error.loading::after { + border-bottom-color: #fff; + border-left-color: #fff; +} + +.btn.btn-link { + background: transparent; + border-color: transparent; + color: #5755d9; +} + +.btn.btn-link:focus, +.btn.btn-link:hover, +.btn.btn-link:active, +.btn.btn-link.active { + color: #302ecd; +} + +.btn.btn-sm { + font-size: .7rem; + height: 1.4rem; + padding: .05rem .3rem; +} + +.btn.btn-lg { + font-size: .9rem; + height: 2rem; + padding: .35rem .6rem; +} + +.btn.btn-block { + display: block; + width: 100%; +} + +.btn.btn-action { + padding-left: 0; + padding-right: 0; + width: 1.8rem; +} + +.btn.btn-action.btn-sm { + width: 1.4rem; +} + +.btn.btn-action.btn-lg { + width: 2rem; +} + +.btn.btn-clear { + background: transparent; + border: 0; + color: currentColor; + height: 1rem; + line-height: .8rem; + margin-left: .2rem; + margin-right: -2px; + opacity: 1; + padding: .1rem; + text-decoration: none; + width: 1rem; +} + +.btn.btn-clear:focus, +.btn.btn-clear:hover { + background: rgba(247, 248, 249, .5); + opacity: .95; +} + +.btn.btn-clear::before { + content: "\2715"; +} + +.btn-group { + display: inline-flex; + display: -ms-inline-flexbox; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} + +.btn-group .btn { + -ms-flex: 1 0 auto; + flex: 1 0 auto; +} + +.btn-group .btn:first-child:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +.btn-group .btn:not(:first-child):not(:last-child) { + border-radius: 0; + margin-left: -.05rem; +} + +.btn-group .btn:last-child:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; + margin-left: -.05rem; +} + +.btn-group .btn:focus, +.btn-group .btn:hover, +.btn-group .btn:active, +.btn-group .btn.active { + z-index: 1; +} + +.btn-group.btn-group-block { + display: flex; + display: -ms-flexbox; +} + +.btn-group.btn-group-block .btn { + -ms-flex: 1 0 0; + flex: 1 0 0; +} + +.form-group:not(:last-child) { + margin-bottom: .4rem; +} + +fieldset { + margin-bottom: .8rem; +} + +legend { + font-size: .9rem; + font-weight: 500; + margin-bottom: .8rem; +} + +.form-label { + display: block; + line-height: 1.2rem; + padding: .3rem 0; +} + +.form-label.label-sm { + font-size: .7rem; + padding: .1rem 0; +} + +.form-label.label-lg { + font-size: .9rem; + padding: .4rem 0; +} + +.form-input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: #fff; + background-image: none; + border: .05rem solid #bcc3ce; + border-radius: .1rem; + color: #3b4351; + display: block; + font-size: .8rem; + height: 1.8rem; + line-height: 1.2rem; + max-width: 100%; + outline: none; + padding: .25rem .4rem; + position: relative; + transition: background .2s, border .2s, box-shadow .2s, color .2s; + width: 100%; +} + +.form-input:focus { + border-color: #5755d9; + box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); +} + +.form-input::-webkit-input-placeholder { + color: #bcc3ce; +} + +.form-input:-ms-input-placeholder { + color: #bcc3ce; +} + +.form-input::-ms-input-placeholder { + color: #bcc3ce; +} + +.form-input::placeholder { + color: #bcc3ce; +} + +.form-input.input-sm { + font-size: .7rem; + height: 1.4rem; + padding: .05rem .3rem; +} + +.form-input.input-lg { + font-size: .9rem; + height: 2rem; + padding: .35rem .6rem; +} + +.form-input.input-inline { + display: inline-block; + vertical-align: middle; + width: auto; +} + +.form-input[type="file"] { + height: auto; +} + +textarea.form-input, +textarea.form-input.input-lg, +textarea.form-input.input-sm { + height: auto; +} + +.form-input-hint { + color: #bcc3ce; + font-size: .7rem; + margin-top: .2rem; +} + +.has-success .form-input-hint, +.is-success + .form-input-hint { + color: #32b643; +} + +.has-error .form-input-hint, +.is-error + .form-input-hint { + color: #e85600; +} + +.form-select { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: #fff; + border: .05rem solid #bcc3ce; + border-radius: .1rem; + color: inherit; + font-size: .8rem; + height: 1.8rem; + line-height: 1.2rem; + outline: none; + padding: .25rem .4rem; + vertical-align: middle; + width: 100%; +} + +.form-select:focus { + border-color: #5755d9; + box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); +} + +.form-select::-ms-expand { + display: none; +} + +.form-select.select-sm { + font-size: .7rem; + height: 1.4rem; + padding: .05rem 1.1rem .05rem .3rem; +} + +.form-select.select-lg { + font-size: .9rem; + height: 2rem; + padding: .35rem 1.4rem .35rem .6rem; +} + +.form-select[size], +.form-select[multiple] { + height: auto; + padding: .25rem .4rem; +} + +.form-select[size] option, +.form-select[multiple] option { + padding: .1rem .2rem; +} + +.form-select:not([multiple]):not([size]) { + background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%204%205'%3E%3Cpath%20fill='%23667189'%20d='M2%200L0%202h4zm0%205L0%203h4z'/%3E%3C/svg%3E") no-repeat right .35rem center/.4rem .5rem; + padding-right: 1.2rem; +} + +.has-icon-left, +.has-icon-right { + position: relative; +} + +.has-icon-left .form-icon, +.has-icon-right .form-icon { + height: .8rem; + margin: 0 .25rem; + position: absolute; + top: 50%; + transform: translateY(-50%); + width: .8rem; + z-index: 2; +} + +.has-icon-left .form-icon { + left: .05rem; +} + +.has-icon-left .form-input { + padding-left: 1.3rem; +} + +.has-icon-right .form-icon { + right: .05rem; +} + +.has-icon-right .form-input { + padding-right: 1.3rem; +} + +.form-checkbox, +.form-radio, +.form-switch { + display: block; + line-height: 1.2rem; + margin: .2rem 0; + min-height: 1.4rem; + padding: .1rem .4rem .1rem 1.2rem; + position: relative; +} + +.form-checkbox input, +.form-radio input, +.form-switch input { + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + position: absolute; + width: 1px; +} + +.form-checkbox input:focus + .form-icon, +.form-radio input:focus + .form-icon, +.form-switch input:focus + .form-icon { + border-color: #5755d9; + box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2); +} + +.form-checkbox input:checked + .form-icon, +.form-radio input:checked + .form-icon, +.form-switch input:checked + .form-icon { + background: #5755d9; + border-color: #5755d9; +} + +.form-checkbox .form-icon, +.form-radio .form-icon, +.form-switch .form-icon { + border: .05rem solid #bcc3ce; + cursor: pointer; + display: inline-block; + position: absolute; + transition: background .2s, border .2s, box-shadow .2s, color .2s; +} + +.form-checkbox.input-sm, +.form-radio.input-sm, +.form-switch.input-sm { + font-size: .7rem; + margin: 0; +} + +.form-checkbox.input-lg, +.form-radio.input-lg, +.form-switch.input-lg { + font-size: .9rem; + margin: .3rem 0; +} + +.form-checkbox .form-icon, +.form-radio .form-icon { + background: #fff; + height: .8rem; + left: 0; + top: .3rem; + width: .8rem; +} + +.form-checkbox input:active + .form-icon, +.form-radio input:active + .form-icon { + background: #eef0f3; +} + +.form-checkbox .form-icon { + border-radius: .1rem; +} + +.form-checkbox input:checked + .form-icon::before { + background-clip: padding-box; + border: .1rem solid #fff; + border-left-width: 0; + border-top-width: 0; + content: ""; + height: 9px; + left: 50%; + margin-left: -3px; + margin-top: -6px; + position: absolute; + top: 50%; + transform: rotate(45deg); + width: 6px; +} + +.form-checkbox input:indeterminate + .form-icon { + background: #5755d9; + border-color: #5755d9; +} + +.form-checkbox input:indeterminate + .form-icon::before { + background: #fff; + content: ""; + height: 2px; + left: 50%; + margin-left: -5px; + margin-top: -1px; + position: absolute; + top: 50%; + width: 10px; +} + +.form-radio .form-icon { + border-radius: 50%; +} + +.form-radio input:checked + .form-icon::before { + background: #fff; + border-radius: 50%; + content: ""; + height: 6px; + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + width: 6px; +} + +.form-switch { + padding-left: 2rem; +} + +.form-switch .form-icon { + background: #bcc3ce; + background-clip: padding-box; + border-radius: .45rem; + height: .9rem; + left: 0; + top: .25rem; + width: 1.6rem; +} + +.form-switch .form-icon::before { + background: #fff; + border-radius: 50%; + content: ""; + display: block; + height: .8rem; + left: 0; + position: absolute; + top: 0; + transition: background .2s, border .2s, box-shadow .2s, color .2s, left .2s; + width: .8rem; +} + +.form-switch input:checked + .form-icon::before { + left: 14px; +} + +.form-switch input:active + .form-icon::before { + background: #f7f8f9; +} + +.input-group { + display: flex; + display: -ms-flexbox; +} + +.input-group .input-group-addon { + background: #f7f8f9; + border: .05rem solid #bcc3ce; + border-radius: .1rem; + line-height: 1.2rem; + padding: .25rem .4rem; + white-space: nowrap; +} + +.input-group .input-group-addon.addon-sm { + font-size: .7rem; + padding: .05rem .3rem; +} + +.input-group .input-group-addon.addon-lg { + font-size: .9rem; + padding: .35rem .6rem; +} + +.input-group .form-input, +.input-group .form-select { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + width: 1%; +} + +.input-group .input-group-btn { + z-index: 1; +} + +.input-group .form-input:first-child:not(:last-child), +.input-group .form-select:first-child:not(:last-child), +.input-group .input-group-addon:first-child:not(:last-child), +.input-group .input-group-btn:first-child:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +.input-group .form-input:not(:first-child):not(:last-child), +.input-group .form-select:not(:first-child):not(:last-child), +.input-group .input-group-addon:not(:first-child):not(:last-child), +.input-group .input-group-btn:not(:first-child):not(:last-child) { + border-radius: 0; + margin-left: -.05rem; +} + +.input-group .form-input:last-child:not(:first-child), +.input-group .form-select:last-child:not(:first-child), +.input-group .input-group-addon:last-child:not(:first-child), +.input-group .input-group-btn:last-child:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; + margin-left: -.05rem; +} + +.input-group .form-input:focus, +.input-group .form-select:focus, +.input-group .input-group-addon:focus, +.input-group .input-group-btn:focus { + z-index: 2; +} + +.input-group .form-select { + width: auto; +} + +.input-group.input-inline { + display: inline-flex; + display: -ms-inline-flexbox; +} + +.has-success .form-input, +.form-input.is-success, +.has-success .form-select, +.form-select.is-success { + background: #f9fdfa; + border-color: #32b643; +} + +.has-success .form-input:focus, +.form-input.is-success:focus, +.has-success .form-select:focus, +.form-select.is-success:focus { + box-shadow: 0 0 0 .1rem rgba(50, 182, 67, .2); +} + +.has-error .form-input, +.form-input.is-error, +.has-error .form-select, +.form-select.is-error { + background: #fffaf7; + border-color: #e85600; +} + +.has-error .form-input:focus, +.form-input.is-error:focus, +.has-error .form-select:focus, +.form-select.is-error:focus { + box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); +} + +.has-error .form-checkbox .form-icon, +.form-checkbox.is-error .form-icon, +.has-error .form-radio .form-icon, +.form-radio.is-error .form-icon, +.has-error .form-switch .form-icon, +.form-switch.is-error .form-icon { + border-color: #e85600; +} + +.has-error .form-checkbox input:checked + .form-icon, +.form-checkbox.is-error input:checked + .form-icon, +.has-error .form-radio input:checked + .form-icon, +.form-radio.is-error input:checked + .form-icon, +.has-error .form-switch input:checked + .form-icon, +.form-switch.is-error input:checked + .form-icon { + background: #e85600; + border-color: #e85600; +} + +.has-error .form-checkbox input:focus + .form-icon, +.form-checkbox.is-error input:focus + .form-icon, +.has-error .form-radio input:focus + .form-icon, +.form-radio.is-error input:focus + .form-icon, +.has-error .form-switch input:focus + .form-icon, +.form-switch.is-error input:focus + .form-icon { + border-color: #e85600; + box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); +} + +.has-error .form-checkbox input:indeterminate + .form-icon, +.form-checkbox.is-error input:indeterminate + .form-icon { + background: #e85600; + border-color: #e85600; +} + +.form-input:not(:placeholder-shown):invalid { + border-color: #e85600; +} + +.form-input:not(:placeholder-shown):invalid:focus { + background: #fffaf7; + box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2); +} + +.form-input:not(:placeholder-shown):invalid + .form-input-hint { + color: #e85600; +} + +.form-input:disabled, +.form-input.disabled, +.form-select:disabled, +.form-select.disabled { + background-color: #eef0f3; + cursor: not-allowed; + opacity: .5; +} + +.form-input[readonly] { + background-color: #f7f8f9; +} + +input:disabled + .form-icon, +input.disabled + .form-icon { + background: #eef0f3; + cursor: not-allowed; + opacity: .5; +} + +.form-switch input:disabled + .form-icon::before, +.form-switch input.disabled + .form-icon::before { + background: #fff; +} + +.form-horizontal { + padding: .4rem 0; +} + +.form-horizontal .form-group { + display: flex; + display: -ms-flexbox; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} + +.form-inline { + display: inline-block; +} + +.label { + background: #eef0f3; + border-radius: .1rem; + color: #455060; + display: inline-block; + line-height: 1.25; + padding: .1rem .2rem; +} + +.label.label-rounded { + border-radius: 5rem; + padding-left: .4rem; + padding-right: .4rem; +} + +.label.label-primary { + background: #5755d9; + color: #fff; +} + +.label.label-secondary { + background: #f1f1fc; + color: #5755d9; +} + +.label.label-success { + background: #32b643; + color: #fff; +} + +.label.label-warning { + background: #ffb700; + color: #fff; +} + +.label.label-error { + background: #e85600; + color: #fff; +} + +code { + background: #fcf2f2; + border-radius: .1rem; + color: #d73e48; + font-size: 85%; + line-height: 1.25; + padding: .1rem .2rem; +} + +.code { + border-radius: .1rem; + color: #3b4351; + position: relative; +} + +.code::before { + color: #bcc3ce; + content: attr(data-lang); + font-size: .7rem; + position: absolute; + right: .4rem; + top: .1rem; +} + +.code code { + background: #f7f8f9; + color: inherit; + display: block; + line-height: 1.5; + overflow-x: auto; + padding: 1rem; + width: 100%; +} + +.img-responsive { + display: block; + height: auto; + max-width: 100%; +} + +.img-fit-cover { + object-fit: cover; +} + +.img-fit-contain { + object-fit: contain; +} + +.video-responsive { + display: block; + overflow: hidden; + padding: 0; + position: relative; + width: 100%; +} + +.video-responsive::before { + content: ""; + display: block; + padding-bottom: 56.25%; +} + +.video-responsive iframe, +.video-responsive object, +.video-responsive embed { + border: 0; + bottom: 0; + height: 100%; + left: 0; + position: absolute; + right: 0; + top: 0; + width: 100%; +} + +video.video-responsive { + height: auto; + max-width: 100%; +} + +video.video-responsive::before { + content: none; +} + +.video-responsive-4-3::before { + padding-bottom: 75%; +} + +.video-responsive-1-1::before { + padding-bottom: 100%; +} + +.figure { + margin: 0 0 .4rem 0; +} + +.figure .figure-caption { + color: #66758c; + margin-top: .4rem; +} + +.container { + margin-left: auto; + margin-right: auto; + padding-left: .4rem; + padding-right: .4rem; + width: 100%; +} + +.container.grid-xl { + max-width: 1296px; +} + +.container.grid-lg { + max-width: 976px; +} + +.container.grid-md { + max-width: 856px; +} + +.container.grid-sm { + max-width: 616px; +} + +.container.grid-xs { + max-width: 496px; +} + +.show-xs, +.show-sm, +.show-md, +.show-lg, +.show-xl { + display: none !important; +} + +.columns { + display: flex; + display: -ms-flexbox; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-left: -.4rem; + margin-right: -.4rem; +} + +.columns.col-gapless { + margin-left: 0; + margin-right: 0; +} + +.columns.col-gapless > .column { + padding-left: 0; + padding-right: 0; +} + +.columns.col-oneline { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + overflow-x: auto; +} + +.column { + -ms-flex: 1; + flex: 1; + max-width: 100%; + padding-left: .4rem; + padding-right: .4rem; +} + +.column.col-12, +.column.col-11, +.column.col-10, +.column.col-9, +.column.col-8, +.column.col-7, +.column.col-6, +.column.col-5, +.column.col-4, +.column.col-3, +.column.col-2, +.column.col-1, +.column.col-auto { + -ms-flex: none; + flex: none; +} + +.col-12 { + width: 100%; +} + +.col-11 { + width: 91.66666667%; +} + +.col-10 { + width: 83.33333333%; +} + +.col-9 { + width: 75%; +} + +.col-8 { + width: 66.66666667%; +} + +.col-7 { + width: 58.33333333%; +} + +.col-6 { + width: 50%; +} + +.col-5 { + width: 41.66666667%; +} + +.col-4 { + width: 33.33333333%; +} + +.col-3 { + width: 25%; +} + +.col-2 { + width: 16.66666667%; +} + +.col-1 { + width: 8.33333333%; +} + +.col-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + max-width: none; + width: auto; +} + +.col-mx-auto { + margin-left: auto; + margin-right: auto; +} + +.col-ml-auto { + margin-left: auto; +} + +.col-mr-auto { + margin-right: auto; +} + +@media (max-width: 1280px) { + .col-xl-12, + .col-xl-11, + .col-xl-10, + .col-xl-9, + .col-xl-8, + .col-xl-7, + .col-xl-6, + .col-xl-5, + .col-xl-4, + .col-xl-3, + .col-xl-2, + .col-xl-1, + .col-xl-auto { + -ms-flex: none; + flex: none; + } + .col-xl-12 { + width: 100%; + } + .col-xl-11 { + width: 91.66666667%; + } + .col-xl-10 { + width: 83.33333333%; + } + .col-xl-9 { + width: 75%; + } + .col-xl-8 { + width: 66.66666667%; + } + .col-xl-7 { + width: 58.33333333%; + } + .col-xl-6 { + width: 50%; + } + .col-xl-5 { + width: 41.66666667%; + } + .col-xl-4 { + width: 33.33333333%; + } + .col-xl-3 { + width: 25%; + } + .col-xl-2 { + width: 16.66666667%; + } + .col-xl-1 { + width: 8.33333333%; + } + .col-xl-auto { + width: auto; + } + .hide-xl { + display: none !important; + } + .show-xl { + display: block !important; + } +} + +@media (max-width: 960px) { + .col-lg-12, + .col-lg-11, + .col-lg-10, + .col-lg-9, + .col-lg-8, + .col-lg-7, + .col-lg-6, + .col-lg-5, + .col-lg-4, + .col-lg-3, + .col-lg-2, + .col-lg-1, + .col-lg-auto { + -ms-flex: none; + flex: none; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-auto { + width: auto; + } + .hide-lg { + display: none !important; + } + .show-lg { + display: block !important; + } +} + +@media (max-width: 840px) { + .col-md-12, + .col-md-11, + .col-md-10, + .col-md-9, + .col-md-8, + .col-md-7, + .col-md-6, + .col-md-5, + .col-md-4, + .col-md-3, + .col-md-2, + .col-md-1, + .col-md-auto { + -ms-flex: none; + flex: none; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-auto { + width: auto; + } + .hide-md { + display: none !important; + } + .show-md { + display: block !important; + } +} + +@media (max-width: 600px) { + .col-sm-12, + .col-sm-11, + .col-sm-10, + .col-sm-9, + .col-sm-8, + .col-sm-7, + .col-sm-6, + .col-sm-5, + .col-sm-4, + .col-sm-3, + .col-sm-2, + .col-sm-1, + .col-sm-auto { + -ms-flex: none; + flex: none; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-auto { + width: auto; + } + .hide-sm { + display: none !important; + } + .show-sm { + display: block !important; + } +} + +@media (max-width: 480px) { + .col-xs-12, + .col-xs-11, + .col-xs-10, + .col-xs-9, + .col-xs-8, + .col-xs-7, + .col-xs-6, + .col-xs-5, + .col-xs-4, + .col-xs-3, + .col-xs-2, + .col-xs-1, + .col-xs-auto { + -ms-flex: none; + flex: none; + } + .col-xs-12 { + width: 100%; + } + .col-xs-11 { + width: 91.66666667%; + } + .col-xs-10 { + width: 83.33333333%; + } + .col-xs-9 { + width: 75%; + } + .col-xs-8 { + width: 66.66666667%; + } + .col-xs-7 { + width: 58.33333333%; + } + .col-xs-6 { + width: 50%; + } + .col-xs-5 { + width: 41.66666667%; + } + .col-xs-4 { + width: 33.33333333%; + } + .col-xs-3 { + width: 25%; + } + .col-xs-2 { + width: 16.66666667%; + } + .col-xs-1 { + width: 8.33333333%; + } + .col-xs-auto { + width: auto; + } + .hide-xs { + display: none !important; + } + .show-xs { + display: block !important; + } +} + +.hero { + display: flex; + display: -ms-flexbox; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-pack: justify; + justify-content: space-between; + padding-bottom: 4rem; + padding-top: 4rem; +} + +.hero.hero-sm { + padding-bottom: 2rem; + padding-top: 2rem; +} + +.hero.hero-lg { + padding-bottom: 8rem; + padding-top: 8rem; +} + +.hero .hero-body { + padding: .4rem; +} + +.navbar { + align-items: stretch; + display: flex; + display: -ms-flexbox; + -ms-flex-align: stretch; + -ms-flex-pack: justify; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + justify-content: space-between; +} + +.navbar .navbar-section { + align-items: center; + display: flex; + display: -ms-flexbox; + -ms-flex: 1 0 0; + flex: 1 0 0; + -ms-flex-align: center; +} + +.navbar .navbar-section:not(:first-child):last-child { + -ms-flex-pack: end; + justify-content: flex-end; +} + +.navbar .navbar-center { + align-items: center; + display: flex; + display: -ms-flexbox; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + -ms-flex-align: center; +} + +.navbar .navbar-brand { + font-size: .9rem; + text-decoration: none; +} + +.accordion input:checked ~ .accordion-header .icon, +.accordion[open] .accordion-header .icon { + transform: rotate(90deg); +} + +.accordion input:checked ~ .accordion-body, +.accordion[open] .accordion-body { + max-height: 50rem; +} + +.accordion .accordion-header { + display: block; + padding: .2rem .4rem; +} + +.accordion .accordion-header .icon { + transition: transform .25s; +} + +.accordion .accordion-body { + margin-bottom: .4rem; + max-height: 0; + overflow: hidden; + transition: max-height .25s; +} + +summary.accordion-header::-webkit-details-marker { + display: none; +} + +.avatar { + background: #5755d9; + border-radius: 50%; + color: rgba(255, 255, 255, .85); + display: inline-block; + font-size: .8rem; + font-weight: 300; + height: 1.6rem; + line-height: 1.25; + margin: 0; + position: relative; + vertical-align: middle; + width: 1.6rem; +} + +.avatar.avatar-xs { + font-size: .4rem; + height: .8rem; + width: .8rem; +} + +.avatar.avatar-sm { + font-size: .6rem; + height: 1.2rem; + width: 1.2rem; +} + +.avatar.avatar-lg { + font-size: 1.2rem; + height: 2.4rem; + width: 2.4rem; +} + +.avatar.avatar-xl { + font-size: 1.6rem; + height: 3.2rem; + width: 3.2rem; +} + +.avatar img { + border-radius: 50%; + height: 100%; + position: relative; + width: 100%; + z-index: 1; +} + +.avatar .avatar-icon, +.avatar .avatar-presence { + background: #fff; + bottom: 14.64%; + height: 50%; + padding: .1rem; + position: absolute; + right: 14.64%; + transform: translate(50%, 50%); + width: 50%; + z-index: 2; +} + +.avatar .avatar-presence { + background: #bcc3ce; + border-radius: 50%; + box-shadow: 0 0 0 .1rem #fff; + height: .5em; + width: .5em; +} + +.avatar .avatar-presence.online { + background: #32b643; +} + +.avatar .avatar-presence.busy { + background: #e85600; +} + +.avatar .avatar-presence.away { + background: #ffb700; +} + +.avatar[data-initial]::before { + color: currentColor; + content: attr(data-initial); + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + z-index: 1; +} + +.badge { + position: relative; + white-space: nowrap; +} + +.badge[data-badge]::after, +.badge:not([data-badge])::after { + background: #5755d9; + background-clip: padding-box; + border-radius: .5rem; + box-shadow: 0 0 0 .1rem #fff; + color: #fff; + content: attr(data-badge); + display: inline-block; + transform: translate(-.05rem, -.5rem); +} + +.badge[data-badge]::after { + font-size: .7rem; + height: .9rem; + line-height: 1; + min-width: .9rem; + padding: .1rem .2rem; + text-align: center; + white-space: nowrap; +} + +.badge:not([data-badge])::after, +.badge[data-badge=""]::after { + height: 6px; + min-width: 6px; + padding: 0; + width: 6px; +} + +.badge.btn::after { + position: absolute; + right: 0; + top: 0; + transform: translate(50%, -50%); +} + +.badge.avatar::after { + position: absolute; + right: 14.64%; + top: 14.64%; + transform: translate(50%, -50%); + z-index: 100; +} + +.breadcrumb { + list-style: none; + margin: .2rem 0; + padding: .2rem 0; +} + +.breadcrumb .breadcrumb-item { + color: #66758c; + display: inline-block; + margin: 0; + padding: .2rem 0; +} + +.breadcrumb .breadcrumb-item:not(:last-child) { + margin-right: .2rem; +} + +.breadcrumb .breadcrumb-item:not(:last-child) a { + color: #66758c; +} + +.breadcrumb .breadcrumb-item:not(:first-child)::before { + color: #66758c; + content: "/"; + padding-right: .4rem; +} + +.bar { + background: #eef0f3; + border-radius: .1rem; + display: flex; + display: -ms-flexbox; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + height: .8rem; + width: 100%; +} + +.bar.bar-sm { + height: .2rem; +} + +.bar .bar-item { + background: #5755d9; + color: #fff; + display: block; + -ms-flex-negative: 0; + flex-shrink: 0; + font-size: .7rem; + height: 100%; + line-height: .8rem; + position: relative; + text-align: center; + width: 0; +} + +.bar .bar-item:first-child { + border-bottom-left-radius: .1rem; + border-top-left-radius: .1rem; +} + +.bar .bar-item:last-child { + border-bottom-right-radius: .1rem; + border-top-right-radius: .1rem; + -ms-flex-negative: 1; + flex-shrink: 1; +} + +.bar-slider { + height: .1rem; + margin: .4rem 0; + position: relative; +} + +.bar-slider .bar-item { + left: 0; + padding: 0; + position: absolute; +} + +.bar-slider .bar-item:not(:last-child):first-child { + background: #eef0f3; + z-index: 1; +} + +.bar-slider .bar-slider-btn { + background: #5755d9; + border: 0; + border-radius: 50%; + height: .6rem; + padding: 0; + position: absolute; + right: 0; + top: 50%; + transform: translate(50%, -50%); + width: .6rem; +} + +.bar-slider .bar-slider-btn:active { + box-shadow: 0 0 0 .1rem #5755d9; +} + +.card { + background: #fff; + border: .05rem solid #dadee4; + border-radius: .1rem; + display: flex; + display: -ms-flexbox; + -ms-flex-direction: column; + flex-direction: column; +} + +.card .card-header, +.card .card-body, +.card .card-footer { + padding: .8rem; + padding-bottom: 0; +} + +.card .card-header:last-child, +.card .card-body:last-child, +.card .card-footer:last-child { + padding-bottom: .8rem; +} + +.card .card-body { + -ms-flex: 1 1 auto; + flex: 1 1 auto; +} + +.card .card-image { + padding-top: .8rem; +} + +.card .card-image:first-child { + padding-top: 0; +} + +.card .card-image:first-child img { + border-top-left-radius: .1rem; + border-top-right-radius: .1rem; +} + +.card .card-image:last-child img { + border-bottom-left-radius: .1rem; + border-bottom-right-radius: .1rem; +} + +.chip { + align-items: center; + background: #eef0f3; + border-radius: 5rem; + display: inline-flex; + display: -ms-inline-flexbox; + -ms-flex-align: center; + font-size: 90%; + height: 1.2rem; + line-height: .8rem; + margin: .1rem; + max-width: 320px; + overflow: hidden; + padding: .2rem .4rem; + text-decoration: none; + text-overflow: ellipsis; + vertical-align: middle; + white-space: nowrap; +} + +.chip.active { + background: #5755d9; + color: #fff; +} + +.chip .avatar { + margin-left: -.4rem; + margin-right: .2rem; +} + +.chip .btn-clear { + border-radius: 50%; + transform: scale(.75); +} + +.dropdown { + display: inline-block; + position: relative; +} + +.dropdown .menu { + animation: slide-down .15s ease 1; + display: none; + left: 0; + max-height: 50vh; + overflow-y: auto; + position: absolute; + top: 100%; +} + +.dropdown.dropdown-right .menu { + left: auto; + right: 0; +} + +.dropdown.active .menu, +.dropdown .dropdown-toggle:focus + .menu, +.dropdown .menu:hover { + display: block; +} + +.dropdown .btn-group .dropdown-toggle:nth-last-child(2) { + border-bottom-right-radius: .1rem; + border-top-right-radius: .1rem; +} + +.empty { + background: #f7f8f9; + border-radius: .1rem; + color: #66758c; + padding: 3.2rem 1.6rem; + text-align: center; +} + +.empty .empty-icon { + margin-bottom: .8rem; +} + +.empty .empty-title, +.empty .empty-subtitle { + margin: .4rem auto; +} + +.empty .empty-action { + margin-top: .8rem; +} + +.menu { + background: #fff; + border-radius: .1rem; + box-shadow: 0 .05rem .2rem rgba(48, 55, 66, .3); + list-style: none; + margin: 0; + min-width: 180px; + padding: .4rem; + transform: translateY(.2rem); + z-index: 300; +} + +.menu.menu-nav { + background: transparent; + box-shadow: none; +} + +.menu .menu-item { + margin-top: 0; + padding: 0 .4rem; + position: relative; + text-decoration: none; +} + +.menu .menu-item > a { + border-radius: .1rem; + color: inherit; + display: block; + margin: 0 -.4rem; + padding: .2rem .4rem; + text-decoration: none; +} + +.menu .menu-item > a:focus, +.menu .menu-item > a:hover { + background: #f1f1fc; + color: #5755d9; +} + +.menu .menu-item > a:active, +.menu .menu-item > a.active { + background: #f1f1fc; + color: #5755d9; +} + +.menu .menu-item .form-checkbox, +.menu .menu-item .form-radio, +.menu .menu-item .form-switch { + margin: .1rem 0; +} + +.menu .menu-item + .menu-item { + margin-top: .2rem; +} + +.menu .menu-badge { + align-items: center; + display: flex; + display: -ms-flexbox; + -ms-flex-align: center; + height: 100%; + position: absolute; + right: 0; + top: 0; +} + +.menu .menu-badge .label { + margin-right: .4rem; +} + +.modal { + align-items: center; + bottom: 0; + display: none; + -ms-flex-align: center; + -ms-flex-pack: center; + justify-content: center; + left: 0; + opacity: 0; + overflow: hidden; + padding: .4rem; + position: fixed; + right: 0; + top: 0; +} + +.modal:target, +.modal.active { + display: flex; + display: -ms-flexbox; + opacity: 1; + z-index: 400; +} + +.modal:target .modal-overlay, +.modal.active .modal-overlay { + background: rgba(247, 248, 249, .75); + bottom: 0; + cursor: default; + display: block; + left: 0; + position: absolute; + right: 0; + top: 0; +} + +.modal:target .modal-container, +.modal.active .modal-container { + animation: slide-down .2s ease 1; + z-index: 1; +} + +.modal.modal-sm .modal-container { + max-width: 320px; + padding: 0 .4rem; +} + +.modal.modal-lg .modal-overlay { + background: #fff; +} + +.modal.modal-lg .modal-container { + box-shadow: none; + max-width: 960px; +} + +.modal-container { + background: #fff; + border-radius: .1rem; + box-shadow: 0 .2rem .5rem rgba(48, 55, 66, .3); + display: flex; + display: -ms-flexbox; + -ms-flex-direction: column; + flex-direction: column; + max-height: 75vh; + max-width: 640px; + padding: 0 .8rem; + width: 100%; +} + +.modal-container.modal-fullheight { + max-height: 100vh; +} + +.modal-container .modal-header { + color: #303742; + padding: .8rem; +} + +.modal-container .modal-body { + overflow-y: auto; + padding: .8rem; + position: relative; +} + +.modal-container .modal-footer { + padding: .8rem; + text-align: right; +} + +.nav { + display: flex; + display: -ms-flexbox; + -ms-flex-direction: column; + flex-direction: column; + list-style: none; + margin: .2rem 0; +} + +.nav .nav-item a { + color: #66758c; + padding: .2rem .4rem; + text-decoration: none; +} + +.nav .nav-item a:focus, +.nav .nav-item a:hover { + color: #5755d9; +} + +.nav .nav-item.active > a { + color: #505c6e; + font-weight: bold; +} + +.nav .nav-item.active > a:focus, +.nav .nav-item.active > a:hover { + color: #5755d9; +} + +.nav .nav { + margin-bottom: .4rem; + margin-left: .8rem; +} + +.pagination { + display: flex; + display: -ms-flexbox; + list-style: none; + margin: .2rem 0; + padding: .2rem 0; +} + +.pagination .page-item { + margin: .2rem .05rem; +} + +.pagination .page-item span { + display: inline-block; + padding: .2rem .2rem; +} + +.pagination .page-item a { + border-radius: .1rem; + display: inline-block; + padding: .2rem .4rem; + text-decoration: none; +} + +.pagination .page-item a:focus, +.pagination .page-item a:hover { + color: #5755d9; +} + +.pagination .page-item.disabled a { + cursor: default; + opacity: .5; + pointer-events: none; +} + +.pagination .page-item.active a { + background: #5755d9; + color: #fff; +} + +.pagination .page-item.page-prev, +.pagination .page-item.page-next { + -ms-flex: 1 0 50%; + flex: 1 0 50%; +} + +.pagination .page-item.page-next { + text-align: right; +} + +.pagination .page-item .page-item-title { + margin: 0; +} + +.pagination .page-item .page-item-subtitle { + margin: 0; + opacity: .5; +} + +.panel { + border: .05rem solid #dadee4; + border-radius: .1rem; + display: flex; + display: -ms-flexbox; + -ms-flex-direction: column; + flex-direction: column; +} + +.panel .panel-header, +.panel .panel-footer { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + padding: .8rem; +} + +.panel .panel-nav { + -ms-flex: 0 0 auto; + flex: 0 0 auto; +} + +.panel .panel-body { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + overflow-y: auto; + padding: 0 .8rem; +} + +.popover { + display: inline-block; + position: relative; +} + +.popover .popover-container { + left: 50%; + opacity: 0; + padding: .4rem; + position: absolute; + top: 0; + transform: translate(-50%, -50%) scale(0); + transition: transform .2s; + width: 320px; + z-index: 300; +} + +.popover *:focus + .popover-container, +.popover:hover .popover-container { + display: block; + opacity: 1; + transform: translate(-50%, -100%) scale(1); +} + +.popover.popover-right .popover-container { + left: 100%; + top: 50%; +} + +.popover.popover-right *:focus + .popover-container, +.popover.popover-right:hover .popover-container { + transform: translate(0, -50%) scale(1); +} + +.popover.popover-bottom .popover-container { + left: 50%; + top: 100%; +} + +.popover.popover-bottom *:focus + .popover-container, +.popover.popover-bottom:hover .popover-container { + transform: translate(-50%, 0) scale(1); +} + +.popover.popover-left .popover-container { + left: 0; + top: 50%; +} + +.popover.popover-left *:focus + .popover-container, +.popover.popover-left:hover .popover-container { + transform: translate(-100%, -50%) scale(1); +} + +.popover .card { + border: 0; + box-shadow: 0 .2rem .5rem rgba(48, 55, 66, .3); +} + +.step { + display: flex; + display: -ms-flexbox; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + list-style: none; + margin: .2rem 0; + width: 100%; +} + +.step .step-item { + -ms-flex: 1 1 0; + flex: 1 1 0; + margin-top: 0; + min-height: 1rem; + position: relative; + text-align: center; +} + +.step .step-item:not(:first-child)::before { + background: #5755d9; + content: ""; + height: 2px; + left: -50%; + position: absolute; + top: 9px; + width: 100%; +} + +.step .step-item a { + color: #5755d9; + display: inline-block; + padding: 20px 10px 0; + text-decoration: none; +} + +.step .step-item a::before { + background: #5755d9; + border: .1rem solid #fff; + border-radius: 50%; + content: ""; + display: block; + height: .6rem; + left: 50%; + position: absolute; + top: .2rem; + transform: translateX(-50%); + width: .6rem; + z-index: 1; +} + +.step .step-item.active a::before { + background: #fff; + border: .1rem solid #5755d9; +} + +.step .step-item.active ~ .step-item::before { + background: #dadee4; +} + +.step .step-item.active ~ .step-item a { + color: #bcc3ce; +} + +.step .step-item.active ~ .step-item a::before { + background: #dadee4; +} + +.tab { + align-items: center; + border-bottom: .05rem solid #dadee4; + display: flex; + display: -ms-flexbox; + -ms-flex-align: center; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + list-style: none; + margin: .2rem 0 .15rem 0; +} + +.tab .tab-item { + margin-top: 0; +} + +.tab .tab-item a { + border-bottom: .1rem solid transparent; + color: inherit; + display: block; + margin: 0 .4rem 0 0; + padding: .4rem .2rem .3rem .2rem; + text-decoration: none; +} + +.tab .tab-item a:focus, +.tab .tab-item a:hover { + color: #5755d9; +} + +.tab .tab-item.active a, +.tab .tab-item a.active { + border-bottom-color: #5755d9; + color: #5755d9; +} + +.tab .tab-item.tab-action { + -ms-flex: 1 0 auto; + flex: 1 0 auto; + text-align: right; +} + +.tab .tab-item .btn-clear { + margin-top: -.2rem; +} + +.tab.tab-block .tab-item { + -ms-flex: 1 0 0; + flex: 1 0 0; + text-align: center; +} + +.tab.tab-block .tab-item a { + margin: 0; +} + +.tab.tab-block .tab-item .badge[data-badge]::after { + position: absolute; + right: .1rem; + top: .1rem; + transform: translate(0, 0); +} + +.tab:not(.tab-block) .badge { + padding-right: 0; +} + +.tile { + align-content: space-between; + align-items: flex-start; + display: flex; + display: -ms-flexbox; + -ms-flex-align: start; + -ms-flex-line-pack: justify; +} + +.tile .tile-icon, +.tile .tile-action { + -ms-flex: 0 0 auto; + flex: 0 0 auto; +} + +.tile .tile-content { + -ms-flex: 1 1 auto; + flex: 1 1 auto; +} + +.tile .tile-content:not(:first-child) { + padding-left: .4rem; +} + +.tile .tile-content:not(:last-child) { + padding-right: .4rem; +} + +.tile .tile-title, +.tile .tile-subtitle { + line-height: 1.2rem; +} + +.tile.tile-centered { + align-items: center; + -ms-flex-align: center; +} + +.tile.tile-centered .tile-content { + overflow: hidden; +} + +.tile.tile-centered .tile-title, +.tile.tile-centered .tile-subtitle { + margin-bottom: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.toast { + background: rgba(48, 55, 66, .95); + border: .05rem solid #303742; + border-color: #303742; + border-radius: .1rem; + color: #fff; + display: block; + padding: .4rem; + width: 100%; +} + +.toast.toast-primary { + background: rgba(87, 85, 217, .95); + border-color: #5755d9; +} + +.toast.toast-success { + background: rgba(50, 182, 67, .95); + border-color: #32b643; +} + +.toast.toast-warning { + background: rgba(255, 183, 0, .95); + border-color: #ffb700; +} + +.toast.toast-error { + background: rgba(232, 86, 0, .95); + border-color: #e85600; +} + +.toast a { + color: #fff; + text-decoration: underline; +} + +.toast a:focus, +.toast a:hover, +.toast a:active, +.toast a.active { + opacity: .75; +} + +.toast .btn-clear { + margin: .1rem; +} + +.toast p:last-child { + margin-bottom: 0; +} + +.tooltip { + position: relative; +} + +.tooltip::after { + background: rgba(48, 55, 66, .95); + border-radius: .1rem; + bottom: 100%; + color: #fff; + content: attr(data-tooltip); + display: block; + font-size: .7rem; + left: 50%; + max-width: 320px; + opacity: 0; + overflow: hidden; + padding: .2rem .4rem; + pointer-events: none; + position: absolute; + text-overflow: ellipsis; + transform: translate(-50%, .4rem); + transition: opacity .2s, transform .2s; + white-space: pre; + z-index: 300; +} + +.tooltip:focus::after, +.tooltip:hover::after { + opacity: 1; + transform: translate(-50%, -.2rem); +} + +.tooltip[disabled], +.tooltip.disabled { + pointer-events: auto; +} + +.tooltip.tooltip-right::after { + bottom: 50%; + left: 100%; + transform: translate(-.2rem, 50%); +} + +.tooltip.tooltip-right:focus::after, +.tooltip.tooltip-right:hover::after { + transform: translate(.2rem, 50%); +} + +.tooltip.tooltip-bottom::after { + bottom: auto; + top: 100%; + transform: translate(-50%, -.4rem); +} + +.tooltip.tooltip-bottom:focus::after, +.tooltip.tooltip-bottom:hover::after { + transform: translate(-50%, .2rem); +} + +.tooltip.tooltip-left::after { + bottom: 50%; + left: auto; + right: 100%; + transform: translate(.4rem, 50%); +} + +.tooltip.tooltip-left:focus::after, +.tooltip.tooltip-left:hover::after { + transform: translate(-.2rem, 50%); +} + +@keyframes loading { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +@keyframes slide-down { + 0% { + opacity: 0; + transform: translateY(-1.6rem); + } + 100% { + opacity: 1; + transform: translateY(0); + } +} + +.text-primary { + color: #5755d9 !important; +} + +a.text-primary:focus, +a.text-primary:hover { + color: #4240d4; +} + +a.text-primary:visited { + color: #6c6ade; +} + +.text-secondary { + color: #e5e5f9 !important; +} + +a.text-secondary:focus, +a.text-secondary:hover { + color: #d1d0f4; +} + +a.text-secondary:visited { + color: #fafafe; +} + +.text-gray { + color: #bcc3ce !important; +} + +a.text-gray:focus, +a.text-gray:hover { + color: #adb6c4; +} + +a.text-gray:visited { + color: #cbd0d9; +} + +.text-light { + color: #fff !important; +} + +a.text-light:focus, +a.text-light:hover { + color: #f2f2f2; +} + +a.text-light:visited { + color: white; +} + +.text-dark { + color: #3b4351 !important; +} + +a.text-dark:focus, +a.text-dark:hover { + color: #303742; +} + +a.text-dark:visited { + color: #455060; +} + +.text-success { + color: #32b643 !important; +} + +a.text-success:focus, +a.text-success:hover { + color: #2da23c; +} + +a.text-success:visited { + color: #39c94b; +} + +.text-warning { + color: #ffb700 !important; +} + +a.text-warning:focus, +a.text-warning:hover { + color: #e6a500; +} + +a.text-warning:visited { + color: #ffbe1a; +} + +.text-error { + color: #e85600 !important; +} + +a.text-error:focus, +a.text-error:hover { + color: #cf4d00; +} + +a.text-error:visited { + color: #ff6003; +} + +.bg-primary { + background: #5755d9 !important; + color: #fff; +} + +.bg-secondary { + background: #f1f1fc !important; +} + +.bg-dark { + background: #303742 !important; + color: #fff; +} + +.bg-gray { + background: #f7f8f9 !important; +} + +.bg-success { + background: #32b643 !important; + color: #fff; +} + +.bg-warning { + background: #ffb700 !important; + color: #fff; +} + +.bg-error { + background: #e85600 !important; + color: #fff; +} + +.c-hand { + cursor: pointer; +} + +.c-move { + cursor: move; +} + +.c-zoom-in { + cursor: zoom-in; +} + +.c-zoom-out { + cursor: zoom-out; +} + +.c-not-allowed { + cursor: not-allowed; +} + +.c-auto { + cursor: auto; +} + +.d-block { + display: block; +} + +.d-inline { + display: inline; +} + +.d-inline-block { + display: inline-block; +} + +.d-flex { + display: flex; + display: -ms-flexbox; +} + +.d-inline-flex { + display: inline-flex; + display: -ms-inline-flexbox; +} + +.d-none, +.d-hide { + display: none !important; +} + +.d-visible { + visibility: visible; +} + +.d-invisible { + visibility: hidden; +} + +.text-hide { + background: transparent; + border: 0; + color: transparent; + font-size: 0; + line-height: 0; + text-shadow: none; +} + +.text-assistive { + border: 0; + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} + +.divider, +.divider-vert { + display: block; + position: relative; +} + +.divider[data-content]::after, +.divider-vert[data-content]::after { + background: #fff; + color: #bcc3ce; + content: attr(data-content); + display: inline-block; + font-size: .7rem; + padding: 0 .4rem; + transform: translateY(-.65rem); +} + +.divider { + border-top: .05rem solid #f1f3f5; + height: .05rem; + margin: .4rem 0; +} + +.divider[data-content] { + margin: .8rem 0; +} + +.divider-vert { + display: block; + padding: .8rem; +} + +.divider-vert::before { + border-left: .05rem solid #dadee4; + bottom: .4rem; + content: ""; + display: block; + left: 50%; + position: absolute; + top: .4rem; + transform: translateX(-50%); +} + +.divider-vert[data-content]::after { + left: 50%; + padding: .2rem 0; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); +} + +.loading { + color: transparent !important; + min-height: .8rem; + pointer-events: none; + position: relative; +} + +.loading::after { + animation: loading 500ms infinite linear; + border: .1rem solid #5755d9; + border-radius: 50%; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: .8rem; + left: 50%; + margin-left: -.4rem; + margin-top: -.4rem; + position: absolute; + top: 50%; + width: .8rem; + z-index: 1; +} + +.loading.loading-lg { + min-height: 2rem; +} + +.loading.loading-lg::after { + height: 1.6rem; + margin-left: -.8rem; + margin-top: -.8rem; + width: 1.6rem; +} + +.clearfix::after { + clear: both; + content: ""; + display: table; +} + +.float-left { + float: left !important; +} + +.float-right { + float: right !important; +} + +.p-relative { + position: relative !important; +} + +.p-absolute { + position: absolute !important; +} + +.p-fixed { + position: fixed !important; +} + +.p-sticky { + position: sticky !important; + position: -webkit-sticky !important; +} + +.p-centered { + display: block; + float: none; + margin-left: auto; + margin-right: auto; +} + +.flex-centered { + align-items: center; + display: flex; + display: -ms-flexbox; + -ms-flex-align: center; + -ms-flex-pack: center; + justify-content: center; +} + +.m-0 { + margin: 0 !important; +} + +.mb-0 { + margin-bottom: 0 !important; +} + +.ml-0 { + margin-left: 0 !important; +} + +.mr-0 { + margin-right: 0 !important; +} + +.mt-0 { + margin-top: 0 !important; +} + +.mx-0 { + margin-left: 0 !important; + margin-right: 0 !important; +} + +.my-0 { + margin-bottom: 0 !important; + margin-top: 0 !important; +} + +.m-1 { + margin: .2rem !important; +} + +.mb-1 { + margin-bottom: .2rem !important; +} + +.ml-1 { + margin-left: .2rem !important; +} + +.mr-1 { + margin-right: .2rem !important; +} + +.mt-1 { + margin-top: .2rem !important; +} + +.mx-1 { + margin-left: .2rem !important; + margin-right: .2rem !important; +} + +.my-1 { + margin-bottom: .2rem !important; + margin-top: .2rem !important; +} + +.m-2 { + margin: .4rem !important; +} + +.mb-2 { + margin-bottom: .4rem !important; +} + +.ml-2 { + margin-left: .4rem !important; +} + +.mr-2 { + margin-right: .4rem !important; +} + +.mt-2 { + margin-top: .4rem !important; +} + +.mx-2 { + margin-left: .4rem !important; + margin-right: .4rem !important; +} + +.my-2 { + margin-bottom: .4rem !important; + margin-top: .4rem !important; +} + +.p-0 { + padding: 0 !important; +} + +.pb-0 { + padding-bottom: 0 !important; +} + +.pl-0 { + padding-left: 0 !important; +} + +.pr-0 { + padding-right: 0 !important; +} + +.pt-0 { + padding-top: 0 !important; +} + +.px-0 { + padding-left: 0 !important; + padding-right: 0 !important; +} + +.py-0 { + padding-bottom: 0 !important; + padding-top: 0 !important; +} + +.p-1 { + padding: .2rem !important; +} + +.pb-1 { + padding-bottom: .2rem !important; +} + +.pl-1 { + padding-left: .2rem !important; +} + +.pr-1 { + padding-right: .2rem !important; +} + +.pt-1 { + padding-top: .2rem !important; +} + +.px-1 { + padding-left: .2rem !important; + padding-right: .2rem !important; +} + +.py-1 { + padding-bottom: .2rem !important; + padding-top: .2rem !important; +} + +.p-2 { + padding: .4rem !important; +} + +.pb-2 { + padding-bottom: .4rem !important; +} + +.pl-2 { + padding-left: .4rem !important; +} + +.pr-2 { + padding-right: .4rem !important; +} + +.pt-2 { + padding-top: .4rem !important; +} + +.px-2 { + padding-left: .4rem !important; + padding-right: .4rem !important; +} + +.py-2 { + padding-bottom: .4rem !important; + padding-top: .4rem !important; +} + +.s-rounded { + border-radius: .1rem; +} + +.s-circle { + border-radius: 50%; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +.text-justify { + text-align: justify; +} + +.text-lowercase { + text-transform: lowercase; +} + +.text-uppercase { + text-transform: uppercase; +} + +.text-capitalize { + text-transform: capitalize; +} + +.text-normal { + font-weight: normal; +} + +.text-bold { + font-weight: bold; +} + +.text-italic { + font-style: italic; +} + +.text-large { + font-size: 1.2em; +} + +.text-ellipsis { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.text-clip { + overflow: hidden; + text-overflow: clip; + white-space: nowrap; +} + +.text-break { + -webkit-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + word-break: break-word; + word-wrap: break-word; +} \ No newline at end of file diff --git a/public/js/dashboard.js b/public/js/dashboard.js old mode 100644 new mode 100755 index d49b0eec..cd498d59 --- a/public/js/dashboard.js +++ b/public/js/dashboard.js @@ -48,11 +48,11 @@ async function redoImageGrid(page, mode = null) { TypeX.currentImagePage--; } //could be better :DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD } else if (mode === 'next') { - if (TypeX.pagedNumbers[TypeX.pagedNumbers.length-1] <= TypeX.currentImagePage + 1) { - url = `/api/images/user/pages?page=${TypeX.pagedNumbers[TypeX.pagedNumbers.length-1]}` - TypeX.currentImagePage = TypeX.pagedNumbers[TypeX.pagedNumbers.length-1]; + if (TypeX.pagedNumbers[TypeX.pagedNumbers.length - 1] <= TypeX.currentImagePage + 1) { + url = `/api/images/user/pages?page=${TypeX.pagedNumbers[TypeX.pagedNumbers.length - 1]}` + TypeX.currentImagePage = TypeX.pagedNumbers[TypeX.pagedNumbers.length - 1]; } else { - url = `/api/images/user/pages?page=${TypeX.currentImagePage+1}` + url = `/api/images/user/pages?page=${TypeX.currentImagePage + 1}` TypeX.currentImagePage++; } } else if (mode === 'normal') { @@ -68,47 +68,35 @@ async function redoImageGrid(page, mode = null) { }); const json = await resp.json(); if (json.error || json.code) return showAlert('error', json.error); - try { - json.page.forEach(image => { - $('#typexImages').append(` -<div class="col-sm-4"> - <div class="card m-2" data-toggle="modal" data-target="#typeximg${image.id}"> - <img class="card-img-top" src="${image.url}" alt="Image ${image.id}"> - <div class="modal fade" id="typeximg${image.id}" tabindex="-1" role="dialog" aria-labelledby="imagelabel${image.id}" aria-hidden="true"> - <div class="modal-dialog modal-dialog-centered" role="document"> - <div class="modal-content"> - <div class="modal-header"> - <h5 class="modal-title" id="imagelabel${image.id}">Currenting Managing Image ${image.id}</h5> - <button type="button" class="close" data-dismiss="modal" aria-label="Close"> - <span aria-hidden="true">×</span> - </button> - </div> - <div class="modal-footer"> - <div class="row" style="width:100%;"> - <div class="col-sm-6"> - <button type="button" onclick="window.open('${image.url}', '_blank')" class="btn btn-primary" - style="border-radius: 50px; width:100%;">View Image</button> - </div> - <div class="col-sm-6"> - <button type="button" class="btn btn-danger" data-dismiss="modal" - style="border-radius: 50px; width:100%;" onclick="deleteImage('${image.id}', '${image.url}')">Delete Image</button> - </div> - </div> - </div> - </div> - </div> - </div> - </div> + try { + json.page.forEach(image => { + $('#typexImages').append(` +<div class="column col-4"> +<div class="card"> + <div class="card-image"> + <img src="${image.url}" class="img-responsive"> + </div> +</div> </div> `); - }); + }); } catch (e) { - console.error(e) + document.getElementById('emptyImages').innerHTML = ` + <div class="empty bg-dark"> + <div class="empty-icon"> + <i class="icon icon-photo"></i> + </div> + <p class="empty-title h5">You have no imaages</p> + <p class="empty-subtitle">Use the API to start uploading!</p> +</div> + `; + document.getElementById('typexImagePagination').innerHTML = ''; } } document.getElementById('updateImages').addEventListener('click', async () => { redoImageGrid('0', 'normal'); + document.getElementById('emptyImages').innerHTML = ''; document.getElementById('typexImagePagination').innerHTML = ''; const resp = await fetch('/api/images/user/pages', { @@ -119,40 +107,38 @@ document.getElementById('updateImages').addEventListener('click', async () => { }); const json = await resp.json(); try { -$('#typexImagePagination').append(` + $('#typexImagePagination').append(` <li class="page-item"> <a class="page-link" aria-label="First" onclick="redoImageGrid('0', 'normal')"> First </a> </li>`); -$('#typexImagePagination').append(` + $('#typexImagePagination').append(` <li class="page-item"> <a class="page-link" aria-label="Previous" onclick="redoImageGrid(null, 'prev')"> - <span aria-hidden="true">«</span> - <span class="sr-only">Previous</span> + Prev </a> </li>`); -$('#typexImagePagination').append(` + $('#typexImagePagination').append(` <li class="page-item"> - <select class="custom-select" id="typexImagePaginationDropdown"> + <select class="form-select" id="typexImagePaginationDropdown"> </select> </li>`) - TypeX.pagedNumbers = json.pagedNums; - json.pagedNums.forEach(p => { - $('#typexImagePaginationDropdown').append(` - <option onclick="redoImageGrid('${p}', 'normal')" value="${p}">${p+1}</option> + TypeX.pagedNumbers = json.pagedNums; + json.pagedNums.forEach(p => { + $('#typexImagePaginationDropdown').append(` + <option onclick="redoImageGrid('${p}', 'normal')" value="${p}">${p + 1}</option> `) - }); -$('#typexImagePagination').append(` + }); + $('#typexImagePagination').append(` <li class="page-item"> - <a class="page-link" aria-label="Next" onclick="redoImageGrid(null, 'next')"> - <span aria-hidden="true">»</span> - <span class="sr-only">Next</span> + <a onclick="redoImageGrid(null, 'next')"> + Next </a> </li>`); -$('#typexImagePagination').append(` + $('#typexImagePagination').append(` <li class="page-item"> - <a class="page-link" aria-label="First" onclick="redoImageGrid(TypeX.pagedNumbers[TypeX.pagedNumbers.length-1], 'normal')"> + <a onclick="redoImageGrid(TypeX.pagedNumbers[TypeX.pagedNumbers.length-1], 'normal')"> Last </a> </li>`); @@ -179,7 +165,7 @@ document.getElementById('updateStatistics').addEventListener('click', async () = const c = json.table.images[i]; $('#statsLeaderboardImages').append(` <tr> - <th scope="row">${i+1}</th> + <th>${i + 1}</th> <td>${c.username}</td> <td>${c.count}</td> </tr> @@ -189,7 +175,7 @@ document.getElementById('updateStatistics').addEventListener('click', async () = const c = json.table.views[i]; $('#statsLeaderboardImageViews').append(` <tr> - <th scope="row">${i+1}</th> + <th>${i + 1}</th> <td>${c.username}</td> <td>${c.count}</td> </tr> @@ -215,7 +201,7 @@ document.getElementById('updateShortens').addEventListener('click', async () => for (const shorten of json) { $('#shortensTableShortens').append(` <tr> - <th scope="row">${shorten.id}</th> + <th>${shorten.id}</th> <td><a href="${shorten.origin}">${shorten.origin}</a></td> <td><a href="${shorten.url}">${shorten.url}</a></td> </tr> @@ -227,7 +213,6 @@ document.getElementById('updateShortens').addEventListener('click', async () => }); - const deleteImage = (id, url) => { Swal.fire({ title: 'Are you sure?', @@ -360,13 +345,13 @@ async function shortURL(token, url) { }) }); try { - let te = await res.text(); - Swal.fire( - 'URL Shortened!', - `Shorten: <a target="_blank" href="${te}">${te}</a>`, - 'success' - ); - return; + let te = await res.text(); + Swal.fire( + 'URL Shortened!', + `Shorten: <a target="_blank" href="${te}">${te}</a>`, + 'success' + ); + return; } catch (e) { if (e.message.startsWith('Unexpected token < in JSON at position')) { let te = await res.text(); @@ -446,7 +431,7 @@ async function createUser() { const username = document.getElementById('username').value; const password = document.getElementById('password').value; if (whitespace(username)) return showAlert('error', 'Please input a username.') - const res = await fetch('/api/user', { + const res = await fetch('/api/users', { method: 'POST', headers: { 'Content-Type': 'application/json' @@ -461,7 +446,6 @@ async function createUser() { const json = await res.json(); if (json.error || json.code) return showAlert('error', json.error) else { - $('#modal').modal('toggle'); showAlert('success', `Created user ${json.username} (${json.id})`) return window.location.href = '/' } @@ -470,7 +454,7 @@ async function createUser() { } } -document.getElementById('createUser').addEventListener('click', async () => { +document.getElementById('addUser').addEventListener('click', async () => { if (document.getElementById('administrator').checked) { Swal.fire({ title: 'Are you sure?', diff --git a/src/controllers/APIController.ts b/src/controllers/APIController.ts old mode 100644 new mode 100755 diff --git a/src/controllers/IndexController.ts b/src/controllers/IndexController.ts old mode 100644 new mode 100755 diff --git a/src/core/Console.ts b/src/core/Console.ts old mode 100644 new mode 100755 diff --git a/src/entities/Image.ts b/src/entities/Image.ts old mode 100644 new mode 100755 diff --git a/src/entities/Note.ts b/src/entities/Note.ts old mode 100644 new mode 100755 diff --git a/src/entities/Shorten.ts b/src/entities/Shorten.ts old mode 100644 new mode 100755 diff --git a/src/entities/User.ts b/src/entities/User.ts old mode 100644 new mode 100755 diff --git a/src/index.ts b/src/index.ts old mode 100644 new mode 100755 diff --git a/src/interval.ts b/src/interval.ts old mode 100644 new mode 100755 diff --git a/src/middleware/cookies.ts b/src/middleware/cookies.ts old mode 100644 new mode 100755 diff --git a/src/middleware/cookiesForAPI.ts b/src/middleware/cookiesForAPI.ts old mode 100644 new mode 100755 diff --git a/src/server.ts b/src/server.ts old mode 100644 new mode 100755 diff --git a/src/structures/ConsoleFormatter.ts b/src/structures/ConsoleFormatter.ts old mode 100644 new mode 100755 diff --git a/src/structures/DiscordWebhook.ts b/src/structures/DiscordWebhook.ts old mode 100644 new mode 100755 diff --git a/src/structures/ImageUtil.ts b/src/structures/ImageUtil.ts old mode 100644 new mode 100755 diff --git a/src/structures/ShortenUtil.ts b/src/structures/ShortenUtil.ts old mode 100644 new mode 100755 diff --git a/src/util.ts b/src/util.ts old mode 100644 new mode 100755 diff --git a/tsconfig.json b/tsconfig.json old mode 100644 new mode 100755 diff --git a/uploaders/UPLOADERS.md b/uploaders/UPLOADERS.md deleted file mode 100644 index f6e7f641..00000000 --- a/uploaders/UPLOADERS.md +++ /dev/null @@ -1,12 +0,0 @@ -# TypeX Uploaders -These uploaders are made with ShareX in mind, but can be adapted to other uploaders. -Please make a Pull Request with other uploader configurations with the scheme of -`uploader_type.json`. - -## Images -Images are sent to the `/api/upload/` endpoint with Multipart Form-Data. The payload key is `file`. - ---- - -## URLs -URLs are sent to the `/api/shorten/` endpoint with raw data. The payload key is `url`. \ No newline at end of file diff --git a/uploaders/sharex_images.json b/uploaders/sharex_images.json old mode 100644 new mode 100755 diff --git a/uploaders/sharex_urls.json b/uploaders/sharex_urls.json old mode 100644 new mode 100755 diff --git a/views/404.ejs b/views/404.ejs old mode 100644 new mode 100755 diff --git a/views/error.ejs b/views/error.ejs old mode 100644 new mode 100755 diff --git a/views/index.ejs b/views/index.ejs old mode 100644 new mode 100755 index f8d6bca8..089bcbd3 --- a/views/index.ejs +++ b/views/index.ejs @@ -8,250 +8,249 @@ </head> <body> - <div class="container h-100 d-flex justify-content-center"> - <div class="container my-auto"> - <ul class="nav nav-pills mb-3" id="main-view-tab-list" role="tablist" style="margin-top: 50px;"> - <li class="nav-item"> - <a style="border-radius: 50px;" class="nav-link active" id="home-tab" data-toggle="tab" href="#home" - role="tab" aria-controls="home" aria-selected="true"><i class="fas fa-home"></i> Home</a> - </li> - <li class="nav-item" id="updateStatistics"> - <a style="border-radius: 50px;" class="nav-link" id="stats-tab" data-toggle="tab" href="#stats" - role="tab" aria-controls="stats" aria-selected="false"><i class="fas fa-server"></i> Statistics</a> - </li> - <li class="nav-item" id="updateShortens"> - <a style="border-radius: 50px;" class="nav-link" id="urls-tab" data-toggle="tab" href="#urls" - role="tab" aria-controls="urls" aria-selected="false"><i class="fas fa-compress-alt"></i> URL - Shortener</a> - </li> - <li class="nav-item" id="updateImages"> - <a style="border-radius: 50px;" class="nav-link" id="profile-tab" data-toggle="tab" href="#images" - role="tab" aria-controls="images" aria-selected="false"><i class="fas fa-images"></i> Your - Images</a> - </li> - <% if (user.administrator) { %> - <li class="nav-item"> - <a style="border-radius: 50px;" class="nav-link" id="contact-tab" data-toggle="tab" href="#users" - role="tab" aria-controls="users" aria-selected="false"><i class="fas fa-user-friends"></i> - Users</a> - </li> - <% } %> - </ul> - <div class="tab-content" id="main-view"> - <div class="tab-pane fade show active m-3" id="home" role="tabpanel" aria-labelledby="home-tab"> - <h2> - Welcome back, <%= user.username %>! - <%if(user.administrator){%><span - class="badge badge-pill badge-danger">Admin</span> - <%}else{%><span - class="badge badge-pill badge-primary">User</span> - <%}%> - </h2> - <p>You have <b><%= images.length %></b> images saved.</p> - <h4>API Token</h4> - <button type="button" class="btn btn-sm btn-primary" onclick="copyToken('<%=user.token%>')" - style="border-radius: 50px;"><i class="fas fa-copy"></i> Copy</button> - <button type="button" class="btn btn-sm btn-danger" - id="regenToken" style="border-radius: 50px;"><i class="fas fa-cog"></i> Regenerate</button> - <h4 style="margin-top:12px">Update your Profile</h4> - <form> - <div class="form-group"> - <label for="usernameSave">Username</label> - <input value="<%= user.username %>" type="text" class="form-control" id="usernameSave" + <div class="text-light"> + <input type="radio" id="home-tab" name="tabs" class="tab-locator" hidden checked /> + <input type="radio" id="stats-tab" name="tabs" class="tab-locator" hidden /> + <input type="radio" id="urls-tab" name="tabs" class="tab-locator" hidden /> + <input type="radio" id="notes-tab" name="tabs" class="tab-locator" hidden /> + <input type="radio" id="images-tab" name="tabs" class="tab-locator" hidden /> + <% if (user.administrator) { %> + <input type="radio" id="users-tab" name="tabs" class="tab-locator" hidden /> + <% } %> + <ul class="tab tab-block" style="border:none;"> + <li class="tab-item text-light"><label for="home-tab"><a><i class="icon icon-apps"></i> Home</a></label> + </li> + <li class="tab-item text-light" id="updateStatistics"><label for="stats-tab"><a><i + class="icon icon-message"></i> Statistics</a></label></li> + <li class="tab-item text-light" id="updateShortens"><label for="urls-tab"><a><i class="icon icon-link"></i> + URLS</a></label></li> + <li class="tab-item text-light" id="updateNotes"><label for="notes-tab"><a><i class="icon icon-copy"></i> + Notes</a></label></li> + <li class="tab-item text-light" id="updateImages"><label for="images-tab"><a><i class="icon icon-photo"></i> + Images</a></label></li> + <% if (user.administrator) { %> + <li class="tab-item text-light"><label for="users-tab"><a><i class="icon icon-people"></i> Users</a></label> + </li> + <% } %> + </ul> + + <div class="tabs"> + <div class="tab-content" style="margin: 50px;"> + <div class="card bg-dark" style="border-color: #303742;"> + <div class="card-header"> + <div class="card-title h5">Welcome back, <%=user.username%>!</div> + <% if (user.username === "administrator") { %> + <div class="card-subtitle text-gray"><b>This account is not designed for general usage, only to + create a user for uploading, and other administrator duties.</b></div> + <% } else { %> + <div class="card-subtitle text-gray">You have <b><%=images.length%></b> images.</div> + <% } %> + </div> + <div class="card-body"> + <% if (user.username !== "administrator") { %> + <div class="card-title h5">Token</div> + <div class="container"> + <div class="columns"> + <div class="column col-6"> + <button style="margin-top:12px;width:100%" type="button" + class="btn btn-primary input-group-btn" id="copyToken" + onclick="copyToken('<%=user.token%>')">Copy Token</button> + </div> + <div class="column col-6"> + <button style="margin-top:12px;width:100%" type="button" + class="btn btn-primary input-group-btn" id="regenToken" + onclick="regenToken('<%=user.id%>')">Regen Token</button> + </div> + </div> + </div> + <div class="card-title h5">Update your profile</div> + <form> + <label class="form-label" for="usernameSave">Username</label> + <input class="form-input" type="text" id="usernameSave" name="username" placeholder="Username"> - </div> - - <div class="form-group"> - <label for="passwordSave">Password</label> - <input type="password" class="form-control" id="passwordSave" placeholder="Password"> - </div> - <button type="button" class="btn btn-primary" id="saveUser" - style="border-radius: 50px; width:100%;"><i class="fas fa-pen"></i> Save - </button> - </form> - <br> - <a class="btn btn-danger" href="/logout" style="border-radius: 50px; width:100%;"><i - class="fas fa-sign-out-alt"></i> Logout</a> - </div> - <div class="tab-pane fade m-3" id="stats" role="tabpanel" aria-labelledby="stats-tab"> - <h3>Statistics</h3> - <h5 id="statsDescription"></h5> - <div class="container-fluid pt-2"> - <div class="row"> - <div class="col-sm-6"> - <div class="card m-2"> - <div class="card-body"> - <h5 class="card-title">Leaderboard (Images)</h5> - <p class="card-text"> - <table class="table"> - <thead> - <tr> - <th scope="col">#</th> - <th scope="col">Username</th> - <th scope="col">Images</th> - </tr> - </thead> - <tbody id="statsLeaderboardImages"> - </tbody> - </table> - </p> - </div> + <label class="form-label" for="passwordSave">Password</label> + <input class="form-input" type="password" id="passwordSave" name="password" + placeholder="Password"> + </form> + <% } %> + </div> + <div class="card-footer"> + <% if (user.username === "administrator") { %> + <a href="/logout" style="margin-top:12px;width:100%" type="button" + class="btn btn-error input-group-btn">Logout</a> + <% } else { %> + <div class="container"> + <div class="columns"> + <div class="column col-6"> + <button style="margin-top:12px;width:100%" type="button" + class="btn btn-primary input-group-btn" id="saveUser">Update</button> </div> - </div> - <div class="col-sm-6"> - <div class="card m-2"> - <div class="card-body"> - <h5 class="card-title">Leaderboard (Views)</h5> - <p class="card-text"> - <table class="table"> - <thead> - <tr> - <th scope="col">#</th> - <th scope="col">Username</th> - <th scope="col">Views</th> - </tr> - </thead> - <tbody id="statsLeaderboardImageViews"> - </tbody> - </table> - </p> - </div> + <div class="column col-6"> + <a href="/logout" style="margin-top:12px;width:100%" type="button" + class="btn btn-error input-group-btn">Logout</a> </div> </div> </div> - </div> - </div> - <div class="tab-pane fade m-3" id="images" role="tabpanel" aria-labelledby="images-tab"> - <h3>Your Images</h3> - <div class="container-fluid pt-2"> - <div class="row" id="typexImages"> - - </div> - </div> - <nav aria-label="TypeX Images" class="m-2"> - <ul class="pagination justify-content-center" id="typexImagePagination"> - - </ul> - </nav> - - </div> - <div class="tab-pane fade m-3" id="urls" role="tabpanel" aria-labelledby="urls-tab"> - <h3>Shorten a URL</h3> - <form> - <div class="form-group"> - <label for="urlToShorten">URL</label> - <input type="url" class="form-control" id="urlToShorten" placeholder="URL"> - </div> - - <button type="button" class="btn btn-primary" id="shortenURL" - onclick="shortURL('<%=user.token%>', document.getElementById('urlToShorten').value)" - style="border-radius: 50px; width:100%;">Shorten</button> - </form> - <h3 style="margin-top:5px;">Your Shortens</h3> - <table class="table m-2"> - <thead> - <tr> - <th scope="col">ID</th> - <th scope="col">Origin</th> - <th scope="col">Shortened</th> - </tr> - </thead> - <tbody id="shortensTableShortens"> - </tbody> - </table> - </div> - <% if (user.administrator) { %> - <div class="tab-pane fade m-3" id="users" role="tabpanel" aria-labelledby="users-tab"> - <button style="border-radius: 50px; margin-bottom: 10px;" type="button" class="btn btn-primary" - data-toggle="modal" data-target="#modal">Create New User</button> - <div class="row"> - <% for (let b = 0; b < users.length; b++) { let u = users[b]; let imgs = userImages[b]; %> - <div class="col-sm-4"> - <div class="card m-2"> - <div class="card-body"> - <%if(u.administrator){%> - <h5 class="card-title"><%=u.username%> <span - class="badge badge-pill badge-danger">Admin</span></h5> - <%}else{%> - <h5 class="card-title"><%=u.username%> <span - class="badge badge-pill badge-primary">User</span> <button - class="badge badge-pill badge-danger" - onclick="deleteSpecificUser('<%=u.id%>', '<%=u.username%>')" - style="border:none;">Delete</button></h5> - <%}%> - <p class="card-text"> - <b>ID:</b> <%=u.id%><br> - <b>Images:</b> <%=imgs%> - </p> - </div> - </div> - </div> - <%}%> - </div> - <div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" - aria-hidden="true"> - <div class="modal-dialog" role="document"> - <div class="modal-content"> - <div class="modal-header"> - <h5 class="modal-title" id="exampleModalLabel">New User</h5> - <button type="button" class="close" data-dismiss="modal" aria-label="Close"> - <span aria-hidden="true">×</span> - </button> - </div> - <div class="modal-body"> - <form> - <div class="form-group"> - <label for="username">Username</label> - <input type="text" class="form-control" id="username" name="username" - placeholder="Username"> - </div> - - <div class="form-group"> - <label for="password">Password</label> - <input type="password" class="form-control" id="password" name="password" - placeholder="Password"> - </div> - <div class="form-group"> - <div class="custom-control custom-checkbox"> - <input type="checkbox" class="custom-control-input" id="administrator"> - <label class="custom-control-label" - for="administrator">Administrator?</label> - </div> - </div> - </form> - </div> - <div class="modal-footer"> - <div class="row" style="width:100%;"> - <div class="col-sm-6"> - <button type="button" id="createUser" class="btn btn-primary" - style="border-radius: 50px; width:100%;">Create</button> - </div> - <div class="col-sm-6"> - <button type="button" class="btn btn-danger" data-dismiss="modal" - style="border-radius: 50px; width:100%;">Cancel</button> - </div> - </div> - </div> - </div> - </div> - </div> - </div> - <% } %> + <% } %> </div> </div> </div> - <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" - integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" - crossorigin="anonymous"></script> - <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" - integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" - crossorigin="anonymous"></script> - <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" - integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" - crossorigin="anonymous"></script> - <script src="//cdn.jsdelivr.net/npm/sweetalert2@9/dist/sweetalert2.min.js"></script> - <script src="/public/js/dashboard.js"></script> - <script>TypeX.currentID = '<%=user.id%>'</script> + <div class="tab-content" style="margin:50px;"> + <h3>Statistics</h3> + <h5 id="statsDescription"></h5> + <div class="container"> + <div class="columns"> + <div class="column col-6"> + <div class="card bg-dark" style="border-color: #303742; margin:12px;"> + <div class="card-header"> + <div class="card-title h5">Leaderboard (Image)</div> + </div> + <div class="card-body"> + <table class="table"> + <thead> + <tr> + <th scope="col">#</th> + <th scope="col">Username</th> + <th scope="col">Images</th> + </tr> + </thead> + <tbody id="statsLeaderboardImages"> + </tbody> + </table> + </div> + </div> + </div> + <div class="column col-6"> + <div class="card bg-dark" style="border-color: #303742; margin:12px;"> + <div class="card-header"> + <div class="card-title h5">Leaderboard (Views)</div> + </div> + <div class="card-body"> + <table class="table"> + <thead> + <tr> + <th scope="col">#</th> + <th scope="col">Username</th> + <th scope="col">Views</th> + </tr> + </thead> + <tbody id="statsLeaderboardImageViews"> + </tbody> + </table> + </div> + </div> + </div> + </div> + </div> + </div> + <div class="tab-content" style="margin:50px;"> + <h3>Shorten a URL</h3> + <form> + <div class="form-group"> + <label class="form-label" for="urlToShorten">Name</label> + <input class="form-input" type="text" id="urlToShorten" placeholder="URL"> + </div> + + <button type="button" class="btn btn-primary" id="shortenURL" + onclick="shortURL('<%=user.token%>', document.getElementById('urlToShorten').value)" + style="width:100%;">Shorten</button> + </form> + <h3 style="margin-top:5px;">Your Shortens</h3> + <table class="table" style="margin:12px;"> + <thead> + <tr> + <th scope="col">ID</th> + <th scope="col">Origin</th> + <th scope="col">Shortened</th> + </tr> + </thead> + <tbody id="shortensTableShortens"> + </tbody> + </table> + </div> + <div class="tab-content" style="margin:50px;"> + <h3>Create a Note</h3> + <p>Comming Soon!</p> + </div> + <div class="tab-content" style="margin:50px;"> + <h3>Your Images</h3> + <div id="emptyImages"></div> + <div class="container" style="padding:12px;"> + <div class="container"> + <div id="typexImages" class="columns"> + + </div> + </div> + </div> + <ul class="pagination" style="justify-content: center;margin:12px;" id="typexImagePagination"> + + </ul> + </div> + <div class="tab-content" style="margin:50px;"> + <div class="container"> + <button class="btn btn-primary" + onclick="document.getElementById('modal-create-user').classList.add('active')">Create new + user</button> + <div class="modal" id="modal-create-user"> + <a href="#close" class="modal-overlay" aria-label="Close"></a> + <div class="modal-container bg-dark"> + <div class="modal-header"> + <a href="#close" class="btn btn-clear float-right" aria-label="Close"></a> + <div class="modal-title text-light h5">Create new user</div> + </div> + <div class="modal-body"> + <div class="content"> + <form> + <label class="form-label" for="username">Username</label> + <input class="form-input" type="text" id="username" name="username" + placeholder="Username"> + <label class="form-label" for="password">Password</label> + <input class="form-input" type="password" id="password" name="password" + placeholder="Password"> + <label class="form-switch"> + <input type="checkbox" id="administrator"> + <i class="form-icon"></i> Administrator + </label> + </form> + </div> + </div> + <div class="modal-footer"> + <button class="btn btn-primary" id="addUser" type="button">Create</button> + </div> + </div> + </div> + + <div class="columns"> + <% for (let b = 0; b < users.length; b++) { let u = users[b]; let imgs = userImages[b]; %> + <div class="column col-4"> + <div class="card bg-dark" style="border-color: #303742; margin:12px;"> + <div class="card-header"> + <div class="card-title h5"><%=u.username%></div> + <div class="card-subtitle text-gray"> + <%=u.administrator ? 'Administrator' : 'User'%> + </div> + </div> + <div class="card-body"> + <b>ID: </b> <%=u.id%><br> + <b>Images: </b> <%=imgs%> + </div> + </div> + </div> + <%}%> + </div> + </div> + </div> + </div> + + <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" + integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" + crossorigin="anonymous"></script> + <script src="//cdn.jsdelivr.net/npm/sweetalert2@9/dist/sweetalert2.min.js"></script> + <script src="/public/js/dashboard.js"></script> + <script>TypeX.currentID = '<%=user.id%>'; + document.getElementById('createUserButton').addEventListener("click", () + => { document.getElementById("modal-create-user").classList.add("active") }) + </script> </body> </html> \ No newline at end of file diff --git a/views/login.ejs b/views/login.ejs old mode 100644 new mode 100755 index e5440cb8..6e086d7d --- a/views/login.ejs +++ b/views/login.ejs @@ -8,33 +8,27 @@ </head> <body> - <div class="container h-100 d-flex justify-content-center"> - <div class="jumbotron my-auto" style="background:none;"> - <h1 class="display-4" style="text-align: center;">Login</h1> - <form action="/login" method="post"> - <div class="form-group"> - <label for="username">Username</label> - <input type="text" class="form-control" id="username" name="username" placeholder="Your Username"> - </div> - - <div class="form-group"> - <label for="password">Password</label> - <input type="password" class="form-control" id="password" name="password" - placeholder="Your Password"> - </div> - <button type="submit" class="btn btn-primary" style="border-radius: 50px; width: 100%;">Login</button> - </form> + <div style="display:flex;align-items:center;justify-content:center;height:100%"> + <div class="card bg-dark" style="border-color: #303742;"> + <div class="card-header"> + <div class="card-title h5">Login</div> + <div class="card-subtitle text-gray">Please enter in your username and password.</div> + </div> + <div class="card-body"> + <form action="/login" method="post"> + <label class="form-label" for="username">Username</label> + <input class="form-input" type="text" id="username" name="username" placeholder="Username"> + <label class="form-label" for="username">Password</label> + <input class="form-input" type="password" id="password" name="password" placeholder="Password"> + <button style="margin-top:12px;width:100%" type="submit" + class="btn btn-primary input-group-btn">Login</button> + </form> + </div> </div> </div> <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> - <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" - integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" - crossorigin="anonymous"></script> - <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" - integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" - crossorigin="anonymous"></script> <script src="//cdn.jsdelivr.net/npm/sweetalert2@9/dist/sweetalert2.min.js"></script> <script> if ("<%=failed%>" === 'true') { diff --git a/views/partials/head.ejs b/views/partials/head.ejs old mode 100644 new mode 100755 index 3723ccec..4bdcb131 --- a/views/partials/head.ejs +++ b/views/partials/head.ejs @@ -1,11 +1,42 @@ <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> -<link rel="stylesheet" href="/public/css/bootstrap-dark.min.css" /> +<link rel="stylesheet" href="/public/css/spectre.css" /> +<link rel="stylesheet" href="/public/css/spectre-exp.css" /> +<link rel="stylesheet" href="/public/css/spectre-icons.css" /> <link href="//cdn.jsdelivr.net/npm/@sweetalert2/theme-dark@3/dark.css" rel="stylesheet"> + <script src="https://kit.fontawesome.com/583a38381a.js" crossorigin="anonymous"></script> <style> body, html { height: 100%; + background: #21212c + } + + .tab-item>label:hover { + cursor: pointer; + } + + .tab-content { + display: none; + } + + .tab-locator:nth-of-type(1):checked~.tab-block>.tab-item:nth-of-type(1)>label>a, + .tab-locator:nth-of-type(2):checked~.tab-block>.tab-item:nth-of-type(2)>label>a, + .tab-locator:nth-of-type(3):checked~.tab-block>.tab-item:nth-of-type(3)>label>a, + .tab-locator:nth-of-type(4):checked~.tab-block>.tab-item:nth-of-type(4)>label>a, + .tab-locator:nth-of-type(5):checked~.tab-block>.tab-item:nth-of-type(5)>label>a, + .tab-locator:nth-of-type(6):checked~.tab-block>.tab-item:nth-of-type(6)>label>a { + border-bottom-color: #5764c6; + color: #5764c6; + } + + .tab-locator:nth-of-type(1):checked~.tabs>.tab-content:nth-of-type(1), + .tab-locator:nth-of-type(2):checked~.tabs>.tab-content:nth-of-type(2), + .tab-locator:nth-of-type(3):checked~.tabs>.tab-content:nth-of-type(3), + .tab-locator:nth-of-type(4):checked~.tabs>.tab-content:nth-of-type(4), + .tab-locator:nth-of-type(5):checked~.tabs>.tab-content:nth-of-type(5), + .tab-locator:nth-of-type(6):checked~.tabs>.tab-content:nth-of-type(6) { + display: block; } </style> \ No newline at end of file diff --git a/views/partials/meta.ejs b/views/partials/meta.ejs old mode 100644 new mode 100755