@charset "UTF-8";
/* ===========================================================================
 * app.css - layout / utility / component primitives
 *
 * Replaces bootstrap.purged.css (63 KB) with only what this site's markup
 * actually uses, written out with Bootstrap's own resolved values so nothing
 * shifts visually. style.css remains the design layer and must load AFTER this
 * file, exactly as it did after bootstrap.
 *
 * Rule for maintaining this file: only define a class that Bootstrap already
 * defined for markup we ship. Defining a class the old build left undefined
 * (e.g. .float-lg-right, .img-responsive, .btn-default) would silently CHANGE
 * the layout rather than preserve it.
 *
 * Contents
 *   1. Reset & base
 *   2. Grid
 *   3. Utilities
 *   4. Buttons
 *   5. Forms
 *   6. Tables
 *   7. Navbar & nav
 *   8. Card
 *   9. Carousel
 *  10. Modal
 *  11. Collapse & accordion
 * ========================================================================= */

/* ---------------------------------------------------------------- 1. Reset */

*,
*::before,
*::after {
    box-sizing: border-box;
}

body {
    margin: 0;
    font-family: Roboto, system-ui, -apple-system, "Segoe UI", Arial, sans-serif;
    font-size: 1rem;
    font-weight: 400;
    line-height: 1.5;
    color: #212529;
    background-color: #fff;
    -webkit-text-size-adjust: 100%;
}

h1,
h2,
h3,
.h1 {
    margin-top: 0;
    margin-bottom: .5rem;
    font-weight: 500;
    line-height: 1.2;
}

.h1,
h1 {
    font-size: 2.5rem;
}

h2 {
    font-size: 2rem;
}

p {
    margin-top: 0;
    margin-bottom: 1rem;
}

ul {
    margin-top: 0;
    margin-bottom: 1rem;
    padding-left: 2rem;
}

small {
    font-size: .875em;
}

b {
    font-weight: bolder;
}

a {
    color: #0d6efd;
    text-decoration: underline;
}

img,
svg {
    vertical-align: middle;
}

button,
input,
select,
textarea {
    margin: 0;
    font: inherit;
    color: inherit;
}

/* From Bootstrap's reboot. Without it the consent label next to the checkbox
 * lays out as inline and the block grows by ~50px. */
label {
    display: inline-block;
}

button,
[type=button],
[type=submit] {
    -webkit-appearance: button;
    cursor: pointer;
}

table {
    border-collapse: collapse;
    caption-side: bottom;
}

th {
    text-align: inherit;
    text-align: -webkit-match-parent;
}

th,
tr {
    border: 0 solid;
    border-color: inherit;
}

[hidden] {
    display: none !important;
}

/* ----------------------------------------------------------------- 2. Grid */

.row {
    --gutter-x: 1.5rem;
    display: flex;
    flex-wrap: wrap;
    margin-right: calc(-.5 * var(--gutter-x));
    margin-left: calc(-.5 * var(--gutter-x));
}

.row > * {
    flex-shrink: 0;
    width: 100%;
    max-width: 100%;
    padding-right: calc(var(--gutter-x) * .5);
    padding-left: calc(var(--gutter-x) * .5);
}

.col {
    flex: 1 0 0%;
}

.row-cols-1 > * {
    flex: 0 0 auto;
    width: 100%;
}

@media (min-width: 768px) {
    .col-md-4 {
        flex: 0 0 auto;
        width: 33.33333333%;
    }

    .col-md-6 {
        flex: 0 0 auto;
        width: 50%;
    }

    .col-md-8 {
        flex: 0 0 auto;
        width: 66.66666667%;
    }

    .col-md-12 {
        flex: 0 0 auto;
        width: 100%;
    }

    .row-cols-md-3 > * {
        flex: 0 0 auto;
        width: 33.33333333%;
    }
}

/* ------------------------------------------------------------ 3. Utilities */

.d-none    { display: none !important; }
.d-block   { display: block !important; }
.d-flex    { display: flex !important; }
.d-inline-block { display: inline-block !important; }

.flex-row       { flex-direction: row !important; }
.flex-fill      { flex: 1 1 auto !important; }
.flex-shrink-0  { flex-shrink: 0 !important; }
.flex-shrink-1  { flex-shrink: 1 !important; }
.align-self-center { align-self: center !important; }

.w-100 { width: 100% !important; }

.overflow-hidden { overflow: hidden !important; }

.text-center  { text-align: center !important; }
.text-capitalize { text-transform: capitalize !important; }
.text-uppercase  { text-transform: uppercase !important; }
.text-decoration-none { text-decoration: none !important; }

.text-white  { color: #fff !important; }
.text-light  { color: #f8f9fa !important; }
.text-danger { color: #dc3545 !important; }

.bg-white { background-color: #fff !important; }
.bg-light { background-color: #f8f9fa !important; }

.border           { border: 1px solid #dee2e6 !important; }
.border-top-0     { border-top: 0 !important; }
.border-bottom-0  { border-bottom: 0 !important; }
.border-left-0    { border-left: 0 !important; }
.border-right-0   { border-right: 0 !important; }

.rounded-0 { border-radius: 0 !important; }

/* rgba(33,37,41) is Bootstrap's --bs-body-color-rgb, not plain black. */
.shadow-sm { box-shadow: 0 .125rem .25rem rgba(33, 37, 41, .075) !important; }

.fixed-top {
    position: fixed;
    top: 0;
    right: 0;
    left: 0;
    z-index: 1030;
}

/* Spacing - Bootstrap's scale: 1=.25rem 2=.5rem 3=1rem 4=1.5rem 5=3rem */
.mt-1 { margin-top: .25rem !important; }
.mt-2 { margin-top: .5rem !important; }
.mt-3 { margin-top: 1rem !important; }
.mt-4 { margin-top: 1.5rem !important; }
.mt-5 { margin-top: 3rem !important; }

.mb-0 { margin-bottom: 0 !important; }
.mb-1 { margin-bottom: .25rem !important; }
.mb-3 { margin-bottom: 1rem !important; }
.mb-4 { margin-bottom: 1.5rem !important; }
.mb-5 { margin-bottom: 3rem !important; }

.my-2 { margin-top: .5rem !important; margin-bottom: .5rem !important; }
.my-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; }

.me-1 { margin-right: .25rem !important; }
.ms-2 { margin-left: .5rem !important; }

.pt-2 { padding-top: .5rem !important; }
.pb-1 { padding-bottom: .25rem !important; }
.pb-2 { padding-bottom: .5rem !important; }

.px-1 { padding-right: .25rem !important; padding-left: .25rem !important; }
.px-2 { padding-right: .5rem !important; padding-left: .5rem !important; }
.px-3 { padding-right: 1rem !important; padding-left: 1rem !important; }

/* Breakpoint blocks must stay in ascending order: these utilities are all
 * !important, so when several match the LAST one wins. `.d-sm-inline` sitting
 * after `.d-md-none` would keep the nav's "Home" label visible on desktop,
 * where Bootstrap hides it. */
@media (min-width: 576px) {
    .mx-sm-auto { margin-right: auto !important; margin-left: auto !important; }
    .d-sm-inline { display: inline !important; }
}

@media (min-width: 768px) {
    .pt-md-0 { padding-top: 0 !important; }
    .d-md-none { display: none !important; }
}

@media (min-width: 992px) {
    .d-lg-block { display: block !important; }
    .d-lg-none  { display: none !important; }
}

/* -------------------------------------------------------------- 4. Buttons */

.btn {
    display: inline-block;
    padding: .375rem .75rem;
    font-size: 1rem;
    font-weight: 400;
    line-height: 1.5;
    color: #212529;
    text-align: center;
    text-decoration: none;
    vertical-align: middle;
    cursor: pointer;
    user-select: none;
    background-color: transparent;
    border: 1px solid transparent;
    border-radius: .375rem;
}

.btn:disabled {
    pointer-events: none;
    opacity: .65;
}

.btn-sm {
    padding: .25rem .5rem;
    font-size: .875rem;
    border-radius: .25rem;
}

.btn-info {
    color: #000;
    background-color: #0dcaf0;
    border-color: #0dcaf0;
}

.btn-primary {
    color: #fff;
    background-color: #0d6efd;
    border-color: #0d6efd;
}

.btn-dark {
    color: #fff;
    background-color: #212529;
    border-color: #212529;
}

/* ---------------------------------------------------------------- 5. Forms */

.form-control {
    display: block;
    width: 100%;
    padding: .375rem .75rem;
    font-size: 1rem;
    font-weight: 400;
    line-height: 1.5;
    color: #212529;
    background-color: #fff;
    background-clip: padding-box;
    border: 1px solid #dee2e6;
    border-radius: .375rem;
    appearance: none;
}

.form-control:focus {
    color: #212529;
    background-color: #fff;
    border-color: #86b7fe;
    outline: 0;
    box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25);
}

.form-control::placeholder {
    color: #6c757d;
    opacity: 1;
}

.form-select {
    display: block;
    width: 100%;
    padding: .375rem 2.25rem .375rem .75rem;
    font-size: 1rem;
    font-weight: 400;
    line-height: 1.5;
    color: #212529;
    background-color: #fff;
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
    background-repeat: no-repeat;
    background-position: right .75rem center;
    background-size: 16px 12px;
    border: 1px solid #dee2e6;
    border-radius: .375rem;
    appearance: none;
}

.form-select:focus {
    border-color: #86b7fe;
    outline: 0;
    box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25);
}

.form-check-input {
    width: 1em;
    height: 1em;
    margin-top: .25em;
    vertical-align: top;
    background-color: #fff;
    background-repeat: no-repeat;
    background-position: center;
    background-size: contain;
    border: 1px solid rgba(0, 0, 0, .25);
    border-radius: .25em;
    appearance: none;
    print-color-adjust: exact;
}

.form-check-input:checked {
    background-color: #0d6efd;
    border-color: #0d6efd;
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");
}

.form-check-label {
    cursor: pointer;
}

/* --------------------------------------------------------------- 6. Tables */

.table {
    --table-bg: transparent;
    --table-accent-bg: transparent;
    width: 100%;
    margin-bottom: 1rem;
    vertical-align: top;
    border-color: #dee2e6;
}

.table > :not(caption) > * > * {
    padding: .5rem;
    background-color: var(--table-bg);
    border-bottom-width: 1px;
    box-shadow: inset 0 0 0 9999px var(--table-accent-bg);
}

.table > tbody {
    vertical-align: inherit;
}

.table-striped > tbody > tr:nth-of-type(odd) > * {
    --table-accent-bg: rgba(0, 0, 0, .05);
}

.table-borderless > :not(caption) > * > * {
    border-bottom-width: 0;
}

.table-borderless > :not(:first-child) {
    border-top-width: 0;
}

/* ------------------------------------------------------- 7. Navbar and nav */

.navbar {
    position: relative;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    padding: .5rem 0;
}

.navbar-brand {
    padding-top: .3125rem;
    padding-bottom: .3125rem;
    margin-right: 1rem;
    font-size: 1.25rem;
    text-decoration: none;
    white-space: nowrap;
}

/* .navbar-nav re-declares the nav-link custom properties with no horizontal
 * padding, which is what gives header links their 8px 0 padding. */
.navbar-nav {
    --nav-link-padding-x: 0;
    --nav-link-padding-y: .5rem;
    --nav-link-color: rgba(33, 37, 41, .65);
    display: flex;
    flex-direction: column;
    padding-left: 0;
    margin-bottom: 0;
    list-style: none;
}

.navbar-collapse {
    flex-basis: 100%;
    flex-grow: 1;
    align-items: center;
}

.navbar-toggler {
    padding: .25rem .75rem;
    font-size: 1.25rem;
    line-height: 1;
    background-color: transparent;
    border: 1px solid transparent;
    border-radius: .375rem;
}

.navbar-toggler-icon {
    display: inline-block;
    width: 1.5em;
    height: 1.5em;
    vertical-align: middle;
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
    background-repeat: no-repeat;
    background-position: center;
    background-size: 100%;
}

@media (min-width: 992px) {
    .navbar-expand-lg {
        flex-wrap: nowrap;
        justify-content: flex-start;
    }

    .navbar-expand-lg .navbar-nav {
        flex-direction: row;
    }

    .navbar-expand-lg .navbar-collapse {
        display: flex !important;
        flex-basis: auto;
    }

    .navbar-expand-lg .navbar-toggler {
        display: none;
    }
}

/* The padding/colour custom properties are declared on .nav only -- exactly as
 * Bootstrap does. That matters: the header's list is .navbar-nav, NOT .nav, so
 * inside it `var(--nav-link-padding-x)` is unresolved, the whole declaration on
 * .nav-link becomes invalid and is dropped, and the link falls back to
 * style.css. Hard-coding .5rem 1rem here instead would add a 16px left pad the
 * live site does not have. */
.nav {
    --nav-link-padding-y: .5rem;
    --nav-link-padding-x: 1rem;
    --nav-link-color: #0d6efd;
    display: flex;
    flex-wrap: wrap;
    padding-left: 0;
    margin-bottom: 0;
    list-style: none;
}

.nav-fill > .nav-item,
.nav-fill .nav-link {
    flex: 1 1 auto;
    text-align: center;
}

.nav-link {
    display: block;
    padding: var(--nav-link-padding-y) var(--nav-link-padding-x);
    color: var(--nav-link-color);
    text-decoration: none;
    background: none;
    border: 0;
    transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out;
}

.navbar-nav .nav-link {
    padding-right: 0;
}

/* ----------------------------------------------------------------- 8. Card */

.card {
    position: relative;
    display: flex;
    flex-direction: column;
    min-width: 0;
    word-wrap: break-word;
    background-color: #fff;
    background-clip: border-box;
    border: 1px solid rgba(0, 0, 0, .175);
    border-radius: .375rem;
}

.card-body {
    flex: 1 1 auto;
    padding: 1rem;
}

.card-img-top {
    width: 100%;
    border-top-left-radius: calc(.375rem - 1px);
    border-top-right-radius: calc(.375rem - 1px);
}

/* ------------------------------------------------------------- 9. Carousel */

.carousel {
    position: relative;
}

.carousel-inner {
    position: relative;
    width: 100%;
    overflow: hidden;
}

.carousel-inner::after {
    display: block;
    clear: both;
    content: "";
}

.carousel-item {
    position: relative;
    display: none;
    float: left;
    width: 100%;
    margin-right: -100%;
    backface-visibility: hidden;
    transition: transform .6s ease-in-out;
}

.carousel-item.active {
    display: block;
}

@media (prefers-reduced-motion: reduce) {
    .carousel-item {
        transition: none;
    }
}

.carousel-indicators {
    position: absolute;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 2;
    display: flex;
    justify-content: center;
    padding: 0;
    margin: 0 15% 1rem;
    list-style: none;
}

/* ---------------------------------------------------------------- 10. Modal */

.modal {
    position: fixed;
    top: 0;
    left: 0;
    z-index: 1055;
    display: none;
    width: 100%;
    height: 100%;
    overflow-x: hidden;
    overflow-y: auto;
    outline: 0;
}

.modal-dialog {
    position: relative;
    width: auto;
    margin: .5rem;
    pointer-events: none;
}

.modal.fade .modal-dialog {
    transition: transform .3s ease-out;
    transform: translate(0, -50px);
}

.modal.show .modal-dialog {
    transform: none;
}

.modal-dialog-centered {
    display: flex;
    align-items: center;
    min-height: calc(100% - 1rem);
}

.modal-content {
    position: relative;
    display: flex;
    flex-direction: column;
    width: 100%;
    pointer-events: auto;
    background-color: #fff;
    background-clip: padding-box;
    border: 1px solid rgba(0, 0, 0, .175);
    border-radius: .5rem;
    outline: 0;
}

.modal-body {
    position: relative;
    flex: 1 1 auto;
    padding: 1rem;
}

.modal-backdrop {
    position: fixed;
    top: 0;
    left: 0;
    z-index: 1050;
    width: 100vw;
    height: 100vh;
    background-color: #000;
    opacity: 0;
    transition: opacity .15s linear;
}

.modal-backdrop.show {
    opacity: .5;
}

/* Set on <body> while a modal is open, replacing Bootstrap's inline styles. */
.modal-open {
    overflow: hidden;
}

@media (min-width: 576px) {
    .modal-dialog {
        max-width: 500px;
        margin: 1.75rem auto;
    }

    .modal-dialog-centered {
        min-height: calc(100% - 3.5rem);
    }
}

/* .close is styled entirely by style.css - deliberately not defined here. */

/* ------------------------------------------------ 11. Collapse & accordion */

.fade {
    transition: opacity .15s linear;
}

/* Exists in bootstrap.purged.css and drives the modal's fade-in.
 * The backdrop's own fade is handled by .modal-backdrop / .modal-backdrop.show
 * in section 10 -- adding a `.modal-backdrop.fade{opacity:0}` rule HERE would
 * sit after `.show` and cancel it, since both have the same specificity. */
.fade:not(.show) {
    opacity: 0;
}

.collapse:not(.show) {
    display: none;
}

.collapsing {
    height: 0;
    overflow: hidden;
    transition: height .35s ease;
}

@media (prefers-reduced-motion: reduce) {
    .fade,
    .collapsing {
        transition: none;
    }
}

.accordion-item {
    background-color: #fff;
    border: 1px solid #dee2e6;
}

.accordion-button {
    position: relative;
    display: flex;
    align-items: center;
    width: 100%;
    padding: 1rem 1.25rem;
    font-size: 1rem;
    color: #212529;
    text-align: left;
    background-color: #fff;
    border: 0;
    border-radius: 0;
    overflow-anchor: none;
}

.accordion-button::after {
    flex-shrink: 0;
    width: 1.25rem;
    height: 1.25rem;
    margin-left: auto;
    content: "";
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
    background-repeat: no-repeat;
    background-size: 1.25rem;
    transition: transform .2s ease-in-out;
}

.accordion-button:not(.collapsed)::after {
    transform: rotate(-180deg);
}

.accordion-body {
    padding: 1rem 1.25rem;
}
