Showing preview only (222K chars total). Download the full file or copy to clipboard to get everything.
Repository: johnwarne/reddit-top-rss
Branch: master
Commit: 5e38bfd2e671
Files: 21
Total size: 213.4 KB
Directory structure:
gitextract_89y497d5/
├── .dockerignore
├── .gitignore
├── Dockerfile
├── LICENSE
├── README.md
├── auth.php
├── cache-clear.php
├── cache.php
├── config-default.php
├── dist/
│ └── css/
│ └── main.css
├── functions.php
├── gulpfile.js
├── html.php
├── index.php
├── js/
│ └── script.js
├── package.json
├── postlist.php
├── rss.php
├── scss/
│ ├── _variables.scss
│ └── main.scss
└── sort-and-filter.php
================================================
FILE CONTENTS
================================================
================================================
FILE: .dockerignore
================================================
.git
.vscode
cache
js
node_modules
scss
================================================
FILE: .gitignore
================================================
#------------------------
# Main ignored files
#------------------------
/.vscode
/cache
/config.php
/env.php
/node_modules
/package-lock.json
#------------------------
# OS files
#------------------------
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
*[Tt]humbs.db
*.Trashes
================================================
FILE: Dockerfile
================================================
FROM trafex/alpine-nginx-php7:latest
COPY --chown=nobody dist ./dist
COPY --chown=nobody auth.php cache-clear.php cache.php config-default.php functions.php html.php index.php postlist.php rss.php sort-and-filter.php ./
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2019 John Warne
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# Update!
This project has been superseded by [Upvote RSS](https://github.com/johnwarne/upvote-rss), my newer project that adds feed support for article content, summaries, comments, media embeds, additional platforms (Lemmy and Hacker News), and others. Check it out!
https://github.com/johnwarne/upvote-rss
# Reddit Top RSS
Reddit Top RSS is a set of scripts for [Reddit's API](https://www.reddit.com/dev/api/) that generates RSS feeds for specified subreddits with score thresholds. To preview your outputted feed items there is a front end that utilizes the Bootstrap v4 framework.
## Preview

## Motivation
I prefer to interact with Reddit in a low-volume way, so I let Reddit Top RSS surface the most popular posts per subreddit in my [RSS reader of choice](https://reederapp.com/). I usually use the `averagePostsPerDay` filter so I can expect a certain amount of posts in my feeds per day.
## Installation and usage
### Reddit app setup
**Due to Reddit's 2023 updated API policies it is now required to first set up an app in your Reddit account that Reddit Top RSS will authenticate through.**
1. First, log into your Reddit account.
1. Navigate to the Reddit app preferences page: [https://www.reddit.com/prefs/apps](https://www.reddit.com/prefs/apps)
1. Click the `create app` or `create another app` button, depending on whether you’ve already created an app before.
1. Choose any name for the app. I've chosen `Top RSS`. Reddit will not allow you to use `Reddit` in the name.
1. Set the type of app to `web app`.
1. You can leave `description` and `about url` fields blank.
1. Enter in any valid URI in the `redirect uri` field. I've used `http://reddit-top-rss.test`.
1. Click the `create app` button when you’re done.
1. Your app’s client ID and client secret will be displayed. You'll need to add these to either your `config.php` or Docker environment variables.
### Manual
To install this repository manually:
1. Clone this repository somewhere with PHP >= 5.6 installed.
1. Copy `config-default.php` to `config.php`.
1. Enter your Reddit user, app ID, and secret into lines 49, 56, and 63, respectively.
1. Open `index.php` in a browser to view the front end.
1. Enter your parameters into the fields to get a preview of the posts that the filters will output. Click the `RSS` button at top to open a new tab with the rendered RSS XML output of the specified filters. This is the URL you subscribe to in your RSS aggregator.
### Docker
A docker image is available at [https://hub.docker.com/r/johnny5w/reddit-top-rss](https://hub.docker.com/r/johnny5w/reddit-top-rss).
#### Command line
```docker
docker run -p 80:8080 -e REDDIT_USER=your_reddit_user -e REDDIT_CLIENT_ID=your_app_id -e REDDIT_CLIENT_SECRET=your_app_secret johnny5w/reddit-top-rss:latest
```
#### docker-compose
```yaml
version: '3'
services:
reddit-top-rss:
image: johnny5w/reddit-top-rss
container_name: reddit-top-rss
restart: unless-stopped
ports:
- 80:8080
environment:
- REDDIT_USER=your_reddit_user
- REDDIT_CLIENT_ID=your_app_id
- REDDIT_CLIENT_SECRET=your_app_secret
- DEFAULT_SUBREDDIT=news
```
#### Docker environment variables
The following required environment variables must be set, or you will not be authorized with Reddit's API:
| Parameter | Function |
| --------------------- | ------------------------------------------------------------------------------ |
| REDDIT_USER | Your Reddit user account with which you've created an app |
| REDDIT_CLIENT_ID | The client ID of the app you've created |
| REDDIT_CLIENT_SECRET | The secret for the app you've created |
The following optional environment variables can be used to override the application defaults:
| Parameter | Function |
| --------------------- | ------------------------------------------------------------------------------ |
| DEFAULT_SUBREDDIT | This sets the initial subreddit on the first page load.<br/>Default: `pics` |
| MERCURY_URL | URL of your Mercury parser instance. <a href="#mercury-parser">See below</a>. |
| MERCURY_API_KEY | API key for your Mercury parser instance. |
| CACHE_REDDIT_JSON | Whether to cache the JSON responses from Reddit.<br/>Default: `true` |
| CACHE_MERCURY_CONTENT | Whether to cache the responses from your Mercury instance.<br/>Default: `true` |
| CACHE_RSS_FEEDS | Whether to cache the outputted XML from Reddit Top RSS.<br/>Default: `true` |
## Supported URL parameters
There are five URL paramenters supported:
### subreddit
The exact string of the subreddit as it appears in the Reddit URL. Only one subreddit may be chosen.
### score
Items below the desired score will be filtered out.
### threshold
This parameter will get the average score for the past month's hot posts and will filter out items that fall below this percentage. This is helpful for volatile subreddits — and subreddits in general — since more people are using the service and causing posts to be scored higher and higher. Since this is a percentage, the number of items in the outputted feed should be more consistent than when using the `score` parameter.
### averagePostsPerDay
Reddit Top RSS will attempt to output an average number of posts per day by looking at a subreddit's recent history to determine the score below which posts will be filtered out. This is the filter I find most useful.
### view
Accepted values are `html` and `rss`:
- `html` shows the front end preview.
- `rss` shows the rendered RSS XML feed. Use this for the URL to subscribe to in your RSS aggregator.
- If the `view` parameter is left blank or omitted, the front end is shown.
## URI examples
- `https://www.example.com?subreddit=funny&threshold=10000`
- `https://www.example.com?subreddit=worldnews&score=1000&view=rss`
- `https://www.example.com?subreddit=coolgithubprojects&averagePostsPerDay=3`
## Configuration
Reddit Top RSS comes with a default configuration. If you'd like to turn caching off, set a different default subreddit, or use a self-hosted [Mercury parser](#mercury-parser), just enter your desired values in `config.php`.
## Mercury parser<a name="mercury-parser"></a>
If you'd like to include parsed article content in your outputted feed items, set a self-hosted [Mercury parser](https://github.com/postlight/mercury-parser) URL and optional API key in `config.php`. An easy to install, Dockerized version of the Mercury parser can be found here: [https://www.github.com/HenryQW/mercury-parser-api](https://www.github.com/HenryQW/mercury-parser-api).
## Caching
By default Reddit Top RSS will cache Reddit JSON files, rendered RSS XML files, and Mercury parsed content to speed up the application. To clear the cache, click the `Clear cached results` link in the footer. To disable caching for any of the above items, set the appropriate values to `false` in `config.php`.
## License
This project is released under the [MIT License].
[MIT License]: http://www.opensource.org/licenses/MIT
## Buy me a coffee
[![BuyMeCoffee][buymecoffeebadge]][buymecoffee]
---
[buymecoffee]: https://www.buymeacoffee.com/johnwarne
[buymecoffeebadge]: https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg?style=for-the-badge
================================================
FILE: auth.php
================================================
<?php
if(empty(REDDIT_USER) || empty(REDDIT_CLIENT_ID) || empty(REDDIT_CLIENT_SECRET)) {
exit("Please set your Reddit username, client ID, and client secret in your Docker environment variables or config.php");
};
if(!file_exists('cache/token')) {
mkdir('cache/token', 0755, true);
}
if(!file_exists('cache/token/token.txt')) {
$tokenFile = fopen('cache/token/token.txt', 'w');
fclose($tokenFile);
} elseif(time() - filectime('cache/token/token.txt') > 60 * 60 ) {
unlink('cache/token/token.txt');
$tokenFile = fopen('cache/token/token.txt', 'w');
fclose($tokenFile);
}
$accessToken = file_get_contents('cache/token/token.txt');
if(empty($accessToken)) {
$authString = base64_encode(REDDIT_CLIENT_ID . ':' . REDDIT_CLIENT_SECRET);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.reddit.com/api/v1/access_token');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'grant_type=client_credentials');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'web:toprss:1.0 (by /u/' . REDDIT_USER . ')');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Basic ' . $authString));
$response = curl_exec($ch);
curl_close($ch);
if(strpos($response, 'error') !== false) {
die("There was an error authenticating with Reddit. Please check your username, client ID, and client secret.");
}
$accessToken = json_decode($response)->access_token;
$tokenFile = fopen('cache/token/token.txt', 'w');
fwrite($tokenFile, $accessToken);
fclose($tokenFile);
}
================================================
FILE: cache-clear.php
================================================
<?php
// Clear cache
array_map("unlink", glob("cache/mercury/*.*"));
array_map("unlink", glob("cache/reddit/*.*"));
array_map("unlink", glob("cache/rss/*.*"));
array_map("unlink", glob("cache/scores/*"));
array_map("unlink", glob("cache/token/*"));
================================================
FILE: cache.php
================================================
<?php
// Create cache directories if they don't exist and remove expired cache files
if(CACHE_REDDIT_JSON == true) {
if (!file_exists("cache/reddit")) {
mkdir("cache/reddit", 0755, true);
}
// Remove Reddit JSON files older than 5 minutes
$dir = "cache/reddit/";
foreach (glob($dir . "*") as $file) {
if(time() - filectime($file) > 60 * 5) {
unlink($file);
}
}
if (!file_exists("cache/scores")) {
mkdir("cache/scores", 0755, true);
}
// Remove score files older than 1 hour
$dir = "cache/scores/";
foreach (glob($dir . "*") as $file) {
if(time() - filectime($file) > 60 * 60) {
unlink($file);
}
}
}
if(CACHE_MERCURY_CONTENT == true) {
if (!file_exists("cache/mercury")) {
mkdir("cache/mercury", 0755, true);
}
// Remove Mercury JSON files older than 7 days
$dir = "cache/mercury/";
foreach (glob($dir . "*") as $file) {
if(time() - filectime($file) > 60 * 60 * 24 * 7) {
unlink($file);
}
}
}
if(CACHE_RSS_FEEDS == true) {
if (!file_exists("cache/rss")) {
mkdir("cache/rss", 0755, true);
}
// Remove RSS feed files older than 1 hour
$dir = "cache/rss/";
foreach (glob($dir . "*") as $file) {
if(time() - filectime($file) > 60 * 60 ) {
unlink($file);
}
}
}
================================================
FILE: config-default.php
================================================
<?php
// Default subreddit
if (!empty($_SERVER["DEFAULT_SUBREDDIT"])) {
define('DEFAULT_SUBREDDIT', $_SERVER["DEFAULT_SUBREDDIT"]);
} else {
define('DEFAULT_SUBREDDIT', 'pics');
}
// Mercury Parser URL, e.g. https://mercuryparser.example.com
if (!empty($_SERVER["MERCURY_URL"])) {
define('MERCURY_URL', $_SERVER["MERCURY_URL"]);
} else {
define('MERCURY_URL', '');
}
// Mercury API key, e.g. YaaFZZf9rUvZJQLXmt&MN9efXKQJxMa1k8smtv09
if (!empty($_SERVER["MERCURY_API_KEY"])) {
define('MERCURY_API_KEY', $_SERVER["MERCURY_API_KEY"]);
} else {
define('MERCURY_API_KEY', '');
}
// Cache Reddit JSON files
if (!empty($_SERVER["CACHE_REDDIT_JSON"])) {
define('CACHE_REDDIT_JSON', $_SERVER["CACHE_REDDIT_JSON"]);
} else {
define('CACHE_REDDIT_JSON', 'true');
}
// Cache Mercury Contend
if (!empty($_SERVER["CACHE_MERCURY_CONTENT"])) {
define('CACHE_MERCURY_CONTENT', $_SERVER["CACHE_MERCURY_CONTENT"]);
} else {
define('CACHE_MERCURY_CONTENT', 'true');
}
// Cache RSS feeds
if (!empty($_SERVER["CACHE_RSS_FEEDS"])) {
define('CACHE_RSS_FEEDS', $_SERVER["CACHE_RSS_FEEDS"]);
} else {
define('CACHE_RSS_FEEDS', 'true');
}
// Reddit username
if (!empty($_SERVER["REDDIT_USER"])) {
define('REDDIT_USER', $_SERVER["REDDIT_USER"]);
} else {
define('REDDIT_USER', 'your_reddit_user');
}
// Reddit Client ID
if (!empty($_SERVER["REDDIT_CLIENT_ID"])) {
define('REDDIT_CLIENT_ID', $_SERVER["REDDIT_CLIENT_ID"]);
} else {
define('REDDIT_CLIENT_ID', 'your_app_id');
}
// Reddit Client Secret
if (!empty($_SERVER["REDDIT_CLIENT_SECRET"])) {
define('REDDIT_CLIENT_SECRET', $_SERVER["REDDIT_CLIENT_SECRET"]);
} else {
define('REDDIT_CLIENT_SECRET', 'your_app_secret');
}
// Config version
if (!empty($_SERVER["CONFIG_VERSION"])) {
define('CONFIG_VERSION', $_SERVER["CONFIG_VERSION"]);
} else {
define('CONFIG_VERSION', 1);
}
================================================
FILE: dist/css/main.css
================================================
:root {
--blue: #039BE5;
--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: #039BE5;
--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; }
*,
*::before,
*::after {
-webkit-box-sizing: border-box;
box-sizing: border-box; }
html {
font-family: sans-serif;
line-height: 1.15;
-webkit-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
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: #212529;
text-align: left;
background-color: #fff; }
[tabindex="-1"]:focus {
outline: 0 !important; }
hr {
-webkit-box-sizing: content-box;
box-sizing: content-box;
height: 0;
overflow: visible; }
h1, h2, h3, h4, h5, h6 {
margin-top: 0;
margin-bottom: 0.5rem; }
p {
margin-top: 0;
margin-bottom: 1rem; }
abbr[title],
abbr[data-original-title] {
text-decoration: underline;
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
border-bottom: 0;
text-decoration-skip-ink: none; }
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit; }
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem; }
ol ol,
ul ul,
ol ul,
ul ol {
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: #039BE5;
text-decoration: none;
background-color: transparent; }
a:hover {
color: #026899;
text-decoration: underline; }
a:not([href]):not([tabindex]) {
color: inherit;
text-decoration: none; }
a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {
color: inherit;
text-decoration: none; }
a:not([href]):not([tabindex]):focus {
outline: 0; }
pre,
code,
kbd,
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: 0.75rem;
padding-bottom: 0.75rem;
color: #6c757d;
text-align: left;
caption-side: bottom; }
th {
text-align: inherit; }
label {
display: inline-block;
margin-bottom: 0.5rem; }
button {
border-radius: 0; }
button:focus {
outline: 1px dotted;
outline: 5px auto -webkit-focus-ring-color; }
input,
button,
select,
optgroup,
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; }
button,
[type="button"],
[type="reset"],
[type="submit"] {
-webkit-appearance: button; }
button:not(:disabled),
[type="button"]:not(:disabled),
[type="reset"]:not(:disabled),
[type="submit"]:not(:disabled) {
cursor: pointer; }
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
padding: 0;
border-style: none; }
input[type="radio"],
input[type="checkbox"] {
-webkit-box-sizing: border-box;
box-sizing: border-box;
padding: 0; }
input[type="date"],
input[type="time"],
input[type="datetime-local"],
input[type="month"] {
-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: 0.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(0, 0, 0, 0.1); }
small,
.small {
font-size: 80%;
font-weight: 400; }
mark,
.mark {
padding: 0.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: 0.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: 0.25rem;
background-color: #fff;
border: 1px solid #dee2e6;
border-radius: 0.25rem;
max-width: 100%;
height: auto; }
.figure {
display: inline-block; }
.figure-img {
margin-bottom: 0.5rem;
line-height: 1; }
.figure-caption {
font-size: 90%;
color: #6c757d; }
.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 {
width: 100%;
padding-right: 15px;
padding-left: 15px;
margin-right: auto;
margin-left: auto; }
.row {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
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-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,
.col-auto, .col-sm-1, .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-10, .col-sm-11, .col-sm-12, .col-sm,
.col-sm-auto, .col-md-1, .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-10, .col-md-11, .col-md-12, .col-md,
.col-md-auto, .col-lg-1, .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-10, .col-lg-11, .col-lg-12, .col-lg,
.col-lg-auto, .col-xl-1, .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-10, .col-xl-11, .col-xl-12, .col-xl,
.col-xl-auto {
position: relative;
width: 100%;
padding-right: 15px;
padding-left: 15px; }
.col {
-ms-flex-preferred-size: 0;
flex-basis: 0;
-webkit-box-flex: 1;
-ms-flex-positive: 1;
flex-grow: 1;
max-width: 100%; }
.col-auto {
-webkit-box-flex: 0;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
width: auto;
max-width: 100%; }
.col-1 {
-webkit-box-flex: 0;
-ms-flex: 0 0 8.33333%;
flex: 0 0 8.33333%;
max-width: 8.33333%; }
.col-2 {
-webkit-box-flex: 0;
-ms-flex: 0 0 16.66667%;
flex: 0 0 16.66667%;
max-width: 16.66667%; }
.col-3 {
-webkit-box-flex: 0;
-ms-flex: 0 0 25%;
flex: 0 0 25%;
max-width: 25%; }
.col-4 {
-webkit-box-flex: 0;
-ms-flex: 0 0 33.33333%;
flex: 0 0 33.33333%;
max-width: 33.33333%; }
.col-5 {
-webkit-box-flex: 0;
-ms-flex: 0 0 41.66667%;
flex: 0 0 41.66667%;
max-width: 41.66667%; }
.col-6 {
-webkit-box-flex: 0;
-ms-flex: 0 0 50%;
flex: 0 0 50%;
max-width: 50%; }
.col-7 {
-webkit-box-flex: 0;
-ms-flex: 0 0 58.33333%;
flex: 0 0 58.33333%;
max-width: 58.33333%; }
.col-8 {
-webkit-box-flex: 0;
-ms-flex: 0 0 66.66667%;
flex: 0 0 66.66667%;
max-width: 66.66667%; }
.col-9 {
-webkit-box-flex: 0;
-ms-flex: 0 0 75%;
flex: 0 0 75%;
max-width: 75%; }
.col-10 {
-webkit-box-flex: 0;
-ms-flex: 0 0 83.33333%;
flex: 0 0 83.33333%;
max-width: 83.33333%; }
.col-11 {
-webkit-box-flex: 0;
-ms-flex: 0 0 91.66667%;
flex: 0 0 91.66667%;
max-width: 91.66667%; }
.col-12 {
-webkit-box-flex: 0;
-ms-flex: 0 0 100%;
flex: 0 0 100%;
max-width: 100%; }
.order-first {
-webkit-box-ordinal-group: 0;
-ms-flex-order: -1;
order: -1; }
.order-last {
-webkit-box-ordinal-group: 14;
-ms-flex-order: 13;
order: 13; }
.order-0 {
-webkit-box-ordinal-group: 1;
-ms-flex-order: 0;
order: 0; }
.order-1 {
-webkit-box-ordinal-group: 2;
-ms-flex-order: 1;
order: 1; }
.order-2 {
-webkit-box-ordinal-group: 3;
-ms-flex-order: 2;
order: 2; }
.order-3 {
-webkit-box-ordinal-group: 4;
-ms-flex-order: 3;
order: 3; }
.order-4 {
-webkit-box-ordinal-group: 5;
-ms-flex-order: 4;
order: 4; }
.order-5 {
-webkit-box-ordinal-group: 6;
-ms-flex-order: 5;
order: 5; }
.order-6 {
-webkit-box-ordinal-group: 7;
-ms-flex-order: 6;
order: 6; }
.order-7 {
-webkit-box-ordinal-group: 8;
-ms-flex-order: 7;
order: 7; }
.order-8 {
-webkit-box-ordinal-group: 9;
-ms-flex-order: 8;
order: 8; }
.order-9 {
-webkit-box-ordinal-group: 10;
-ms-flex-order: 9;
order: 9; }
.order-10 {
-webkit-box-ordinal-group: 11;
-ms-flex-order: 10;
order: 10; }
.order-11 {
-webkit-box-ordinal-group: 12;
-ms-flex-order: 11;
order: 11; }
.order-12 {
-webkit-box-ordinal-group: 13;
-ms-flex-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 {
-ms-flex-preferred-size: 0;
flex-basis: 0;
-webkit-box-flex: 1;
-ms-flex-positive: 1;
flex-grow: 1;
max-width: 100%; }
.col-sm-auto {
-webkit-box-flex: 0;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
width: auto;
max-width: 100%; }
.col-sm-1 {
-webkit-box-flex: 0;
-ms-flex: 0 0 8.33333%;
flex: 0 0 8.33333%;
max-width: 8.33333%; }
.col-sm-2 {
-webkit-box-flex: 0;
-ms-flex: 0 0 16.66667%;
flex: 0 0 16.66667%;
max-width: 16.66667%; }
.col-sm-3 {
-webkit-box-flex: 0;
-ms-flex: 0 0 25%;
flex: 0 0 25%;
max-width: 25%; }
.col-sm-4 {
-webkit-box-flex: 0;
-ms-flex: 0 0 33.33333%;
flex: 0 0 33.33333%;
max-width: 33.33333%; }
.col-sm-5 {
-webkit-box-flex: 0;
-ms-flex: 0 0 41.66667%;
flex: 0 0 41.66667%;
max-width: 41.66667%; }
.col-sm-6 {
-webkit-box-flex: 0;
-ms-flex: 0 0 50%;
flex: 0 0 50%;
max-width: 50%; }
.col-sm-7 {
-webkit-box-flex: 0;
-ms-flex: 0 0 58.33333%;
flex: 0 0 58.33333%;
max-width: 58.33333%; }
.col-sm-8 {
-webkit-box-flex: 0;
-ms-flex: 0 0 66.66667%;
flex: 0 0 66.66667%;
max-width: 66.66667%; }
.col-sm-9 {
-webkit-box-flex: 0;
-ms-flex: 0 0 75%;
flex: 0 0 75%;
max-width: 75%; }
.col-sm-10 {
-webkit-box-flex: 0;
-ms-flex: 0 0 83.33333%;
flex: 0 0 83.33333%;
max-width: 83.33333%; }
.col-sm-11 {
-webkit-box-flex: 0;
-ms-flex: 0 0 91.66667%;
flex: 0 0 91.66667%;
max-width: 91.66667%; }
.col-sm-12 {
-webkit-box-flex: 0;
-ms-flex: 0 0 100%;
flex: 0 0 100%;
max-width: 100%; }
.order-sm-first {
-webkit-box-ordinal-group: 0;
-ms-flex-order: -1;
order: -1; }
.order-sm-last {
-webkit-box-ordinal-group: 14;
-ms-flex-order: 13;
order: 13; }
.order-sm-0 {
-webkit-box-ordinal-group: 1;
-ms-flex-order: 0;
order: 0; }
.order-sm-1 {
-webkit-box-ordinal-group: 2;
-ms-flex-order: 1;
order: 1; }
.order-sm-2 {
-webkit-box-ordinal-group: 3;
-ms-flex-order: 2;
order: 2; }
.order-sm-3 {
-webkit-box-ordinal-group: 4;
-ms-flex-order: 3;
order: 3; }
.order-sm-4 {
-webkit-box-ordinal-group: 5;
-ms-flex-order: 4;
order: 4; }
.order-sm-5 {
-webkit-box-ordinal-group: 6;
-ms-flex-order: 5;
order: 5; }
.order-sm-6 {
-webkit-box-ordinal-group: 7;
-ms-flex-order: 6;
order: 6; }
.order-sm-7 {
-webkit-box-ordinal-group: 8;
-ms-flex-order: 7;
order: 7; }
.order-sm-8 {
-webkit-box-ordinal-group: 9;
-ms-flex-order: 8;
order: 8; }
.order-sm-9 {
-webkit-box-ordinal-group: 10;
-ms-flex-order: 9;
order: 9; }
.order-sm-10 {
-webkit-box-ordinal-group: 11;
-ms-flex-order: 10;
order: 10; }
.order-sm-11 {
-webkit-box-ordinal-group: 12;
-ms-flex-order: 11;
order: 11; }
.order-sm-12 {
-webkit-box-ordinal-group: 13;
-ms-flex-order: 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 {
-ms-flex-preferred-size: 0;
flex-basis: 0;
-webkit-box-flex: 1;
-ms-flex-positive: 1;
flex-grow: 1;
max-width: 100%; }
.col-md-auto {
-webkit-box-flex: 0;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
width: auto;
max-width: 100%; }
.col-md-1 {
-webkit-box-flex: 0;
-ms-flex: 0 0 8.33333%;
flex: 0 0 8.33333%;
max-width: 8.33333%; }
.col-md-2 {
-webkit-box-flex: 0;
-ms-flex: 0 0 16.66667%;
flex: 0 0 16.66667%;
max-width: 16.66667%; }
.col-md-3 {
-webkit-box-flex: 0;
-ms-flex: 0 0 25%;
flex: 0 0 25%;
max-width: 25%; }
.col-md-4 {
-webkit-box-flex: 0;
-ms-flex: 0 0 33.33333%;
flex: 0 0 33.33333%;
max-width: 33.33333%; }
.col-md-5 {
-webkit-box-flex: 0;
-ms-flex: 0 0 41.66667%;
flex: 0 0 41.66667%;
max-width: 41.66667%; }
.col-md-6 {
-webkit-box-flex: 0;
-ms-flex: 0 0 50%;
flex: 0 0 50%;
max-width: 50%; }
.col-md-7 {
-webkit-box-flex: 0;
-ms-flex: 0 0 58.33333%;
flex: 0 0 58.33333%;
max-width: 58.33333%; }
.col-md-8 {
-webkit-box-flex: 0;
-ms-flex: 0 0 66.66667%;
flex: 0 0 66.66667%;
max-width: 66.66667%; }
.col-md-9 {
-webkit-box-flex: 0;
-ms-flex: 0 0 75%;
flex: 0 0 75%;
max-width: 75%; }
.col-md-10 {
-webkit-box-flex: 0;
-ms-flex: 0 0 83.33333%;
flex: 0 0 83.33333%;
max-width: 83.33333%; }
.col-md-11 {
-webkit-box-flex: 0;
-ms-flex: 0 0 91.66667%;
flex: 0 0 91.66667%;
max-width: 91.66667%; }
.col-md-12 {
-webkit-box-flex: 0;
-ms-flex: 0 0 100%;
flex: 0 0 100%;
max-width: 100%; }
.order-md-first {
-webkit-box-ordinal-group: 0;
-ms-flex-order: -1;
order: -1; }
.order-md-last {
-webkit-box-ordinal-group: 14;
-ms-flex-order: 13;
order: 13; }
.order-md-0 {
-webkit-box-ordinal-group: 1;
-ms-flex-order: 0;
order: 0; }
.order-md-1 {
-webkit-box-ordinal-group: 2;
-ms-flex-order: 1;
order: 1; }
.order-md-2 {
-webkit-box-ordinal-group: 3;
-ms-flex-order: 2;
order: 2; }
.order-md-3 {
-webkit-box-ordinal-group: 4;
-ms-flex-order: 3;
order: 3; }
.order-md-4 {
-webkit-box-ordinal-group: 5;
-ms-flex-order: 4;
order: 4; }
.order-md-5 {
-webkit-box-ordinal-group: 6;
-ms-flex-order: 5;
order: 5; }
.order-md-6 {
-webkit-box-ordinal-group: 7;
-ms-flex-order: 6;
order: 6; }
.order-md-7 {
-webkit-box-ordinal-group: 8;
-ms-flex-order: 7;
order: 7; }
.order-md-8 {
-webkit-box-ordinal-group: 9;
-ms-flex-order: 8;
order: 8; }
.order-md-9 {
-webkit-box-ordinal-group: 10;
-ms-flex-order: 9;
order: 9; }
.order-md-10 {
-webkit-box-ordinal-group: 11;
-ms-flex-order: 10;
order: 10; }
.order-md-11 {
-webkit-box-ordinal-group: 12;
-ms-flex-order: 11;
order: 11; }
.order-md-12 {
-webkit-box-ordinal-group: 13;
-ms-flex-order: 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 {
-ms-flex-preferred-size: 0;
flex-basis: 0;
-webkit-box-flex: 1;
-ms-flex-positive: 1;
flex-grow: 1;
max-width: 100%; }
.col-lg-auto {
-webkit-box-flex: 0;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
width: auto;
max-width: 100%; }
.col-lg-1 {
-webkit-box-flex: 0;
-ms-flex: 0 0 8.33333%;
flex: 0 0 8.33333%;
max-width: 8.33333%; }
.col-lg-2 {
-webkit-box-flex: 0;
-ms-flex: 0 0 16.66667%;
flex: 0 0 16.66667%;
max-width: 16.66667%; }
.col-lg-3 {
-webkit-box-flex: 0;
-ms-flex: 0 0 25%;
flex: 0 0 25%;
max-width: 25%; }
.col-lg-4 {
-webkit-box-flex: 0;
-ms-flex: 0 0 33.33333%;
flex: 0 0 33.33333%;
max-width: 33.33333%; }
.col-lg-5 {
-webkit-box-flex: 0;
-ms-flex: 0 0 41.66667%;
flex: 0 0 41.66667%;
max-width: 41.66667%; }
.col-lg-6 {
-webkit-box-flex: 0;
-ms-flex: 0 0 50%;
flex: 0 0 50%;
max-width: 50%; }
.col-lg-7 {
-webkit-box-flex: 0;
-ms-flex: 0 0 58.33333%;
flex: 0 0 58.33333%;
max-width: 58.33333%; }
.col-lg-8 {
-webkit-box-flex: 0;
-ms-flex: 0 0 66.66667%;
flex: 0 0 66.66667%;
max-width: 66.66667%; }
.col-lg-9 {
-webkit-box-flex: 0;
-ms-flex: 0 0 75%;
flex: 0 0 75%;
max-width: 75%; }
.col-lg-10 {
-webkit-box-flex: 0;
-ms-flex: 0 0 83.33333%;
flex: 0 0 83.33333%;
max-width: 83.33333%; }
.col-lg-11 {
-webkit-box-flex: 0;
-ms-flex: 0 0 91.66667%;
flex: 0 0 91.66667%;
max-width: 91.66667%; }
.col-lg-12 {
-webkit-box-flex: 0;
-ms-flex: 0 0 100%;
flex: 0 0 100%;
max-width: 100%; }
.order-lg-first {
-webkit-box-ordinal-group: 0;
-ms-flex-order: -1;
order: -1; }
.order-lg-last {
-webkit-box-ordinal-group: 14;
-ms-flex-order: 13;
order: 13; }
.order-lg-0 {
-webkit-box-ordinal-group: 1;
-ms-flex-order: 0;
order: 0; }
.order-lg-1 {
-webkit-box-ordinal-group: 2;
-ms-flex-order: 1;
order: 1; }
.order-lg-2 {
-webkit-box-ordinal-group: 3;
-ms-flex-order: 2;
order: 2; }
.order-lg-3 {
-webkit-box-ordinal-group: 4;
-ms-flex-order: 3;
order: 3; }
.order-lg-4 {
-webkit-box-ordinal-group: 5;
-ms-flex-order: 4;
order: 4; }
.order-lg-5 {
-webkit-box-ordinal-group: 6;
-ms-flex-order: 5;
order: 5; }
.order-lg-6 {
-webkit-box-ordinal-group: 7;
-ms-flex-order: 6;
order: 6; }
.order-lg-7 {
-webkit-box-ordinal-group: 8;
-ms-flex-order: 7;
order: 7; }
.order-lg-8 {
-webkit-box-ordinal-group: 9;
-ms-flex-order: 8;
order: 8; }
.order-lg-9 {
-webkit-box-ordinal-group: 10;
-ms-flex-order: 9;
order: 9; }
.order-lg-10 {
-webkit-box-ordinal-group: 11;
-ms-flex-order: 10;
order: 10; }
.order-lg-11 {
-webkit-box-ordinal-group: 12;
-ms-flex-order: 11;
order: 11; }
.order-lg-12 {
-webkit-box-ordinal-group: 13;
-ms-flex-order: 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 {
-ms-flex-preferred-size: 0;
flex-basis: 0;
-webkit-box-flex: 1;
-ms-flex-positive: 1;
flex-grow: 1;
max-width: 100%; }
.col-xl-auto {
-webkit-box-flex: 0;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
width: auto;
max-width: 100%; }
.col-xl-1 {
-webkit-box-flex: 0;
-ms-flex: 0 0 8.33333%;
flex: 0 0 8.33333%;
max-width: 8.33333%; }
.col-xl-2 {
-webkit-box-flex: 0;
-ms-flex: 0 0 16.66667%;
flex: 0 0 16.66667%;
max-width: 16.66667%; }
.col-xl-3 {
-webkit-box-flex: 0;
-ms-flex: 0 0 25%;
flex: 0 0 25%;
max-width: 25%; }
.col-xl-4 {
-webkit-box-flex: 0;
-ms-flex: 0 0 33.33333%;
flex: 0 0 33.33333%;
max-width: 33.33333%; }
.col-xl-5 {
-webkit-box-flex: 0;
-ms-flex: 0 0 41.66667%;
flex: 0 0 41.66667%;
max-width: 41.66667%; }
.col-xl-6 {
-webkit-box-flex: 0;
-ms-flex: 0 0 50%;
flex: 0 0 50%;
max-width: 50%; }
.col-xl-7 {
-webkit-box-flex: 0;
-ms-flex: 0 0 58.33333%;
flex: 0 0 58.33333%;
max-width: 58.33333%; }
.col-xl-8 {
-webkit-box-flex: 0;
-ms-flex: 0 0 66.66667%;
flex: 0 0 66.66667%;
max-width: 66.66667%; }
.col-xl-9 {
-webkit-box-flex: 0;
-ms-flex: 0 0 75%;
flex: 0 0 75%;
max-width: 75%; }
.col-xl-10 {
-webkit-box-flex: 0;
-ms-flex: 0 0 83.33333%;
flex: 0 0 83.33333%;
max-width: 83.33333%; }
.col-xl-11 {
-webkit-box-flex: 0;
-ms-flex: 0 0 91.66667%;
flex: 0 0 91.66667%;
max-width: 91.66667%; }
.col-xl-12 {
-webkit-box-flex: 0;
-ms-flex: 0 0 100%;
flex: 0 0 100%;
max-width: 100%; }
.order-xl-first {
-webkit-box-ordinal-group: 0;
-ms-flex-order: -1;
order: -1; }
.order-xl-last {
-webkit-box-ordinal-group: 14;
-ms-flex-order: 13;
order: 13; }
.order-xl-0 {
-webkit-box-ordinal-group: 1;
-ms-flex-order: 0;
order: 0; }
.order-xl-1 {
-webkit-box-ordinal-group: 2;
-ms-flex-order: 1;
order: 1; }
.order-xl-2 {
-webkit-box-ordinal-group: 3;
-ms-flex-order: 2;
order: 2; }
.order-xl-3 {
-webkit-box-ordinal-group: 4;
-ms-flex-order: 3;
order: 3; }
.order-xl-4 {
-webkit-box-ordinal-group: 5;
-ms-flex-order: 4;
order: 4; }
.order-xl-5 {
-webkit-box-ordinal-group: 6;
-ms-flex-order: 5;
order: 5; }
.order-xl-6 {
-webkit-box-ordinal-group: 7;
-ms-flex-order: 6;
order: 6; }
.order-xl-7 {
-webkit-box-ordinal-group: 8;
-ms-flex-order: 7;
order: 7; }
.order-xl-8 {
-webkit-box-ordinal-group: 9;
-ms-flex-order: 8;
order: 8; }
.order-xl-9 {
-webkit-box-ordinal-group: 10;
-ms-flex-order: 9;
order: 9; }
.order-xl-10 {
-webkit-box-ordinal-group: 11;
-ms-flex-order: 10;
order: 10; }
.order-xl-11 {
-webkit-box-ordinal-group: 12;
-ms-flex-order: 11;
order: 11; }
.order-xl-12 {
-webkit-box-ordinal-group: 13;
-ms-flex-order: 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%; } }
.form-control {
display: block;
width: 100%;
height: calc(1.5em + 0.75rem + 2px);
padding: 0.375rem 0.75rem;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #495057;
background-color: #fff;
background-clip: padding-box;
border: 1px solid #ced4da;
border-radius: 0.25rem;
-webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; }
@media (prefers-reduced-motion: reduce) {
.form-control {
-webkit-transition: none;
transition: none; } }
.form-control::-ms-expand {
background-color: transparent;
border: 0; }
.form-control:focus {
color: #495057;
background-color: #fff;
border-color: #6acdfd;
outline: 0;
-webkit-box-shadow: 0 0 0 0.2rem rgba(3, 155, 229, 0.25);
box-shadow: 0 0 0 0.2rem rgba(3, 155, 229, 0.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: #e9ecef;
opacity: 1; }
select.form-control:focus::-ms-value {
color: #495057;
background-color: #fff; }
.form-control-file,
.form-control-range {
display: block;
width: 100%; }
.col-form-label {
padding-top: calc(0.375rem + 1px);
padding-bottom: calc(0.375rem + 1px);
margin-bottom: 0;
font-size: inherit;
line-height: 1.5; }
.col-form-label-lg {
padding-top: calc(0.5rem + 1px);
padding-bottom: calc(0.5rem + 1px);
font-size: 1.25rem;
line-height: 1.5; }
.col-form-label-sm {
padding-top: calc(0.25rem + 1px);
padding-bottom: calc(0.25rem + 1px);
font-size: 0.875rem;
line-height: 1.5; }
.form-control-plaintext {
display: block;
width: 100%;
padding-top: 0.375rem;
padding-bottom: 0.375rem;
margin-bottom: 0;
line-height: 1.5;
color: #212529;
background-color: transparent;
border: solid transparent;
border-width: 1px 0; }
.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {
padding-right: 0;
padding-left: 0; }
.form-control-sm {
height: calc(1.5em + 0.5rem + 2px);
padding: 0.25rem 0.5rem;
font-size: 0.875rem;
line-height: 1.5;
border-radius: 0.2rem; }
.form-control-lg {
height: calc(1.5em + 1rem + 2px);
padding: 0.5rem 1rem;
font-size: 1.25rem;
line-height: 1.5;
border-radius: 0.3rem; }
select.form-control[size], select.form-control[multiple] {
height: auto; }
textarea.form-control {
height: auto; }
.form-group {
margin-bottom: 1rem; }
.form-text {
display: block;
margin-top: 0.25rem; }
.form-row {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
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: 0.3rem;
margin-left: -1.25rem; }
.form-check-input:disabled ~ .form-check-label {
color: #6c757d; }
.form-check-label {
margin-bottom: 0; }
.form-check-inline {
display: -webkit-inline-box;
display: -ms-inline-flexbox;
display: inline-flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
padding-left: 0;
margin-right: 0.75rem; }
.form-check-inline .form-check-input {
position: static;
margin-top: 0;
margin-right: 0.3125rem;
margin-left: 0; }
.valid-feedback {
display: none;
width: 100%;
margin-top: 0.25rem;
font-size: 80%;
color: #28a745; }
.valid-tooltip {
position: absolute;
top: 100%;
z-index: 5;
display: none;
max-width: 100%;
padding: 0.25rem 0.5rem;
margin-top: .1rem;
font-size: 0.875rem;
line-height: 1.5;
color: #fff;
background-color: rgba(40, 167, 69, 0.9);
border-radius: 0.25rem; }
.was-validated .form-control:valid, .form-control.is-valid {
border-color: #28a745;
padding-right: calc(1.5em + 0.75rem);
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' 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: center right calc(0.375em + 0.1875rem);
background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); }
.was-validated .form-control:valid:focus, .form-control.is-valid:focus {
border-color: #28a745;
-webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); }
.was-validated .form-control:valid ~ .valid-feedback,
.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback,
.form-control.is-valid ~ .valid-tooltip {
display: block; }
.was-validated textarea.form-control:valid, textarea.form-control.is-valid {
padding-right: calc(1.5em + 0.75rem);
background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); }
.was-validated .custom-select:valid, .custom-select.is-valid {
border-color: #28a745;
padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' 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") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); }
.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {
border-color: #28a745;
-webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); }
.was-validated .custom-select:valid ~ .valid-feedback,
.was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback,
.custom-select.is-valid ~ .valid-tooltip {
display: block; }
.was-validated .form-control-file:valid ~ .valid-feedback,
.was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback,
.form-control-file.is-valid ~ .valid-tooltip {
display: block; }
.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {
color: #28a745; }
.was-validated .form-check-input:valid ~ .valid-feedback,
.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,
.form-check-input.is-valid ~ .valid-tooltip {
display: block; }
.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {
color: #28a745; }
.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {
border-color: #28a745; }
.was-validated .custom-control-input:valid ~ .valid-feedback,
.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback,
.custom-control-input.is-valid ~ .valid-tooltip {
display: block; }
.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {
border-color: #34ce57;
background-color: #34ce57; }
.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {
-webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); }
.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {
border-color: #28a745; }
.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {
border-color: #28a745; }
.was-validated .custom-file-input:valid ~ .valid-feedback,
.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback,
.custom-file-input.is-valid ~ .valid-tooltip {
display: block; }
.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {
border-color: #28a745;
-webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); }
.invalid-feedback {
display: none;
width: 100%;
margin-top: 0.25rem;
font-size: 80%;
color: #dc3545; }
.invalid-tooltip {
position: absolute;
top: 100%;
z-index: 5;
display: none;
max-width: 100%;
padding: 0.25rem 0.5rem;
margin-top: .1rem;
font-size: 0.875rem;
line-height: 1.5;
color: #fff;
background-color: rgba(220, 53, 69, 0.9);
border-radius: 0.25rem; }
.was-validated .form-control:invalid, .form-control.is-invalid {
border-color: #dc3545;
padding-right: calc(1.5em + 0.75rem);
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");
background-repeat: no-repeat;
background-position: center right calc(0.375em + 0.1875rem);
background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); }
.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {
border-color: #dc3545;
-webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); }
.was-validated .form-control:invalid ~ .invalid-feedback,
.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback,
.form-control.is-invalid ~ .invalid-tooltip {
display: block; }
.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {
padding-right: calc(1.5em + 0.75rem);
background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); }
.was-validated .custom-select:invalid, .custom-select.is-invalid {
border-color: #dc3545;
padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); }
.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {
border-color: #dc3545;
-webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); }
.was-validated .custom-select:invalid ~ .invalid-feedback,
.was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback,
.custom-select.is-invalid ~ .invalid-tooltip {
display: block; }
.was-validated .form-control-file:invalid ~ .invalid-feedback,
.was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback,
.form-control-file.is-invalid ~ .invalid-tooltip {
display: block; }
.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {
color: #dc3545; }
.was-validated .form-check-input:invalid ~ .invalid-feedback,
.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,
.form-check-input.is-invalid ~ .invalid-tooltip {
display: block; }
.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {
color: #dc3545; }
.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {
border-color: #dc3545; }
.was-validated .custom-control-input:invalid ~ .invalid-feedback,
.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback,
.custom-control-input.is-invalid ~ .invalid-tooltip {
display: block; }
.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {
border-color: #e4606d;
background-color: #e4606d; }
.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {
-webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); }
.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {
border-color: #dc3545; }
.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {
border-color: #dc3545; }
.was-validated .custom-file-input:invalid ~ .invalid-feedback,
.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback,
.custom-file-input.is-invalid ~ .invalid-tooltip {
display: block; }
.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {
border-color: #dc3545;
-webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); }
.form-inline {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-flow: row wrap;
flex-flow: row wrap;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center; }
.form-inline .form-check {
width: 100%; }
@media (min-width: 576px) {
.form-inline label {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
margin-bottom: 0; }
.form-inline .form-group {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-flex: 0;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-flow: row wrap;
flex-flow: row wrap;
-webkit-box-align: center;
-ms-flex-align: center;
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 .input-group,
.form-inline .custom-select {
width: auto; }
.form-inline .form-check {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
width: auto;
padding-left: 0; }
.form-inline .form-check-input {
position: relative;
-ms-flex-negative: 0;
flex-shrink: 0;
margin-top: 0;
margin-right: 0.25rem;
margin-left: 0; }
.form-inline .custom-control {
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center; }
.form-inline .custom-control-label {
margin-bottom: 0; } }
.btn {
display: inline-block;
font-weight: 400;
color: #212529;
text-align: center;
vertical-align: middle;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
background-color: transparent;
border: 1px solid transparent;
padding: 0.375rem 0.75rem;
font-size: 1rem;
line-height: 1.5;
border-radius: 0.25rem;
-webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; }
@media (prefers-reduced-motion: reduce) {
.btn {
-webkit-transition: none;
transition: none; } }
.btn:hover {
color: #212529;
text-decoration: none; }
.btn:focus, .btn.focus {
outline: 0;
-webkit-box-shadow: 0 0 0 0.2rem rgba(3, 155, 229, 0.25);
box-shadow: 0 0 0 0.2rem rgba(3, 155, 229, 0.25); }
.btn.disabled, .btn:disabled {
opacity: 0.65; }
a.btn.disabled,
fieldset:disabled a.btn {
pointer-events: none; }
.btn-primary {
color: #fff;
background-color: #039BE5;
border-color: #039BE5; }
.btn-primary:hover {
color: #fff;
background-color: #0381bf;
border-color: #0279b3; }
.btn-primary:focus, .btn-primary.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(41, 170, 233, 0.5);
box-shadow: 0 0 0 0.2rem rgba(41, 170, 233, 0.5); }
.btn-primary.disabled, .btn-primary:disabled {
color: #fff;
background-color: #039BE5;
border-color: #039BE5; }
.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,
.show > .btn-primary.dropdown-toggle {
color: #fff;
background-color: #0279b3;
border-color: #0270a6; }
.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,
.show > .btn-primary.dropdown-toggle:focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(41, 170, 233, 0.5);
box-shadow: 0 0 0 0.2rem rgba(41, 170, 233, 0.5); }
.btn-secondary {
color: #fff;
background-color: #6c757d;
border-color: #6c757d; }
.btn-secondary:hover {
color: #fff;
background-color: #5a6268;
border-color: #545b62; }
.btn-secondary:focus, .btn-secondary.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);
box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); }
.btn-secondary.disabled, .btn-secondary:disabled {
color: #fff;
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: #fff;
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 {
-webkit-box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);
box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); }
.btn-success {
color: #fff;
background-color: #28a745;
border-color: #28a745; }
.btn-success:hover {
color: #fff;
background-color: #218838;
border-color: #1e7e34; }
.btn-success:focus, .btn-success.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);
box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); }
.btn-success.disabled, .btn-success:disabled {
color: #fff;
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: #fff;
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 {
-webkit-box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);
box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); }
.btn-info {
color: #fff;
background-color: #17a2b8;
border-color: #17a2b8; }
.btn-info:hover {
color: #fff;
background-color: #138496;
border-color: #117a8b; }
.btn-info:focus, .btn-info.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);
box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); }
.btn-info.disabled, .btn-info:disabled {
color: #fff;
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: #fff;
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 {
-webkit-box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);
box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.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 {
-webkit-box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);
box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.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 {
-webkit-box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);
box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); }
.btn-danger {
color: #fff;
background-color: #dc3545;
border-color: #dc3545; }
.btn-danger:hover {
color: #fff;
background-color: #c82333;
border-color: #bd2130; }
.btn-danger:focus, .btn-danger.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);
box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); }
.btn-danger.disabled, .btn-danger:disabled {
color: #fff;
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: #fff;
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 {
-webkit-box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);
box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.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 {
-webkit-box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);
box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.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 {
-webkit-box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);
box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); }
.btn-dark {
color: #fff;
background-color: #343a40;
border-color: #343a40; }
.btn-dark:hover {
color: #fff;
background-color: #23272b;
border-color: #1d2124; }
.btn-dark:focus, .btn-dark.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);
box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); }
.btn-dark.disabled, .btn-dark:disabled {
color: #fff;
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: #fff;
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 {
-webkit-box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);
box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); }
.btn-outline-primary {
color: #039BE5;
border-color: #039BE5; }
.btn-outline-primary:hover {
color: #fff;
background-color: #039BE5;
border-color: #039BE5; }
.btn-outline-primary:focus, .btn-outline-primary.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(3, 155, 229, 0.5);
box-shadow: 0 0 0 0.2rem rgba(3, 155, 229, 0.5); }
.btn-outline-primary.disabled, .btn-outline-primary:disabled {
color: #039BE5;
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: #fff;
background-color: #039BE5;
border-color: #039BE5; }
.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 {
-webkit-box-shadow: 0 0 0 0.2rem rgba(3, 155, 229, 0.5);
box-shadow: 0 0 0 0.2rem rgba(3, 155, 229, 0.5); }
.btn-outline-secondary {
color: #6c757d;
border-color: #6c757d; }
.btn-outline-secondary:hover {
color: #fff;
background-color: #6c757d;
border-color: #6c757d; }
.btn-outline-secondary:focus, .btn-outline-secondary.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.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: #fff;
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 {
-webkit-box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); }
.btn-outline-success {
color: #28a745;
border-color: #28a745; }
.btn-outline-success:hover {
color: #fff;
background-color: #28a745;
border-color: #28a745; }
.btn-outline-success:focus, .btn-outline-success.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.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: #fff;
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 {
-webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); }
.btn-outline-info {
color: #17a2b8;
border-color: #17a2b8; }
.btn-outline-info:hover {
color: #fff;
background-color: #17a2b8;
border-color: #17a2b8; }
.btn-outline-info:focus, .btn-outline-info.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.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: #fff;
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 {
-webkit-box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.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 {
-webkit-box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.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 {
-webkit-box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); }
.btn-outline-danger {
color: #dc3545;
border-color: #dc3545; }
.btn-outline-danger:hover {
color: #fff;
background-color: #dc3545;
border-color: #dc3545; }
.btn-outline-danger:focus, .btn-outline-danger.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.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: #fff;
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 {
-webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.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 {
-webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.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 {
-webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); }
.btn-outline-dark {
color: #343a40;
border-color: #343a40; }
.btn-outline-dark:hover {
color: #fff;
background-color: #343a40;
border-color: #343a40; }
.btn-outline-dark:focus, .btn-outline-dark.focus {
-webkit-box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.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: #fff;
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 {
-webkit-box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); }
.btn-link {
font-weight: 400;
color: #039BE5;
text-decoration: none; }
.btn-link:hover {
color: #026899;
text-decoration: underline; }
.btn-link:focus, .btn-link.focus {
text-decoration: underline;
-webkit-box-shadow: none;
box-shadow: none; }
.btn-link:disabled, .btn-link.disabled {
color: #6c757d;
pointer-events: none; }
.btn-lg {
padding: 0.5rem 1rem;
font-size: 1.25rem;
line-height: 1.5;
border-radius: 0.3rem; }
.btn-sm {
padding: 0.25rem 0.5rem;
font-size: 0.875rem;
line-height: 1.5;
border-radius: 0.2rem; }
.btn-block {
display: block;
width: 100%; }
.btn-block + .btn-block {
margin-top: 0.5rem; }
input[type="submit"].btn-block,
input[type="reset"].btn-block,
input[type="button"].btn-block {
width: 100%; }
.fade {
-webkit-transition: opacity 0.15s linear;
transition: opacity 0.15s linear; }
@media (prefers-reduced-motion: reduce) {
.fade {
-webkit-transition: none;
transition: none; } }
.fade:not(.show) {
opacity: 0; }
.collapse:not(.show) {
display: none; }
.collapsing {
position: relative;
height: 0;
overflow: hidden;
-webkit-transition: height 0.35s ease;
transition: height 0.35s ease; }
@media (prefers-reduced-motion: reduce) {
.collapsing {
-webkit-transition: none;
transition: none; } }
.input-group {
position: relative;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
-webkit-box-align: stretch;
-ms-flex-align: stretch;
align-items: stretch;
width: 100%; }
.input-group > .form-control,
.input-group > .form-control-plaintext,
.input-group > .custom-select,
.input-group > .custom-file {
position: relative;
-webkit-box-flex: 1;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
width: 1%;
margin-bottom: 0; }
.input-group > .form-control + .form-control,
.input-group > .form-control + .custom-select,
.input-group > .form-control + .custom-file,
.input-group > .form-control-plaintext + .form-control,
.input-group > .form-control-plaintext + .custom-select,
.input-group > .form-control-plaintext + .custom-file,
.input-group > .custom-select + .form-control,
.input-group > .custom-select + .custom-select,
.input-group > .custom-select + .custom-file,
.input-group > .custom-file + .form-control,
.input-group > .custom-file + .custom-select,
.input-group > .custom-file + .custom-file {
margin-left: -1px; }
.input-group > .form-control:focus,
.input-group > .custom-select:focus,
.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {
z-index: 3; }
.input-group > .custom-file .custom-file-input:focus {
z-index: 4; }
.input-group > .form-control:not(:last-child),
.input-group > .custom-select:not(:last-child) {
border-top-right-radius: 0;
border-bottom-right-radius: 0; }
.input-group > .form-control:not(:first-child),
.input-group > .custom-select:not(:first-child) {
border-top-left-radius: 0;
border-bottom-left-radius: 0; }
.input-group > .custom-file {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
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-prepend,
.input-group-append {
display: -webkit-box;
display: -ms-flexbox;
display: flex; }
.input-group-prepend .btn,
.input-group-append .btn {
position: relative;
z-index: 2; }
.input-group-prepend .btn:focus,
.input-group-append .btn:focus {
z-index: 3; }
.input-group-prepend .btn + .btn,
.input-group-prepend .btn + .input-group-text,
.input-group-prepend .input-group-text + .input-group-text,
.input-group-prepend .input-group-text + .btn,
.input-group-append .btn + .btn,
.input-group-append .btn + .input-group-text,
.input-group-append .input-group-text + .input-group-text,
.input-group-append .input-group-text + .btn {
margin-left: -1px; }
.input-group-prepend {
margin-right: -1px; }
.input-group-append {
margin-left: -1px; }
.input-group-text {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
padding: 0.375rem 0.75rem;
margin-bottom: 0;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #495057;
text-align: center;
white-space: nowrap;
background-color: #e9ecef;
border: 1px solid #ced4da;
border-radius: 0.25rem; }
.input-group-text input[type="radio"],
.input-group-text input[type="checkbox"] {
margin-top: 0; }
.input-group-lg > .form-control:not(textarea),
.input-group-lg > .custom-select {
height: calc(1.5em + 1rem + 2px); }
.input-group-lg > .form-control,
.input-group-lg > .custom-select,
.input-group-lg > .input-group-prepend > .input-group-text,
.input-group-lg > .input-group-append > .input-group-text,
.input-group-lg > .input-group-prepend > .btn,
.input-group-lg > .input-group-append > .btn {
padding: 0.5rem 1rem;
font-size: 1.25rem;
line-height: 1.5;
border-radius: 0.3rem; }
.input-group-sm > .form-control:not(textarea),
.input-group-sm > .custom-select {
height: calc(1.5em + 0.5rem + 2px); }
.input-group-sm > .form-control,
.input-group-sm > .custom-select,
.input-group-sm > .input-group-prepend > .input-group-text,
.input-group-sm > .input-group-append > .input-group-text,
.input-group-sm > .input-group-prepend > .btn,
.input-group-sm > .input-group-append > .btn {
padding: 0.25rem 0.5rem;
font-size: 0.875rem;
line-height: 1.5;
border-radius: 0.2rem; }
.input-group-lg > .custom-select,
.input-group-sm > .custom-select {
padding-right: 1.75rem; }
.input-group > .input-group-prepend > .btn,
.input-group > .input-group-prepend > .input-group-text,
.input-group > .input-group-append:not(:last-child) > .btn,
.input-group > .input-group-append:not(:last-child) > .input-group-text,
.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) {
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:not(:first-child) > .btn,
.input-group > .input-group-prepend:not(:first-child) > .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) {
border-top-left-radius: 0;
border-bottom-left-radius: 0; }
.custom-control {
position: relative;
display: block;
min-height: 1.5rem;
padding-left: 1.5rem; }
.custom-control-inline {
display: -webkit-inline-box;
display: -ms-inline-flexbox;
display: inline-flex;
margin-right: 1rem; }
.custom-control-input {
position: absolute;
z-index: -1;
opacity: 0; }
.custom-control-input:checked ~ .custom-control-label::before {
color: #fff;
border-color: #039BE5;
background-color: #039BE5; }
.custom-control-input:focus ~ .custom-control-label::before {
-webkit-box-shadow: 0 0 0 0.2rem rgba(3, 155, 229, 0.25);
box-shadow: 0 0 0 0.2rem rgba(3, 155, 229, 0.25); }
.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {
border-color: #6acdfd; }
.custom-control-input:not(:disabled):active ~ .custom-control-label::before {
color: #fff;
background-color: #9ddefe;
border-color: #9ddefe; }
.custom-control-input:disabled ~ .custom-control-label {
color: #6c757d; }
.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: 0.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: 0.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: 0.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' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e"); }
.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {
border-color: #039BE5;
background-color: #039BE5; }
.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' 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(3, 155, 229, 0.5); }
.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {
background-color: rgba(3, 155, 229, 0.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' 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(3, 155, 229, 0.5); }
.custom-switch {
padding-left: 2.25rem; }
.custom-switch .custom-control-label::before {
left: -2.25rem;
width: 1.75rem;
pointer-events: all;
border-radius: 0.5rem; }
.custom-switch .custom-control-label::after {
top: calc(0.25rem + 2px);
left: calc(-2.25rem + 2px);
width: calc(1rem - 4px);
height: calc(1rem - 4px);
background-color: #adb5bd;
border-radius: 0.5rem;
-webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; }
@media (prefers-reduced-motion: reduce) {
.custom-switch .custom-control-label::after {
-webkit-transition: none;
transition: none; } }
.custom-switch .custom-control-input:checked ~ .custom-control-label::after {
background-color: #fff;
-webkit-transform: translateX(0.75rem);
transform: translateX(0.75rem); }
.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {
background-color: rgba(3, 155, 229, 0.5); }
.custom-select {
display: inline-block;
width: 100%;
height: calc(1.5em + 0.75rem + 2px);
padding: 0.375rem 1.75rem 0.375rem 0.75rem;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #495057;
vertical-align: middle;
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px;
background-color: #fff;
border: 1px solid #ced4da;
border-radius: 0.25rem;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none; }
.custom-select:focus {
border-color: #6acdfd;
outline: 0;
-webkit-box-shadow: 0 0 0 0.2rem rgba(3, 155, 229, 0.25);
box-shadow: 0 0 0 0.2rem rgba(3, 155, 229, 0.25); }
.custom-select:focus::-ms-value {
color: #495057;
background-color: #fff; }
.custom-select[multiple], .custom-select[size]:not([size="1"]) {
height: auto;
padding-right: 0.75rem;
background-image: none; }
.custom-select:disabled {
color: #6c757d;
background-color: #e9ecef; }
.custom-select::-ms-expand {
display: none; }
.custom-select-sm {
height: calc(1.5em + 0.5rem + 2px);
padding-top: 0.25rem;
padding-bottom: 0.25rem;
padding-left: 0.5rem;
font-size: 0.875rem; }
.custom-select-lg {
height: calc(1.5em + 1rem + 2px);
padding-top: 0.5rem;
padding-bottom: 0.5rem;
padding-left: 1rem;
font-size: 1.25rem; }
.custom-file {
position: relative;
display: inline-block;
width: 100%;
height: calc(1.5em + 0.75rem + 2px);
margin-bottom: 0; }
.custom-file-input {
position: relative;
z-index: 2;
width: 100%;
height: calc(1.5em + 0.75rem + 2px);
margin: 0;
opacity: 0; }
.custom-file-input:focus ~ .custom-file-label {
border-color: #6acdfd;
-webkit-box-shadow: 0 0 0 0.2rem rgba(3, 155, 229, 0.25);
box-shadow: 0 0 0 0.2rem rgba(3, 155, 229, 0.25); }
.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 + 0.75rem + 2px);
padding: 0.375rem 0.75rem;
font-weight: 400;
line-height: 1.5;
color: #495057;
background-color: #fff;
border: 1px solid #ced4da;
border-radius: 0.25rem; }
.custom-file-label::after {
position: absolute;
top: 0;
right: 0;
bottom: 0;
z-index: 3;
display: block;
height: calc(1.5em + 0.75rem);
padding: 0.375rem 0.75rem;
line-height: 1.5;
color: #495057;
content: "Browse";
background-color: #e9ecef;
border-left: inherit;
border-radius: 0 0.25rem 0.25rem 0; }
.custom-range {
width: 100%;
height: calc(1rem + 0.4rem);
padding: 0;
background-color: transparent;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none; }
.custom-range:focus {
outline: none; }
.custom-range:focus::-webkit-slider-thumb {
-webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(3, 155, 229, 0.25);
box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(3, 155, 229, 0.25); }
.custom-range:focus::-moz-range-thumb {
box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(3, 155, 229, 0.25); }
.custom-range:focus::-ms-thumb {
box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(3, 155, 229, 0.25); }
.custom-range::-moz-focus-outer {
border: 0; }
.custom-range::-webkit-slider-thumb {
width: 1rem;
height: 1rem;
margin-top: -0.25rem;
background-color: #039BE5;
border: 0;
border-radius: 1rem;
-webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.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: #9ddefe; }
.custom-range::-webkit-slider-runnable-track {
width: 100%;
height: 0.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: #039BE5;
border: 0;
border-radius: 1rem;
-webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
-moz-appearance: none;
appearance: none; }
@media (prefers-reduced-motion: reduce) {
.custom-range::-moz-range-thumb {
-webkit-transition: none;
transition: none; } }
.custom-range::-moz-range-thumb:active {
background-color: #9ddefe; }
.custom-range::-moz-range-track {
width: 100%;
height: 0.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: 0.2rem;
margin-left: 0.2rem;
background-color: #039BE5;
border: 0;
border-radius: 1rem;
-webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
appearance: none; }
@media (prefers-reduced-motion: reduce) {
.custom-range::-ms-thumb {
-webkit-transition: none;
transition: none; } }
.custom-range::-ms-thumb:active {
background-color: #9ddefe; }
.custom-range::-ms-track {
width: 100%;
height: 0.5rem;
color: transparent;
cursor: pointer;
background-color: transparent;
border-color: transparent;
border-width: 0.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 {
-webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; }
@media (prefers-reduced-motion: reduce) {
.custom-control-label::before,
.custom-file-label,
.custom-select {
-webkit-transition: none;
transition: none; } }
.badge {
display: inline-block;
padding: 0.25em 0.4em;
font-size: 75%;
font-weight: 700;
line-height: 1;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
border-radius: 0.25rem;
-webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; }
@media (prefers-reduced-motion: reduce) {
.badge {
-webkit-transition: none;
transition: none; } }
a.badge:hover, a.badge:focus {
text-decoration: none; }
.badge:empty {
display: none; }
.btn .badge {
position: relative;
top: -1px; }
.badge-pill {
padding-right: 0.6em;
padding-left: 0.6em;
border-radius: 10rem; }
.badge-primary {
color: #fff;
background-color: #039BE5; }
a.badge-primary:hover, a.badge-primary:focus {
color: #fff;
background-color: #0279b3; }
a.badge-primary:focus, a.badge-primary.focus {
outline: 0;
-webkit-box-shadow: 0 0 0 0.2rem rgba(3, 155, 229, 0.5);
box-shadow: 0 0 0 0.2rem rgba(3, 155, 229, 0.5); }
.badge-secondary {
color: #fff;
background-color: #6c757d; }
a.badge-secondary:hover, a.badge-secondary:focus {
color: #fff;
background-color: #545b62; }
a.badge-secondary:focus, a.badge-secondary.focus {
outline: 0;
-webkit-box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); }
.badge-success {
color: #fff;
background-color: #28a745; }
a.badge-success:hover, a.badge-success:focus {
color: #fff;
background-color: #1e7e34; }
a.badge-success:focus, a.badge-success.focus {
outline: 0;
-webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); }
.badge-info {
color: #fff;
background-color: #17a2b8; }
a.badge-info:hover, a.badge-info:focus {
color: #fff;
background-color: #117a8b; }
a.badge-info:focus, a.badge-info.focus {
outline: 0;
-webkit-box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); }
.badge-warning {
color: #212529;
background-color: #ffc107; }
a.badge-warning:hover, a.badge-warning:focus {
color: #212529;
background-color: #d39e00; }
a.badge-warning:focus, a.badge-warning.focus {
outline: 0;
-webkit-box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); }
.badge-danger {
color: #fff;
background-color: #dc3545; }
a.badge-danger:hover, a.badge-danger:focus {
color: #fff;
background-color: #bd2130; }
a.badge-danger:focus, a.badge-danger.focus {
outline: 0;
-webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); }
.badge-light {
color: #212529;
background-color: #f8f9fa; }
a.badge-light:hover, a.badge-light:focus {
color: #212529;
background-color: #dae0e5; }
a.badge-light:focus, a.badge-light.focus {
outline: 0;
-webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); }
.badge-dark {
color: #fff;
background-color: #343a40; }
a.badge-dark:hover, a.badge-dark:focus {
color: #fff;
background-color: #1d2124; }
a.badge-dark:focus, a.badge-dark.focus {
outline: 0;
-webkit-box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); }
.jumbotron {
padding: 2rem 1rem;
margin-bottom: 2rem;
background-color: rgba(73, 131, 159, 0.1);
border-radius: 0.3rem; }
@media (min-width: 576px) {
.jumbotron {
padding: 4rem 2rem; } }
.jumbotron-fluid {
padding-right: 0;
padding-left: 0;
border-radius: 0; }
.alert {
position: relative;
padding: 0.75rem 1.25rem;
margin-bottom: 1rem;
border: 1px solid transparent;
border-radius: 0.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: 0.75rem 1.25rem;
color: inherit; }
.alert-primary {
color: #025177;
background-color: #cdebfa;
border-color: #b8e3f8; }
.alert-primary hr {
border-top-color: #a1daf6; }
.alert-primary .alert-link {
color: #012f45; }
.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; }
.media {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: start;
-ms-flex-align: start;
align-items: flex-start; }
.media-body {
-webkit-box-flex: 1;
-ms-flex: 1;
flex: 1; }
.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: 0.875rem;
word-wrap: break-word;
opacity: 0; }
.tooltip.show {
opacity: 0.9; }
.tooltip .arrow {
position: absolute;
display: block;
width: 0.8rem;
height: 0.4rem; }
.tooltip .arrow::before {
position: absolute;
content: "";
border-color: transparent;
border-style: solid; }
.bs-tooltip-top, .bs-tooltip-auto[x-placement^="top"] {
padding: 0.4rem 0; }
.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^="top"] .arrow {
bottom: 0; }
.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before {
top: 0;
border-width: 0.4rem 0.4rem 0;
border-top-color: #000; }
.bs-tooltip-right, .bs-tooltip-auto[x-placement^="right"] {
padding: 0 0.4rem; }
.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^="right"] .arrow {
left: 0;
width: 0.4rem;
height: 0.8rem; }
.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^="right"] .arrow::before {
right: 0;
border-width: 0.4rem 0.4rem 0.4rem 0;
border-right-color: #000; }
.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^="bottom"] {
padding: 0.4rem 0; }
.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^="bottom"] .arrow {
top: 0; }
.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^="bottom"] .arrow::before {
bottom: 0;
border-width: 0 0.4rem 0.4rem;
border-bottom-color: #000; }
.bs-tooltip-left, .bs-tooltip-auto[x-placement^="left"] {
padding: 0 0.4rem; }
.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^="left"] .arrow {
right: 0;
width: 0.4rem;
height: 0.8rem; }
.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^="left"] .arrow::before {
left: 0;
border-width: 0.4rem 0 0.4rem 0.4rem;
border-left-color: #000; }
.tooltip-inner {
max-width: 200px;
padding: 0.25rem 0.5rem;
color: #fff;
text-align: center;
background-color: #000;
border-radius: 0.25rem; }
.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: #039BE5 !important; }
a.bg-primary:hover, a.bg-primary:focus,
button.bg-primary:hover,
button.bg-primary:focus {
background-color: #0279b3 !important; }
.bg-secondary {
background-color: #6c757d !important; }
a.bg-secondary:hover, a.bg-secondary:focus,
button.bg-secondary:hover,
button.bg-secondary:focus {
background-color: #545b62 !important; }
.bg-success {
background-color: #28a745 !important; }
a.bg-success:hover, a.bg-success:focus,
button.bg-success:hover,
button.bg-success:focus {
background-color: #1e7e34 !important; }
.bg-info {
background-color: #17a2b8 !important; }
a.bg-info:hover, a.bg-info:focus,
button.bg-info:hover,
button.bg-info:focus {
background-color: #117a8b !important; }
.bg-warning {
background-color: #ffc107 !important; }
a.bg-warning:hover, a.bg-warning:focus,
button.bg-warning:hover,
button.bg-warning:focus {
background-color: #d39e00 !important; }
.bg-danger {
background-color: #dc3545 !important; }
a.bg-danger:hover, a.bg-danger:focus,
button.bg-danger:hover,
button.bg-danger:focus {
background-color: #bd2130 !important; }
.bg-light {
background-color: #f8f9fa !important; }
a.bg-light:hover, a.bg-light:focus,
button.bg-light:hover,
button.bg-light:focus {
background-color: #dae0e5 !important; }
.bg-dark {
background-color: #343a40 !important; }
a.bg-dark:hover, a.bg-dark:focus,
button.bg-dark:hover,
button.bg-dark:focus {
background-color: #1d2124 !important; }
.bg-white {
background-color: #fff !important; }
.bg-transparent {
background-color: transparent !important; }
.border {
border: 1px solid #dee2e6 !important; }
.border-top {
border-top: 1px solid #dee2e6 !important; }
.border-right {
border-right: 1px solid #dee2e6 !important; }
.border-bottom {
border-bottom: 1px solid #dee2e6 !important; }
.border-left {
border-left: 1px solid #dee2e6 !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: #039BE5 !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: 0.2rem !important; }
.rounded {
border-radius: 0.25rem !important; }
.rounded-top {
border-top-left-radius: 0.25rem !important;
border-top-right-radius: 0.25rem !important; }
.rounded-right {
border-top-right-radius: 0.25rem !important;
border-bottom-right-radius: 0.25rem !important; }
.rounded-bottom {
border-bottom-right-radius: 0.25rem !important;
border-bottom-left-radius: 0.25rem !important; }
.rounded-left {
border-top-left-radius: 0.25rem !important;
border-bottom-left-radius: 0.25rem !important; }
.rounded-lg {
border-radius: 0.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: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important; }
.d-inline-flex {
display: -webkit-inline-box !important;
display: -ms-inline-flexbox !important;
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: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important; }
.d-sm-inline-flex {
display: -webkit-inline-box !important;
display: -ms-inline-flexbox !important;
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: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important; }
.d-md-inline-flex {
display: -webkit-inline-box !important;
display: -ms-inline-flexbox !important;
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: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important; }
.d-lg-inline-flex {
display: -webkit-inline-box !important;
display: -ms-inline-flexbox !important;
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: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important; }
.d-xl-inline-flex {
display: -webkit-inline-box !important;
display: -ms-inline-flexbox !important;
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: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important; }
.d-print-inline-flex {
display: -webkit-inline-box !important;
display: -ms-inline-flexbox !important;
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 iframe,
.embed-responsive embed,
.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 {
-webkit-box-orient: horizontal !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: row !important;
flex-direction: row !important; }
.flex-column {
-webkit-box-orient: vertical !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: column !important;
flex-direction: column !important; }
.flex-row-reverse {
-webkit-box-orient: horizontal !important;
-webkit-box-direction: reverse !important;
-ms-flex-direction: row-reverse !important;
flex-direction: row-reverse !important; }
.flex-column-reverse {
-webkit-box-orient: vertical !important;
-webkit-box-direction: reverse !important;
-ms-flex-direction: column-reverse !important;
flex-direction: column-reverse !important; }
.flex-wrap {
-ms-flex-wrap: wrap !important;
flex-wrap: wrap !important; }
.flex-nowrap {
-ms-flex-wrap: nowrap !important;
flex-wrap: nowrap !important; }
.flex-wrap-reverse {
-ms-flex-wrap: wrap-reverse !important;
flex-wrap: wrap-reverse !important; }
.flex-fill {
-webkit-box-flex: 1 !important;
-ms-flex: 1 1 auto !important;
flex: 1 1 auto !important; }
.flex-grow-0 {
-webkit-box-flex: 0 !important;
-ms-flex-positive: 0 !important;
flex-grow: 0 !important; }
.flex-grow-1 {
-webkit-box-flex: 1 !important;
-ms-flex-positive: 1 !important;
flex-grow: 1 !important; }
.flex-shrink-0 {
-ms-flex-negative: 0 !important;
flex-shrink: 0 !important; }
.flex-shrink-1 {
-ms-flex-negative: 1 !important;
flex-shrink: 1 !important; }
.justify-content-start {
-webkit-box-pack: start !important;
-ms-flex-pack: start !important;
justify-content: flex-start !important; }
.justify-content-end {
-webkit-box-pack: end !important;
-ms-flex-pack: end !important;
justify-content: flex-end !important; }
.justify-content-center {
-webkit-box-pack: center !important;
-ms-flex-pack: center !important;
justify-content: center !important; }
.justify-content-between {
-webkit-box-pack: justify !important;
-ms-flex-pack: justify !important;
justify-content: space-between !important; }
.justify-content-around {
-ms-flex-pack: distribute !important;
justify-content: space-around !important; }
.align-items-start {
-webkit-box-align: start !important;
-ms-flex-align: start !important;
align-items: flex-start !important; }
.align-items-end {
-webkit-box-align: end !important;
-ms-flex-align: end !important;
align-items: flex-end !important; }
.align-items-center {
-webkit-box-align: center !important;
-ms-flex-align: center !important;
align-items: center !important; }
.align-items-baseline {
-webkit-box-align: baseline !important;
-ms-flex-align: baseline !important;
align-items: baseline !important; }
.align-items-stretch {
-webkit-box-align: stretch !important;
-ms-flex-align: stretch !important;
align-items: stretch !important; }
.align-content-start {
-ms-flex-line-pack: start !important;
align-content: flex-start !important; }
.align-content-end {
-ms-flex-line-pack: end !important;
align-content: flex-end !important; }
.align-content-center {
-ms-flex-line-pack: center !important;
align-content: center !important; }
.align-content-between {
-ms-flex-line-pack: justify !important;
align-content: space-between !important; }
.align-content-around {
-ms-flex-line-pack: distribute !important;
align-content: space-around !important; }
.align-content-stretch {
-ms-flex-line-pack: stretch !important;
align-content: stretch !important; }
.align-self-auto {
-ms-flex-item-align: auto !important;
align-self: auto !important; }
.align-self-start {
-ms-flex-item-align: start !important;
align-self: flex-start !important; }
.align-self-end {
-ms-flex-item-align: end !important;
align-self: flex-end !important; }
.align-self-center {
-ms-flex-item-align: center !important;
align-self: center !important; }
.align-self-baseline {
-ms-flex-item-align: baseline !important;
align-self: baseline !important; }
.align-self-stretch {
-ms-flex-item-align: stretch !important;
align-self: stretch !important; }
@media (min-width: 576px) {
.flex-sm-row {
-webkit-box-orient: horizontal !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: row !important;
flex-direction: row !important; }
.flex-sm-column {
-webkit-box-orient: vertical !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: column !important;
flex-direction: column !important; }
.flex-sm-row-reverse {
-webkit-box-orient: horizontal !important;
-webkit-box-direction: reverse !important;
-ms-flex-direction: row-reverse !important;
flex-direction: row-reverse !important; }
.flex-sm-column-reverse {
-webkit-box-orient: vertical !important;
-webkit-box-direction: reverse !important;
-ms-flex-direction: column-reverse !important;
flex-direction: column-reverse !important; }
.flex-sm-wrap {
-ms-flex-wrap: wrap !important;
flex-wrap: wrap !important; }
.flex-sm-nowrap {
-ms-flex-wrap: nowrap !important;
flex-wrap: nowrap !important; }
.flex-sm-wrap-reverse {
-ms-flex-wrap: wrap-reverse !important;
flex-wrap: wrap-reverse !important; }
.flex-sm-fill {
-webkit-box-flex: 1 !important;
-ms-flex: 1 1 auto !important;
flex: 1 1 auto !important; }
.flex-sm-grow-0 {
-webkit-box-flex: 0 !important;
-ms-flex-positive: 0 !important;
flex-grow: 0 !important; }
.flex-sm-grow-1 {
-webkit-box-flex: 1 !important;
-ms-flex-positive: 1 !important;
flex-grow: 1 !important; }
.flex-sm-shrink-0 {
-ms-flex-negative: 0 !important;
flex-shrink: 0 !important; }
.flex-sm-shrink-1 {
-ms-flex-negative: 1 !important;
flex-shrink: 1 !important; }
.justify-content-sm-start {
-webkit-box-pack: start !important;
-ms-flex-pack: start !important;
justify-content: flex-start !important; }
.justify-content-sm-end {
-webkit-box-pack: end !important;
-ms-flex-pack: end !important;
justify-content: flex-end !important; }
.justify-content-sm-center {
-webkit-box-pack: center !important;
-ms-flex-pack: center !important;
justify-content: center !important; }
.justify-content-sm-between {
-webkit-box-pack: justify !important;
-ms-flex-pack: justify !important;
justify-content: space-between !important; }
.justify-content-sm-around {
-ms-flex-pack: distribute !important;
justify-content: space-around !important; }
.align-items-sm-start {
-webkit-box-align: start !important;
-ms-flex-align: start !important;
align-items: flex-start !important; }
.align-items-sm-end {
-webkit-box-align: end !important;
-ms-flex-align: end !important;
align-items: flex-end !important; }
.align-items-sm-center {
-webkit-box-align: center !important;
-ms-flex-align: center !important;
align-items: center !important; }
.align-items-sm-baseline {
-webkit-box-align: baseline !important;
-ms-flex-align: baseline !important;
align-items: baseline !important; }
.align-items-sm-stretch {
-webkit-box-align: stretch !important;
-ms-flex-align: stretch !important;
align-items: stretch !important; }
.align-content-sm-start {
-ms-flex-line-pack: start !important;
align-content: flex-start !important; }
.align-content-sm-end {
-ms-flex-line-pack: end !important;
align-content: flex-end !important; }
.align-content-sm-center {
-ms-flex-line-pack: center !important;
align-content: center !important; }
.align-content-sm-between {
-ms-flex-line-pack: justify !important;
align-content: space-between !important; }
.align-content-sm-around {
-ms-flex-line-pack: distribute !important;
align-content: space-around !important; }
.align-content-sm-stretch {
-ms-flex-line-pack: stretch !important;
align-content: stretch !important; }
.align-self-sm-auto {
-ms-flex-item-align: auto !important;
align-self: auto !important; }
.align-self-sm-start {
-ms-flex-item-align: start !important;
align-self: flex-start !important; }
.align-self-sm-end {
-ms-flex-item-align: end !important;
align-self: flex-end !important; }
.align-self-sm-center {
-ms-flex-item-align: center !important;
align-self: center !important; }
.align-self-sm-baseline {
-ms-flex-item-align: baseline !important;
align-self: baseline !important; }
.align-self-sm-stretch {
-ms-flex-item-align: stretch !important;
align-self: stretch !important; } }
@media (min-width: 768px) {
.flex-md-row {
-webkit-box-orient: horizontal !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: row !important;
flex-direction: row !important; }
.flex-md-column {
-webkit-box-orient: vertical !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: column !important;
flex-direction: column !important; }
.flex-md-row-reverse {
-webkit-box-orient: horizontal !important;
-webkit-box-direction: reverse !important;
-ms-flex-direction: row-reverse !important;
flex-direction: row-reverse !important; }
.flex-md-column-reverse {
-webkit-box-orient: vertical !important;
-webkit-box-direction: reverse !important;
-ms-flex-direction: column-reverse !important;
flex-direction: column-reverse !important; }
.flex-md-wrap {
-ms-flex-wrap: wrap !important;
flex-wrap: wrap !important; }
.flex-md-nowrap {
-ms-flex-wrap: nowrap !important;
flex-wrap: nowrap !important; }
.flex-md-wrap-reverse {
-ms-flex-wrap: wrap-reverse !important;
flex-wrap: wrap-reverse !important; }
.flex-md-fill {
-webkit-box-flex: 1 !important;
-ms-flex: 1 1 auto !important;
flex: 1 1 auto !important; }
.flex-md-grow-0 {
-webkit-box-flex: 0 !important;
-ms-flex-positive: 0 !important;
flex-grow: 0 !important; }
.flex-md-grow-1 {
-webkit-box-flex: 1 !important;
-ms-flex-positive: 1 !important;
flex-grow: 1 !important; }
.flex-md-shrink-0 {
-ms-flex-negative: 0 !important;
flex-shrink: 0 !important; }
.flex-md-shrink-1 {
-ms-flex-negative: 1 !important;
flex-shrink: 1 !important; }
.justify-content-md-start {
-webkit-box-pack: start !important;
-ms-flex-pack: start !important;
justify-content: flex-start !important; }
.justify-content-md-end {
-webkit-box-pack: end !important;
-ms-flex-pack: end !important;
justify-content: flex-end !important; }
.justify-content-md-center {
-webkit-box-pack: center !important;
-ms-flex-pack: center !important;
justify-content: center !important; }
.justify-content-md-between {
-webkit-box-pack: justify !important;
-ms-flex-pack: justify !important;
justify-content: space-between !important; }
.justify-content-md-around {
-ms-flex-pack: distribute !important;
justify-content: space-around !important; }
.align-items-md-start {
-webkit-box-align: start !important;
-ms-flex-align: start !important;
align-items: flex-start !important; }
.align-items-md-end {
-webkit-box-align: end !important;
-ms-flex-align: end !important;
align-items: flex-end !important; }
.align-items-md-center {
-webkit-box-align: center !important;
-ms-flex-align: center !important;
align-items: center !important; }
.align-items-md-baseline {
-webkit-box-align: baseline !important;
-ms-flex-align: baseline !important;
align-items: baseline !important; }
.align-items-md-stretch {
-webkit-box-align: stretch !important;
-ms-flex-align: stretch !important;
align-items: stretch !important; }
.align-content-md-start {
-ms-flex-line-pack: start !important;
align-content: flex-start !important; }
.align-content-md-end {
-ms-flex-line-pack: end !important;
align-content: flex-end !important; }
.align-content-md-center {
-ms-flex-line-pack: center !important;
align-content: center !important; }
.align-content-md-between {
-ms-flex-line-pack: justify !important;
align-content: space-between !important; }
.align-content-md-around {
-ms-flex-line-pack: distribute !important;
align-content: space-around !important; }
.align-content-md-stretch {
-ms-flex-line-pack: stretch !important;
align-content: stretch !important; }
.align-self-md-auto {
-ms-flex-item-align: auto !important;
align-self: auto !important; }
.align-self-md-start {
-ms-flex-item-align: start !important;
align-self: flex-start !important; }
.align-self-md-end {
-ms-flex-item-align: end !important;
align-self: flex-end !important; }
.align-self-md-center {
-ms-flex-item-align: center !important;
align-self: center !important; }
.align-self-md-baseline {
-ms-flex-item-align: baseline !important;
align-self: baseline !important; }
.align-self-md-stretch {
-ms-flex-item-align: stretch !important;
align-self: stretch !important; } }
@media (min-width: 992px) {
.flex-lg-row {
-webkit-box-orient: horizontal !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: row !important;
flex-direction: row !important; }
.flex-lg-column {
-webkit-box-orient: vertical !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: column !important;
flex-direction: column !important; }
.flex-lg-row-reverse {
-webkit-box-orient: horizontal !important;
-webkit-box-direction: reverse !important;
-ms-flex-direction: row-reverse !important;
flex-direction: row-reverse !important; }
.flex-lg-column-reverse {
-webkit-box-orient: vertical !important;
-webkit-box-direction: reverse !important;
-ms-flex-direction: column-reverse !important;
flex-direction: column-reverse !important; }
.flex-lg-wrap {
-ms-flex-wrap: wrap !important;
flex-wrap: wrap !important; }
.flex-lg-nowrap {
-ms-flex-wrap: nowrap !important;
flex-wrap: nowrap !important; }
.flex-lg-wrap-reverse {
-ms-flex-wrap: wrap-reverse !important;
flex-wrap: wrap-reverse !important; }
.flex-lg-fill {
-webkit-box-flex: 1 !important;
-ms-flex: 1 1 auto !important;
flex: 1 1 auto !important; }
.flex-lg-grow-0 {
-webkit-box-flex: 0 !important;
-ms-flex-positive: 0 !important;
flex-grow: 0 !important; }
.flex-lg-grow-1 {
-webkit-box-flex: 1 !important;
-ms-flex-positive: 1 !important;
flex-grow: 1 !important; }
.flex-lg-shrink-0 {
-ms-flex-negative: 0 !important;
flex-shrink: 0 !important; }
.flex-lg-shrink-1 {
-ms-flex-negative: 1 !important;
flex-shrink: 1 !important; }
.justify-content-lg-start {
-webkit-box-pack: start !important;
-ms-flex-pack: start !important;
justify-content: flex-start !important; }
.justify-content-lg-end {
-webkit-box-pack: end !important;
-ms-flex-pack: end !important;
justify-content: flex-end !important; }
.justify-content-lg-center {
-webkit-box-pack: center !important;
-ms-flex-pack: center !important;
justify-content: center !important; }
.justify-content-lg-between {
-webkit-box-pack: justify !important;
-ms-flex-pack: justify !important;
justify-content: space-between !important; }
.justify-content-lg-around {
-ms-flex-pack: distribute !important;
justify-content: space-around !important; }
.align-items-lg-start {
-webkit-box-align: start !important;
-ms-flex-align: start !important;
align-items: flex-start !important; }
.align-items-lg-end {
-webkit-box-align: end !important;
-ms-flex-align: end !important;
align-items: flex-end !important; }
.align-items-lg-center {
-webkit-box-align: center !important;
-ms-flex-align: center !important;
align-items: center !important; }
.align-items-lg-baseline {
-webkit-box-align: baseline !important;
-ms-flex-align: baseline !important;
align-items: baseline !important; }
.align-items-lg-stretch {
-webkit-box-align: stretch !important;
-ms-flex-align: stretch !important;
align-items: stretch !important; }
.align-content-lg-start {
-ms-flex-line-pack: start !important;
align-content: flex-start !important; }
.align-content-lg-end {
-ms-flex-line-pack: end !important;
align-content: flex-end !important; }
.align-content-lg-center {
-ms-flex-line-pack: center !important;
align-content: center !important; }
.align-content-lg-between {
-ms-flex-line-pack: justify !important;
align-content: space-between !important; }
.align-content-lg-around {
-ms-flex-line-pack: distribute !important;
align-content: space-around !important; }
.align-content-lg-stretch {
-ms-flex-line-pack: stretch !important;
align-content: stretch !important; }
.align-self-lg-auto {
-ms-flex-item-align: auto !important;
align-self: auto !important; }
.align-self-lg-start {
-ms-flex-item-align: start !important;
align-self: flex-start !important; }
.align-self-lg-end {
-ms-flex-item-align: end !important;
align-self: flex-end !important; }
.align-self-lg-center {
-ms-flex-item-align: center !important;
align-self: center !important; }
.align-self-lg-baseline {
-ms-flex-item-align: baseline !important;
align-self: baseline !important; }
.align-self-lg-stretch {
-ms-flex-item-align: stretch !important;
align-self: stretch !important; } }
@media (min-width: 1200px) {
.flex-xl-row {
-webkit-box-orient: horizontal !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: row !important;
flex-direction: row !important; }
.flex-xl-column {
-webkit-box-orient: vertical !important;
-webkit-box-direction: normal !important;
-ms-flex-direction: column !important;
flex-direction: column !important; }
.flex-xl-row-reverse {
-webkit-box-orient: horizontal !important;
-webkit-box-direction: reverse !important;
-ms-flex-direction: row-reverse !important;
flex-direction: row-reverse !important; }
.flex-xl-column-reverse {
-webkit-box-orient: vertical !important;
-webkit-box-direction: reverse !important;
-ms-flex-direction: column-reverse !important;
flex-direction: column-reverse !important; }
.flex-xl-wrap {
-ms-flex-wrap: wrap !important;
flex-wrap: wrap !important; }
.flex-xl-nowrap {
-ms-flex-wrap: nowrap !important;
flex-wrap: nowrap !important; }
.flex-xl-wrap-reverse {
-ms-flex-wrap: wrap-reverse !important;
flex-wrap: wrap-reverse !important; }
.flex-xl-fill {
-webkit-box-flex: 1 !important;
-ms-flex: 1 1 auto !important;
flex: 1 1 auto !important; }
.flex-xl-grow-0 {
-webkit-box-flex: 0 !important;
-ms-flex-positive: 0 !important;
flex-grow: 0 !important; }
.flex-xl-grow-1 {
-webkit-box-flex: 1 !important;
-ms-flex-positive: 1 !important;
flex-grow: 1 !important; }
.flex-xl-shrink-0 {
-ms-flex-negative: 0 !important;
flex-shrink: 0 !important; }
.flex-xl-shrink-1 {
-ms-flex-negative: 1 !important;
flex-shrink: 1 !important; }
.justify-content-xl-start {
-webkit-box-pack: start !important;
-ms-flex-pack: start !important;
justify-content: flex-start !important; }
.justify-content-xl-end {
-webkit-box-pack: end !important;
-ms-flex-pack: end !important;
justify-content: flex-end !important; }
.justify-content-xl-center {
-webkit-box-pack: center !important;
-ms-flex-pack: center !important;
justify-content: center !important; }
.justify-content-xl-between {
-webkit-box-pack: justify !important;
-ms-flex-pack: justify !important;
justify-content: space-between !important; }
.justify-content-xl-around {
-ms-flex-pack: distribute !important;
justify-content: space-around !important; }
.align-items-xl-start {
-webkit-box-align: start !important;
-ms-flex-align: start !important;
align-items: flex-start !important; }
.align-items-xl-end {
-webkit-box-align: end !important;
-ms-flex-align: end !important;
align-items: flex-end !important; }
.align-items-xl-center {
-webkit-box-align: center !important;
-ms-flex-align: center !important;
align-items: center !important; }
.align-items-xl-baseline {
-webkit-box-align: baseline !important;
-ms-flex-align: baseline !important;
align-items: baseline !important; }
.align-items-xl-stretch {
-webkit-box-align: stretch !important;
-ms-flex-align: stretch !important;
align-items: stretch !important; }
.align-content-xl-start {
-ms-flex-line-pack: start !important;
align-content: flex-start !important; }
.align-content-xl-end {
-ms-flex-line-pack: end !important;
align-content: flex-end !important; }
.align-content-xl-center {
-ms-flex-line-pack: center !important;
align-content: center !important; }
.align-content-xl-between {
-ms-flex-line-pack: justify !important;
align-content: space-between !important; }
.align-content-xl-around {
-ms-flex-line-pack: distribute !important;
align-content: space-around !important; }
.align-content-xl-stretch {
-ms-flex-line-pack: stretch !important;
align-content: stretch !important; }
.align-self-xl-auto {
-ms-flex-item-align: auto !important;
align-self: auto !important; }
.align-self-xl-start {
-ms-flex-item-align: start !important;
align-self: flex-start !important; }
.align-self-xl-end {
-ms-flex-item-align: end !important;
align-self: flex-end !important; }
.align-self-xl-center {
-ms-flex-item-align: center !important;
align-self: center !important; }
.align-self-xl-baseline {
-ms-flex-item-align: baseline !important;
align-self: baseline !important; }
.align-self-xl-stretch {
-ms-flex-item-align: stretch !important;
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;
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 {
-webkit-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;
box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; }
.shadow {
-webkit-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; }
.shadow-lg {
-webkit-box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;
box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; }
.shadow-none {
-webkit-box-shadow: none !important;
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: 0.25rem !important; }
.mt-1,
.my-1 {
margin-top: 0.25rem !important; }
.mr-1,
.mx-1 {
margin-right: 0.25rem !important; }
.mb-1,
.my-1 {
margin-bottom: 0.25rem !important; }
.ml-1,
.mx-1 {
margin-left: 0.25rem !important; }
.m-2 {
margin: 0.5rem !important; }
.mt-2,
.my-2 {
margin-top: 0.5rem !important; }
.mr-2,
.mx-2 {
margin-right: 0.5rem !important; }
.mb-2,
.my-2 {
margin-bottom: 0.5rem !important; }
.ml-2,
.mx-2 {
margin-left: 0.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: 0.25rem !important; }
.pt-1,
.py-1 {
padding-top: 0.25rem !important; }
.pr-1,
.px-1 {
padding-right: 0.25rem !important; }
.pb-1,
.py-1 {
padding-bottom: 0.25rem !important; }
.pl-1,
.px-1 {
padding-left: 0.25rem !important; }
.p-2 {
padding: 0.5rem !important; }
.pt-2,
.py-2 {
padding-top: 0.5rem !important; }
.pr-2,
.px-2 {
padding-right: 0.5rem !important; }
.pb-2,
.py-2 {
padding-bottom: 0.5rem !important; }
.pl-2,
.px-2 {
padding-left: 0.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: -0.25rem !important; }
.mt-n1,
.my-n1 {
margin-top: -0.25rem !important; }
.mr-n1,
.mx-n1 {
margin-right: -0.25rem !important; }
.mb-n1,
.my-n1 {
margin-bottom: -0.25rem !important; }
.ml-n1,
.mx-n1 {
margin-left: -0.25rem !important; }
.m-n2 {
margin: -0.5rem !important; }
.mt-n2,
.my-n2 {
margin-top: -0.5rem !important; }
.mr-n2,
.mx-n2 {
margin-right: -0.5rem !important; }
.mb-n2,
.my-n2 {
margin-bottom: -0.5rem !important; }
.ml-n2,
.mx-n2 {
margin-left: -0.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: 0.25rem !important; }
.mt-sm-1,
.my-sm-1 {
margin-top: 0.25rem !important; }
.mr-sm-1,
.mx-sm-1 {
margin-right: 0.25rem !important; }
.mb-sm-1,
.my-sm-1 {
margin-bottom: 0.25rem !important; }
.ml-sm-1,
.mx-sm-1 {
margin-left: 0.25rem !important; }
.m-sm-2 {
margin: 0.5rem !important; }
.mt-sm-2,
.my-sm-2 {
margin-top: 0.5rem !important; }
.mr-sm-2,
.mx-sm-2 {
margin-right: 0.5rem !important; }
.mb-sm-2,
.my-sm-2 {
margin-bottom: 0.5rem !important; }
.ml-sm-2,
.mx-sm-2 {
margin-left: 0.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: 0.25rem !important; }
.pt-sm-1,
.py-sm-1 {
padding-top: 0.25rem !important; }
.pr-sm-1,
.px-sm-1 {
padding-right: 0.25rem !important; }
.pb-sm-1,
.py-sm-1 {
padding-bottom: 0.25rem !important; }
.pl-sm-1,
.px-sm-1 {
padding-left: 0.25rem !important; }
.p-sm-2 {
padding: 0.5rem !important; }
.pt-sm-2,
.py-sm-2 {
padding-top: 0.5rem !important; }
.pr-sm-2,
.px-sm-2 {
padding-right: 0.5rem !important; }
.pb-sm-2,
.py-sm-2 {
padding-bottom: 0.5rem !important; }
.pl-sm-2,
.px-sm-2 {
padding-left: 0.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: -0.25rem !important; }
.mt-sm-n1,
.my-sm-n1 {
margin-top: -0.25rem !important; }
.mr-sm-n1,
.mx-sm-n1 {
margin-right: -0.25rem !important; }
.mb-sm-n1,
.my-sm-n1 {
margin-bottom: -0.25rem !important; }
.ml-sm-n1,
.mx-sm-n1 {
margin-left: -0.25rem !important; }
.m-sm-n2 {
margin: -0.5rem !important; }
.mt-sm-n2,
.my-sm-n2 {
margin-top: -0.5rem !important; }
.mr-sm-n2,
.mx-sm-n2 {
margin-right: -0.5rem !important; }
.mb-sm-n2,
.my-sm-n2 {
margin-bottom: -0.5rem !important; }
.ml-sm-n2,
.mx-sm-n2 {
margin-left: -0.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: 0.25rem !important; }
.mt-md-1,
.my-md-1 {
margin-top: 0.25rem !important; }
.mr-md-1,
.mx-md-1 {
margin-right: 0.25rem !important; }
.mb-md-1,
.my-md-1 {
margin-bottom: 0.25rem !important; }
.ml-md-1,
.mx-md-1 {
margin-left: 0.25rem !important; }
.m-md-2 {
margin: 0.5rem !important; }
.mt-md-2,
.my-md-2 {
margin-top: 0.5rem !important; }
.mr-md-2,
.mx-md-2 {
margin-right: 0.5rem !important; }
.mb-md-2,
.my-md-2 {
margin-bottom: 0.5rem !important; }
.ml-md-2,
.mx-md-2 {
margin-left: 0.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: 0.25rem !important; }
.pt-md-1,
.py-md-1 {
padding-top: 0.25rem !important; }
.pr-md-1,
.px-md-1 {
padding-right: 0.25rem !important; }
.pb-md-1,
.py-md-1 {
padding-bottom: 0.25rem !important; }
.pl-md-1,
.px-md-1 {
padding-left: 0.25rem !important; }
.p-md-2 {
padding: 0.5rem !important; }
.pt-md-2,
.py-md-2 {
padding-top: 0.5rem !important; }
.pr-md-2,
.px-md-2 {
padding-right: 0.5rem !important; }
.pb-md-2,
.py-md-2 {
padding-bottom: 0.5rem !important; }
.pl-md-2,
.px-md-2 {
padding-left: 0.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: -0.25rem !important; }
.mt-md-n1,
.my-md-n1 {
margin-top: -0.25rem !important; }
.mr-md-n1,
.mx-md-n1 {
margin-right: -0.25rem !important; }
.mb-md-n1,
.my-md-n1 {
margin-bottom: -0.25rem !important; }
.ml-md-n1,
.mx-md-n1 {
margin-left: -0.25rem !important; }
.m-md-n2 {
margin: -0.5rem !important; }
.mt-md-n2,
.my-md-n2 {
margin-top: -0.5rem !important; }
.mr-md-n2,
.mx-md-n2 {
margin-right: -0.5rem !important; }
.mb-md-n2,
.my-md-n2 {
margin-bottom: -0.5rem !important; }
.ml-md-n2,
.mx-md-n2 {
margin-left: -0.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: 0.25rem !important; }
.mt-lg-1,
.my-lg-1 {
margin-top: 0.25rem !important; }
.mr-lg-1,
.mx-lg-1 {
margin-right: 0.25rem !important; }
.mb-lg-1,
.my-lg-1 {
margin-bottom: 0.25rem !important; }
.ml-lg-1,
.mx-lg-1 {
margin-left: 0.25rem !important; }
.m-lg-2 {
margin: 0.5rem !important; }
.mt-lg-2,
.my-lg-2 {
margin-top: 0.5rem !important; }
.mr-lg-2,
.mx-lg-2 {
margin-right: 0.5rem !important; }
.mb-lg-2,
.my-lg-2 {
margin-bottom: 0.5rem !important; }
.ml-lg-2,
.mx-lg-2 {
margin-left: 0.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: 0.25rem !important; }
.pt-lg-1,
.py-lg-1 {
padding-top: 0.25rem !important; }
.pr-lg-1,
.px-lg-1 {
padding-right: 0.25rem !important; }
.pb-lg-1,
.py-lg-1 {
padding-bottom: 0.25rem !important; }
.pl-lg-1,
.px-lg-1 {
padding-left: 0.25rem !important; }
.p-lg-2 {
padding: 0.5rem !important; }
.pt-lg-2,
.py-lg-2 {
padding-top: 0.5rem !important; }
.pr-lg-2,
.px-lg-2 {
padding-right: 0.5rem !important; }
.pb-lg-2,
.py-lg-2 {
padding-bottom: 0.5rem !important; }
.pl-lg-2,
.px-lg-2 {
padding-left: 0.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: -0.25rem !important; }
.mt-lg-n1,
.my-lg-n1 {
margin-top: -0.25rem !important; }
.mr-lg-n1,
.mx-lg-n1 {
margin-right: -0.25rem !important; }
.mb-lg-n1,
.my-lg-n1 {
margin-bottom: -0.25rem !important; }
.ml-lg-n1,
.mx-lg-n1 {
margin-left: -0.25rem !important; }
.m-lg-n2 {
margin: -0.5rem !important; }
.mt-lg-n2,
.my-lg-n2 {
margin-top: -0.5rem !important; }
.mr-lg-n2,
.mx-lg-n2 {
margin-right: -0.5rem !important; }
.mb-lg-n2,
.my-lg-n2 {
margin-bottom: -0.5rem !important; }
.ml-lg-n2,
.mx-lg-n2 {
margin-left: -0.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: 0.25rem !important; }
.mt-xl-1,
.my-xl-1 {
margin-top: 0.25rem !important; }
.mr-xl-1,
.mx-xl-1 {
margin-right: 0.25rem !important; }
.mb-xl-1,
.my-xl-1 {
margin-bottom: 0.25rem !important; }
.ml-xl-1,
.mx-xl-1 {
margin-left: 0.25rem !important; }
.m-xl-2 {
margin: 0.5rem !important; }
.mt-xl-2,
.my-xl-2 {
margin-top: 0.5rem !important; }
.mr-xl-2,
.mx-xl-2 {
margin-right: 0.5rem !important; }
.mb-xl-2,
.my-xl-2 {
margin-bottom: 0.5rem !important; }
.ml-xl-2,
.mx-xl-2 {
margin-left: 0.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: 0.25rem !important; }
.pt-xl-1,
.py-xl-1 {
padding-top: 0.25rem !important; }
.pr-xl-1,
.px-xl-1 {
padding-right: 0.25rem !important; }
.pb-xl-1,
.py-xl-1 {
padding-bottom: 0.25rem !important; }
.pl-xl-1,
.px-xl-1 {
padding-left: 0.25rem !important; }
.p-xl-2 {
padding: 0.5rem !important; }
.pt-xl-2,
.py-xl-2 {
padding-top: 0.5rem !important; }
.pr-xl-2,
.px-xl-2 {
padding-right: 0.5rem !important; }
.pb-xl-2,
.py-xl-2 {
padding-bottom: 0.5rem !important; }
.pl-xl-2,
.px-xl-2 {
padding-left: 0.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: -0.25rem !important; }
.mt-xl-n1,
.my-xl-n1 {
margin-top: -0.25rem !important; }
.mr-xl-n1,
.mx-xl-n1 {
margin-right: -0.25rem !important; }
.mb-xl-n1,
.my-xl-n1 {
margin-bottom: -0.25rem !important; }
.ml-xl-n1,
.mx-xl-n1 {
margin-left: -0.25rem !important; }
.m-xl-n2 {
margin: -0.5rem !important; }
.mt-xl-n2,
.my-xl-n2 {
margin-top: -0.5rem !important; }
.mr-xl-n2,
.mx-xl-n2 {
margin-right: -0.5rem !important; }
.mb-xl-n2,
.my-xl-n2 {
margin-bottom: -0.5rem !important; }
.ml-xl-n2,
.mx-xl-n2 {
margin-left: -0.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: #039BE5 !important; }
a.text-primary:hover, a.text-primary:focus {
color: #026899 !important; }
.text-secondary {
color: #6c757d !important; }
a.text-secondary:hover, a.text-secondary:focus {
color: #494f54 !important; }
.text-success {
color: #28a745 !important; }
a.text-success:hover, a.text-success:focus {
color: #19692c !important; }
.text-info {
color: #17a2b8 !important; }
a.text-info:hover, a.text-info:focus {
color: #0f6674 !important; }
.text-warning {
color: #ffc107 !important; }
a.text-warning:hover, a.text-warning:focus {
color: #ba8b00 !important; }
.text-danger {
color: #dc3545 !important; }
a.text-danger:hover, a.text-danger:focus {
color: #a71d2a !important; }
.text-light {
color: #f8f9fa !important; }
a.text-light:hover, a.text-light:focus {
color: #cbd3da !important; }
.text-dark {
color: #343a40 !important; }
a.text-dark:hover, a.text-dark:focus {
color: #121416 !important; }
.text-body {
color: #212529 !important; }
.text-muted {
color: #6c757d !important; }
.text-black-50 {
color: rgba(0, 0, 0, 0.5) !important; }
.text-white-50 {
color: rgba(255, 255, 255, 0.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; }
html {
height: 100%; }
body {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
min-height: 100vh; }
.container {
max-width: 740px; }
#wrap {
-webkit-box-flex: 1;
-ms-flex: 1 0 auto;
flex: 1 0 auto; }
#wrap > .container {
margin-bottom: 4em; }
@media screen and (max-width: 767px) {
#wrap > .container {
margin-bottom: 3em; } }
.badge {
float: right; }
.jumbotron a.badge {
font-size: 0.75em;
color: white; }
.jumbotron .icon-rss {
margin-right: 0.25em;
font-size: 0.8em; }
@media screen and (max-width: 767px) {
.jumbotron .icon-rss .icon-rss {
height: 12px;
width: 12px; } }
@media screen and (max-width: 767px) {
.jumbotron h1.page-title {
margin-bottom: 0.75em;
font-size: 21px; } }
form {
margin-top: 4em;
margin-bottom: 3em; }
@media screen and (max-width: 767px) {
form {
margin-top: 0;
margin-bottom: 3em; } }
form > .row {
-webkit-box-align: end;
-ms-flex-align: end;
align-items: flex-end; }
form input {
width: 100%; }
#post-list {
position: relative; }
#post-list.processing > *:not(.lds-ellipsis) {
opacity: 0.1; }
.media {
padding: 1em 0;
border-bottom: 1px solid rgba(61, 135, 171, 0.3);
opacity: 1;
-webkit-transition: opacity 0.3s;
transition: opacity 0.3s; }
.media:hover {
text-decoration: none;
background: rgba(73, 131, 159, 0.05); }
.media:last-of-type {
border-bottom: 0; }
.media .badge {
margin: 0 0 1em 1em; }
@media screen and (max-width: 767px) {
.media .badge {
margin: 0 0 0.3em 0.3em; } }
.media .thumbnail {
display: inline-block;
float: left;
height: 50px;
width: 50px;
margin-right: 1rem;
overflow: hidden;
text-align: center;
background: rgba(73, 131, 159, 0.05); }
@media screen and (min-width: 1200px) {
.media .thumbnail {
width: 76px;
height: 76px;
margin-right: 1.5rem; } }
.media .thumbnail img {
height: 50px;
-o-object-fit: cover;
object-fit: cover;
margin-right: 0 !important; }
@media screen and (min-width: 1200px) {
.media .thumbnail img {
height: 76px; } }
.media h5 {
margin-bottom: 0;
font-size: 1rem;
line-height: 1.4; }
.media time {
font-size: 0.8em;
font-style: italic;
color: #999; }
footer {
color: #868e96;
background: rgba(73, 131, 159, 0.1); }
footer .container {
padding-top: 30px;
padding-bottom: 30px; }
footer p:last-of-type {
margin-bottom: 0; }
.lds-ellipsis {
display: inline-block;
position: absolute;
top: 2em;
right: 50%;
left: 50%;
width: 64px;
height: 64px;
margin-left: -32px; }
.lds-ellipsis div {
position: absolute;
top: 27px;
width: 11px;
height: 11px;
border-radius: 50%;
background: #039BE5;
-webkit-animation-timing-function: cubic-bezier(0, 1, 1, 0);
animation-timing-function: cubic-bezier(0, 1, 1, 0); }
.lds-ellipsis div:nth-child(1) {
left: 6px;
-webkit-animation: lds-ellipsis1 0.6s infinite;
animation: lds-ellipsis1 0.6s infinite; }
.lds-ellipsis div:nth-child(2) {
left: 6px;
-webkit-animation: lds-ellipsis2 0.6s infinite;
animation: lds-ellipsis2 0.6s infinite; }
.lds-ellipsis div:nth-child(3) {
left: 26px;
-webkit-animation: lds-ellipsis2 0.6s infinite;
animation: lds-ellipsis2 0.6s infinite; }
.lds-ellipsis div .lds-ellipsis div:nth-child(4) {
left: 45px;
-webkit-animation: lds-ellipsis3 0.6s infinite;
animation: lds-ellipsis3 0.6s infinite; }
@-webkit-keyframes lds-ellipsis1 {
0% {
-webkit-transform: scale(0);
transform: scale(0); }
100% {
-webkit-transform: scale(1);
transform: scale(1); } }
@keyframes lds-ellipsis1 {
0% {
-webkit-transform: scale(0);
transform: scale(0); }
100% {
-webkit-transform: scale(1);
transform: scale(1); } }
@-webkit-keyframes lds-ellipsis3 {
0% {
-webkit-transform: scale(1);
transform: scale(1); }
100% {
-webkit-transform: scale(0);
transform: scale(0); } }
@keyframes lds-ellipsis3 {
0% {
-webkit-transform: scale(1);
transform: scale(1); }
100% {
-webkit-transform: scale(0);
transform: scale(0); } }
@-webkit-keyframes lds-ellipsis2 {
0% {
-webkit-transform: translate(0, 0);
transform: translate(0, 0); }
100% {
-webkit-transform: translate(19px, 0);
transform: translate(19px, 0); } }
@keyframes lds-ellipsis2 {
0% {
-webkit-transform: translate(0, 0);
transform: translate(0, 0); }
100% {
-webkit-transform: translate(19px, 0);
transform: translate(19px, 0); } }
@font-face {
font-family: 'icomoon';
src: url("../fonts/icomoon/icomoon.eot?26hmjc");
src: url("../fonts/icomoon/icomoon.eot?26hmjc#iefix") format("embedded-opentype"), url("../fonts/icomoon/icomoon.ttf?26hmjc") format("truetype"), url("../fonts/icomoon/icomoon.woff?26hmjc") format("woff"), url("../fonts/icomoon/icomoon.svg?26hmjc#icomoon") format("svg");
font-weight: normal;
font-style: normal; }
[class^="icon-"], [class*=" icon-"] {
/* use !important to prevent issues with browser extensions that change fonts */
font-family: 'icomoon' !important;
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale; }
.icon-info-circle:before {
content: "\f05a"; }
.icon-feed:before {
content: "\f09e"; }
.icon-rss:before {
content: "\f09e"; }
================================================
FILE: functions.php
================================================
<?php
// Get file
function getFile($url, $requestType, $cachedFileLocation, $cacheExpiration, $accessToken) {
if($requestType == "mercuryJSON") {
// Get Mercury content
if(CACHE_MERCURY_CONTENT) {
// Use cached file if present
if (file_exists($cachedFileLocation) && time()-filemtime($cachedFileLocation) < $cacheExpiration) {
return file_get_contents($cachedFileLocation, true);
} else {
// Otherwise, CURL the file and cache it
$ch = curl_init();
$curlOptHttpHeaderArray = ['Content-Type: application/json'];
if (defined('MERCURY_API_KEY') && !empty(MERCURY_API_KEY)) {
$curlOptHttpHeaderArray[] = 'x-api-key: ' . MERCURY_API_KEY;
}
curl_setopt($ch, CURLOPT_URL, MERCURY_URL . '/parser?url=' . $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $curlOptHttpHeaderArray);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$mercuryJSON = curl_exec($ch);
if(!$mercuryJSON) {
die("Connection Failure");
}
file_put_contents($cachedFileLocation, $mercuryJSON);
return $mercuryJSON;
curl_close($ch);
}
} else {
// Regularly CURL the Mercury content
$curl = curl_init();
$curlOptHttpHeaderArray = ['Content-Type: application/json'];
if (defined('MERCURY_API_KEY') && !empty(MERCURY_API_KEY)) {
$curlOptHttpHeaderArray[] = 'x-api-key: ' . MERCURY_API_KEY;
}
curl_setopt($curl, CURLOPT_URL, MERCURY_URL . '/parser?url=' . $itemDataUrl);
curl_setopt($curl, CURLOPT_HTTPHEADER, $curlOptHttpHeaderArray);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$mercuryJSON = curl_exec($curl);
if(!$mercuryJSON) {
die("Connection Failure");
}
return $mercuryJSON;
curl_close($ch);
}
} elseif($requestType == "redditJSON" && CACHE_REDDIT_JSON) {
// Get Reddit JSON file
// Use cached file if present
if (file_exists($cachedFileLocation) && time() - filemtime($cachedFileLocation) < $cacheExpiration) {
return file_get_contents($cachedFileLocation, true);
} else {
// Otherwise, CURL the file and cache it
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'web:toprss:1.0 (by /u/' . REDDIT_USER . ')');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' . $accessToken));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_URL, $url);
$curledFile = curl_exec($ch);
file_put_contents($cachedFileLocation, $curledFile);
return $curledFile;
curl_close($ch);
}
} elseif($requestType == "redditScore" && CACHE_REDDIT_JSON) {
// Get Reddit score file
// Use cached file if present
if (file_exists($cachedFileLocation) && time() - filemtime($cachedFileLocation) < $cacheExpiration) {
return file_get_contents($cachedFileLocation, true);
} else {
// Otherwise, cache the score file
file_put_contents($cachedFileLocation, $url);
return $url;
}
} else {
// Regularly CURL the file
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'web:toprss:1.0 (by /u/' . REDDIT_USER . ')');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' . $accessToken));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_URL, $url);
$curledFile = curl_exec($ch);
return $curledFile;
curl_close($ch);
}
}
// Get directory size
// https://www.a2zwebhelp.com/folder-size-php
function directorySize($dir) {
$countSize = 0;
$count = 0;
$dirArray = scandir($dir);
foreach($dirArray as $key => $filename) {
if($filename != ".." && $filename != ".") {
if(is_dir($dir . "/" . $filename)) {
$newFolderSize = directorySize($dir . "/" . $filename);
$countSize = $countSize + $newFolderSize;
} elseif(is_file($dir . "/" . $filename)) {
$countSize = $countSize + filesize($dir . "/" . $filename);
$count++;
}
}
}
return $countSize;
}
// Format size in bytes
// https://www.a2zwebhelp.com/folder-size-php
function sizeFormat($bytes) {
$kb = 1024;
$mb = $kb * 1024;
$gb = $mb * 1024;
$tb = $gb * 1024;
if (($bytes >= 0) && ($bytes < $kb)) {
return $bytes . " B";
} elseif (($bytes >= $kb) && ($bytes < $mb)) {
return ceil($bytes / $kb) . " KB";
} elseif (($bytes >= $mb) && ($bytes < $gb)) {
return ceil($bytes / $mb) . " MB";
} elseif (($bytes >= $gb) && ($bytes < $tb)) {
return ceil($bytes / $gb) . " GB";
} elseif ($bytes >= $tb) {
return ceil($bytes / $tb) . " TB";
} else {
return $bytes . " B";
}
}
================================================
FILE: gulpfile.js
================================================
var gulp = require('gulp'),
plumber = require('gulp-plumber'),
rename = require('gulp-rename');
var autoprefixer = require('gulp-autoprefixer');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var sass = require('gulp-sass');
var browserSync = require('browser-sync');
gulp.task('browser-sync', function() {
browserSync({
proxy: "https://reddit-top-rss.test",
notify: false,
open: false
});
});
gulp.task('bs-reload', function () {
browserSync.reload();
});
gulp.task('styles', function(){
gulp.src(['scss/main.scss'])
.pipe(plumber({
errorHandler: function (error) {
console.log(error.message);
this.emit('end');
}}))
.pipe(sass())
.pipe(autoprefixer('last 2 versions'))
.pipe(gulp.dest('dist/css'))
.pipe(browserSync.stream({match: '**/*.css'}));
});
gulp.task('js', function() {
return gulp.src([
'node_modules/jquery/dist/jquery.min.js',
'node_modules/bootstrap/dist/js/bootstrap.bundle.min.js',
'js/script.js',
])
.pipe(concat('scripts.min.js'))
.pipe(gulp.dest('dist/js'))
.pipe(rename('scripts.min.js'))
.pipe(uglify())
.pipe(gulp.dest('dist/js'));
});
gulp.task('default', ['browser-sync'], function(){
gulp.watch("scss/*.scss", ['styles']);
gulp.watch("**/*.php", ['bs-reload']);
gulp.watch("js/script.js", ['js', 'bs-reload']);
});
================================================
FILE: html.php
================================================
<?php
// Functions
include 'functions.php';
?><!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link href="dist/css/main.css" rel="stylesheet">
<link rel="shortcut icon" href="//www.redditstatic.com/favicon.ico" type="image/x-icon">
</head>
<body>
<div id="wrap">
<div class="jumbotron">
<div class="container">
<h1 class="page-title">/r/<span class="subreddit"><?php echo $subreddit; ?></span><a href="//<?php echo $_SERVER['HTTP_HOST'] . str_replace("html", "rss", $_SERVER["REQUEST_URI"]); echo !isset($_GET["view"]) ? "&view=rss" : ""; ?>" class="rss-badge badge badge-secondary small" data-toggle="tooltip" data-placement="top" title="Subscribe" target="_blank"><span class="icon-rss"></span> RSS</a></h1>
</div>
</div>
<div class="container">
<form>
<div class="row">
<div class="col-12 col-sm form-group">
<label for="subreddit">Subreddit</label>
<input class="form-control" type="text" name="subreddit" value="<?php echo $subreddit; ?>">
</div>
<div class="col-12 col-sm form-group">
<label for="score">Filter Type</label>
<select class="form-control" name="filterType">
<option value="score">Score</option>
<option value="threshold">Threshold</option>
<option value="averagePostsPerDay">Posts Per Day</option>
</select>
</div>
<div id="score-group" class="col-12 col-sm d-none form-group filter-group">
<label for="score">Score <span class="icon-info-circle" data-toggle="tooltip" data-placement="top" title="Posts below this score will be filtered out."></span></label>
<input class="form-control" type="number" name="score" <?php if(isset($_GET["score"]) && !isset($_GET["threshold"])) { ?>value="<?php echo $_GET["score"]; ?>"<?php } ?> min="0" pattern="[0-9]*" inputmode="numeric">
</div>
<div id="threshold-group" class="col-12 col-sm d-none form-group filter-group">
<label for="threshold">Percentage <span class="icon-info-circle" data-toggle="tooltip" data-placement="top" title="Posts below this percentage of the subreddit's monthly top posts' average score will be filtered out."></span></label>
<input class="form-control" type="number" name="threshold" <?php if(isset($_GET["threshold"])) { ?>value="<?php echo $_GET["threshold"]; ?>"<?php } ?> min="0" pattern="[0-9]*" inputmode="numeric">
</div>
<div id="averagePostsPerDay-group" class="col-12 col-sm d-none form-group filter-group">
<label for="averagePostsPerDay">Posts Per Day <span class="icon-info-circle" data-toggle="tooltip" data-placement="top" title="The RSS feed will output roughly this many posts per day."></span></label>
<input class="form-control" type="number" name="averagePostsPerDay" <?php if(isset($_GET["averagePostsPerDay"])) { ?>value="<?php echo $_GET["averagePostsPerDay"]; ?>"<?php } ?> min="0" pattern="[0-9]*" inputmode="numeric">
</div>
<div class="col-12 col-sm form-group">
<button type="submit" class="btn btn-primary btn-block">Submit</button>
</div>
</div>
</form>
<div id="post-list" data-default-subreddit="<?php echo DEFAULT_SUBREDDIT; ?>"></div>
</div>
</div>
<footer class="bd-footer text-muted">
<div class="container">
<div class="row">
<div class="col-lg-2"></div>
<div class="col-lg-8 text-center">
<p>Reddit Top RSS - <a href="https://github.com/johnwarne/reddit-top-rss/" target="_blank">https://github.com/johnwarne/reddit-top-rss/</a></p>
<?php if(CACHE_REDDIT_JSON == true || CACHE_MERCURY_CONTENT == true || CACHE_RSS_FEEDS == true) {
$url = "//" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
$query = parse_url($_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"], PHP_URL_QUERY);
if ($query) {
$url .= "&clearCache";
} else {
$url .= "?clearCache";
}
?>
<p class="clear-cache"><button class="btn btn-link">Clear cached results (<span><?php echo sizeFormat(directorySize("cache")); ?></span>)</button></p>
<?php } ?>
</div>
</div>
</div>
</footer>
<script src="dist/js/scripts.min.js"></script>
</body>
</html>
================================================
FILE: index.php
================================================
<?php
// Config
if (!file_exists('config.php')) {
copy('config-default.php', 'config.php');
}
require_once 'config.php';
// Auth
include 'auth.php';
// Globals
global $subreddit;
global $thresholdScore;
global $thresholdPercentage;
global $thresholdPostsPerDay;
global $mercuryJSON;
// Cache
include 'cache.php';
// View format
if(isset($_GET['view']) && $_GET['view'] == 'rss') {
include 'rss.php';
} else {
include 'html.php';
}
================================================
FILE: js/script.js
================================================
// Clear form values if one is already set and show filled field
function showActiveField() {
$(".filter-group input").each(function(){
if($(this).val().length) {
$("select[name=filterType]").val($(this).attr("name"));
$(this).closest(".filter-group").removeClass("d-none");
$(this).focus();
}
});
if (!$(".filter-group input").filter(function() { return $(this).val(); }).length > 0) {
$("#score-group").removeClass("d-none");
$("input[name=subreddit]").focus();
}
}
// Submit the form
function formSubmit() {
$("form").submit(function(e) {
e.preventDefault();
$(this).find("button[type=submit]").attr("disabled", "disabled").text("Fetching posts…");
$("#post-list").addClass("processing");
$("#post-list").prepend("<div class='lds-ellipsis'><div></div><div></div><div></div><div></div></div>");
// Plug subreddit name from URL parameter into subreddit field
// If subreddit URL parameter doesn't exist, set field to defined default subreddit
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
vars[key] = value;
});
return vars;
}
if(!$("input[name=subreddit]").val().length && getUrlVars()["subreddit"]) {
$("input[name=subreddit]").val(getUrlVars()["subreddit"]);
} else if(!$("input[name=subreddit]").val().length) {
$("input[name=subreddit]").val($("#post-list").attr("data-default-subreddit"));
}
// If no filters are set, enable the score filter
if (!$(".filter-group input").filter(function() { return $(this).val(); }).length > 0) {
$("input[name=score]").removeAttr("disabled");
}
// Push form values to history
var uri = window.location.toString();
if (uri.indexOf("?") > 0) {
var uri = uri.substring(0, uri.indexOf("?"));
}
var uri = uri + "?subreddit=" + $("input[name=subreddit]").val();
$(".filter-group input").each(function(){
if($(this).val().length) {
uri = uri + "&" + $(this).attr("name") + "=" + $(this).val();
}
});
window.history.pushState({}, document.title, uri);
// Set jumbotron title to value from subreddit field
$("h1.page-title span.subreddit").text($("input[name=subreddit]").val().replace(/(<([^>]+)>)/ig,""));
// Set RSS badge URL
$("a.rss-badge").attr("href", uri + "&view=rss").tooltip("hide").attr("data-original-title", uri + "&view=rss");
// Return filtered posts on submit
$.ajax( {
url: "postlist.php",
data: {
subreddit : $("input[name=subreddit]").val(),
score : $("input[name=score]").val(),
threshold : $("input[name=threshold]").val(),
averagePostsPerDay : $("input[name=averagePostsPerDay]").val(),
},
success: function (result) {
$("#post-list").html(result);
$("form button[type=submit]").removeAttr("disabled").text("Submit");
$("#post-list").removeClass("processing");
$("#post-list .lds-ellipsis").remove();
$(".clear-cache span").text($(".cache-size").attr("data-cache-size"));
$("a.media img").each(function(){
$(this).attr("src", $(this).attr("data-src"));
});
},
});
});
}
// Select filter type
$("select[name=filterType]").on("change", function() {
$(".filter-group").addClass("d-none").find("input").val("").removeAttr("disabled");
$("#" + this.value + "-group").removeClass("d-none").find("input").focus();
});
// Clear cached files
$(".clear-cache button").on("click", function() {
$.ajax( {
url: "cache-clear.php",
success: function () {
$(".clear-cache button span").text("0 B");
$("form").submit();
$("html, body").animate({ scrollTop: 0 }, 400);
},
});
});
$(document).ready(function() {
$("[data-toggle='tooltip']").tooltip();
showActiveField();
formSubmit();
$("form").submit();
});
================================================
FILE: package.json
================================================
{
"main": "gulpfile.js",
"devDependencies": {
"bootstrap": "^4.0.0",
"jquery": "^3.3.1",
"browser-sync": "^2.23.7",
"gulp": "^3.9.1",
"gulp-autoprefixer": "^4.1.0",
"gulp-concat": "^2.6.1",
"gulp-plumber": "^1.2.0",
"gulp-rename": "^1.2.2",
"gulp-sass": "^3.1.0",
"gulp-uglify": "^3.0.0"
}
}
================================================
FILE: postlist.php
================================================
<?php
// Config
if (!file_exists('config.php')) {
copy('config-default.php', 'config.php');
}
require_once 'config.php';
// Auth
include 'auth.php';
// Sort and filter
include "sort-and-filter.php";
// Description text
$postListDescription = "<p>Hot posts in <strong>/r/";
$postListDescription .= $subreddit;
$postListDescription .= "</strong>";
if($thresholdScore) {
$postListDescription .= " at or above a score of <strong>";
$postListDescription .= $thresholdScore;
$postListDescription .= "</strong>";
if(isset($_GET["threshold"]) && $_GET["threshold"]) {
$postListDescription .= " <em>(";
$postListDescription .= $thresholdPercentage;
$postListDescription .= "% of monthly top posts' average score)</em>";
}
if(isset($_GET["averagePostsPerDay"]) && $_GET["averagePostsPerDay"]) {
$postListDescription .= " <em>(giving a rough average of ";
$postListDescription .= $_GET["averagePostsPerDay"];
$postListDescription .= " posts per day)</em>";
}
}
$postListDescription .= "</p>";
// Get subreddit hot posts
$jsonFeedFile = getFile("https://oauth.reddit.com/r/" . $subreddit . ".json", "redditJSON", "cache/reddit/$subreddit.json", 60 * 5, $accessToken);
$jsonFeedFileParsed = json_decode($jsonFeedFile, true);
if(empty($jsonFeedFileParsed)) {
echo "<div class='alert alert-warning' role='alert'>/r/" . $subreddit . " is not a valid subreddit</div>";
exit;
}
$items = $jsonFeedFileParsed["data"]["children"];
usort($items, "sortByCreatedDate");
// List posts
$postListText = "";
foreach ($items as $item) {
// Only show posts at or above score threshold
if ($item["data"]["score"] >= $thresholdScore) {
$itemDataUrl = "https://www.reddit.com" . $item["data"]["permalink"];
$itemDataUrl = preg_replace("/&?utm_(.*?)\=[^&]+/", "", $itemDataUrl);
$thumbnailURL = "https://www.redditstatic.com/mweb2x/favicon/76x76.png";
if(!in_array($item["data"]["thumbnail"], ['default', 'nsfw', 'self', 'spoiler'])) {
$thumbnailURL = $item["data"]["thumbnail"];
}
$score = $item["data"]["score"];
if($score > 1000) {
$score = number_format($score / 1000, 1) . "k";
if(strpos($score, ".0") !== FALSE) {
$score = str_replace(".0", "", $score);
}
}
$postListText .= "<a class='media' href='$itemDataUrl' target='_blank'><div class='thumbnail'><img class='d-flex mr-3' data-src='$thumbnailURL'></div><div class='media-body'><h5 class='mt-0'><span class='badge badge-secondary'>$score</span><span class='hide' hidden>" . date("r", $item["data"]["created_utc"]) . "</span>" . $item["data"]["title"] . "</h5><time datetime='" . date("r", $item["data"]["created_utc"]) . "'>" . date("F jS", $item["data"]["created_utc"]) . " at " . date("g:i a", $item["data"]["created_utc"]) . "</time></div></a>";
}
}
// Echo post list or no posts message
if($postListText) {
echo $postListDescription . $postListText;
} else {
echo "<div class='alert alert-warning' role='alert'>No hot posts in <strong>/r/" . $subreddit . "</strong> match the filter above.</div>";
}
// Echo cache size
if(CACHE_REDDIT_JSON == true || CACHE_MERCURY_CONTENT == true || CACHE_RSS_FEEDS == true) {
echo "<div class='cache-size d-none' data-cache-size='" . sizeFormat(directorySize("cache")) . "'></div>";
}
================================================
FILE: rss.php
================================================
<?php
// With some help from https://www.sanwebe.com/2013/07/creating-valid-rss-feed-using-php
header("Content-Type: text/xml; charset=utf-8", true);
// Return cached RSS feed, if it exists and if it was cached in the past hour
if(CACHE_RSS_FEEDS) {
if(file_exists("cache/rss/" . $_SERVER["REQUEST_URI"] . ".xml") && time() - filemtime("cache/rss/" . $_SERVER["REQUEST_URI"] . ".xml") < 60 * 60) {
echo file_get_contents("cache/rss/" . $_SERVER["REQUEST_URI"] . ".xml", true);
exit;
}
}
// Sort and filter
include "sort-and-filter.php";
// Get Subreddit feed
$jsonFeedFile = getFile("https://oauth.reddit.com/r/" . $subreddit . ".json", "redditJSON", "cache/reddit/$subreddit.json", 60 * 5, $accessToken);
$jsonFeedFileParsed = json_decode($jsonFeedFile, true);
$jsonFeedFileItems = $jsonFeedFileParsed["data"]["children"];
usort($jsonFeedFileItems, "sortByCreatedDate");
// Feed description text
$feedDescriptionText = "Hot posts in /r/";
$feedDescriptionText .= $subreddit;
if($thresholdScore) {
if(isset($_GET["score"]) && $_GET["score"]) {
$feedDescriptionText .= " at or above a score of ";
$feedDescriptionText .= $_GET["score"];
}
if(isset($_GET["threshold"]) && $_GET["threshold"]) {
$feedDescriptionText .= " at or above ";
$feedDescriptionText .= $thresholdPercentage;
$feedDescriptionText .= "% of monthly top posts' average score";
}
if(isset($_GET["averagePostsPerDay"]) && $_GET["averagePostsPerDay"]) {
$feedDescriptionText .= " (roughly ";
$feedDescriptionText .= $_GET["averagePostsPerDay"];
$feedDescriptionText .= " posts per day)";
}
}
// Create new DOM document
$xml = new DOMDocument("1.0", "UTF-8");
// Create "RSS" element
$rss = $xml->createElement("rss");
$rssNode = $xml->appendChild($rss);
$rssNode->setAttribute("version", "2.0");
// Set attributes
$rssNode->setAttribute("xmlns:dc", "http://purl.org/dc/elements/1.1/");
$rssNode->setAttribute("xmlns:content", "http://purl.org/rss/1.0/modules/content/");
$rssNode->setAttribute("xmlns:atom", "https://www.w3.org/2005/Atom");
// Create RFC822 Date format to comply with RFC822
$dateF = date("D, d M Y H:i:s T", time());
$buildDate = gmdate(DATE_RFC2822, strtotime($dateF));
// Create "channel" element under "RSS" element
$channel = $xml->createElement("channel");
$channelNode = $rssNode->appendChild
gitextract_89y497d5/ ├── .dockerignore ├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── auth.php ├── cache-clear.php ├── cache.php ├── config-default.php ├── dist/ │ └── css/ │ └── main.css ├── functions.php ├── gulpfile.js ├── html.php ├── index.php ├── js/ │ └── script.js ├── package.json ├── postlist.php ├── rss.php ├── scss/ │ ├── _variables.scss │ └── main.scss └── sort-and-filter.php
SYMBOL INDEX (7 symbols across 3 files)
FILE: functions.php
function getFile (line 4) | function getFile($url, $requestType, $cachedFileLocation, $cacheExpirati...
function directorySize (line 91) | function directorySize($dir) {
function sizeFormat (line 112) | function sizeFormat($bytes) {
FILE: js/script.js
function showActiveField (line 2) | function showActiveField() {
function formSubmit (line 18) | function formSubmit() {
FILE: sort-and-filter.php
function sortByCreatedDate (line 77) | function sortByCreatedDate($a, $b) {
function sortByScoreDesc (line 89) | function sortByScoreDesc($a, $b) {
Condensed preview — 21 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (231K chars).
[
{
"path": ".dockerignore",
"chars": 39,
"preview": ".git\n.vscode\ncache\njs\nnode_modules\nscss"
},
{
"path": ".gitignore",
"chars": 296,
"preview": "#------------------------\n# Main ignored files\n#------------------------\n/.vscode\n/cache\n/config.php\n/env.php\n/node_mod"
},
{
"path": "Dockerfile",
"chars": 220,
"preview": "FROM trafex/alpine-nginx-php7:latest\n\nCOPY --chown=nobody dist ./dist\nCOPY --chown=nobody auth.php cache-clear.php cache"
},
{
"path": "LICENSE",
"chars": 1066,
"preview": "MIT License\n\nCopyright (c) 2019 John Warne\n\nPermission is hereby granted, free of charge, to any person obtaining a copy"
},
{
"path": "README.md",
"chars": 7641,
"preview": "# Update!\n\nThis project has been superseded by [Upvote RSS](https://github.com/johnwarne/upvote-rss), my newer project t"
},
{
"path": "auth.php",
"chars": 1566,
"preview": "<?php\n\nif(empty(REDDIT_USER) || empty(REDDIT_CLIENT_ID) || empty(REDDIT_CLIENT_SECRET)) {\n\texit(\"Please set your Reddit "
},
{
"path": "cache-clear.php",
"chars": 249,
"preview": "<?php\n\n// Clear cache\narray_map(\"unlink\", glob(\"cache/mercury/*.*\"));\narray_map(\"unlink\", glob(\"cache/reddit/*.*\"));\narr"
},
{
"path": "cache.php",
"chars": 1215,
"preview": "<?php\n\n// Create cache directories if they don't exist and remove expired cache files\nif(CACHE_REDDIT_JSON == true) {\n\ti"
},
{
"path": "config-default.php",
"chars": 1852,
"preview": "<?php\n\n// Default subreddit\nif (!empty($_SERVER[\"DEFAULT_SUBREDDIT\"])) {\n define('DEFAULT_SUBREDDIT', $_SERVER[\"DEFAULT"
},
{
"path": "dist/css/main.css",
"chars": 163431,
"preview": ":root {\n --blue: #039BE5;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #f"
},
{
"path": "functions.php",
"chars": 4491,
"preview": "<?php\n\n// Get file\nfunction getFile($url, $requestType, $cachedFileLocation, $cacheExpiration, $accessToken) {\n\tif($requ"
},
{
"path": "gulpfile.js",
"chars": 1419,
"preview": "var gulp = require('gulp'),\n plumber = require('gulp-plumber'),\n rename = require('gulp-rename'"
},
{
"path": "html.php",
"chars": 4251,
"preview": "<?php\n\n// Functions\ninclude 'functions.php';\n\n?><!DOCTYPE html>\n<html>\n<head>\n\t<meta http-equiv=\"X-UA-Compatible\" conten"
},
{
"path": "index.php",
"chars": 442,
"preview": "<?php\n\n// Config\nif (!file_exists('config.php')) {\n\tcopy('config-default.php', 'config.php');\n}\nrequire_once 'config.php"
},
{
"path": "js/script.js",
"chars": 3745,
"preview": "// Clear form values if one is already set and show filled field\nfunction showActiveField() {\n\t$(\".filter-group input\")."
},
{
"path": "package.json",
"chars": 338,
"preview": "{\n \"main\": \"gulpfile.js\",\n \"devDependencies\": {\n \"bootstrap\": \"^4.0.0\",\n \"jquery\": \"^3.3.1\",\n \"browser-sync\":"
},
{
"path": "postlist.php",
"chars": 3288,
"preview": "<?php\n\n// Config\nif (!file_exists('config.php')) {\n\tcopy('config-default.php', 'config.php');\n}\nrequire_once 'config.php"
},
{
"path": "rss.php",
"chars": 13257,
"preview": "<?php\n// With some help from https://www.sanwebe.com/2013/07/creating-valid-rss-feed-using-php\n\nheader(\"Content-Type: te"
},
{
"path": "scss/_variables.scss",
"chars": 341,
"preview": "$color__blue: #039BE5;\n$color__grey-lightest: desaturate(rgba($color__blue, 0.05), 60%);\n$color__grey-lighter: "
},
{
"path": "scss/main.scss",
"chars": 5069,
"preview": "// Variables\n@import \"scss/variables\";\n\n\n// Bootstrap\n@import \"node_modules/bootstrap/scss/functions\";\n@import \"node_mod"
},
{
"path": "sort-and-filter.php",
"chars": 4262,
"preview": "<?php\n\n// Functions\ninclude \"functions.php\";\n\n\n// Get requested subreddit\n// If none is specified, set a default\nif(isse"
}
]
About this extraction
This page contains the full source code of the johnwarne/reddit-top-rss GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 21 files (213.4 KB), approximately 69.7k tokens, and a symbol index with 7 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.