:root {
    --bs-primary: #0d6efd;
    --bs-primary-rgb: 13, 110, 253;
    --bs-primary-bg-subtle: color-mix(in srgb, var(--bs-primary) 20%, white);
    --bs-primary-border-subtle: color-mix(in srgb, var(--bs-primary) 40%, white);
    --bs-focus-ring-color: rgba(var(--bs-primary-rgb), .25);
}

.border-primary   { --alt-border-color: var(--bs-primary); }
.border-secondary { --alt-border-color: #6c757d; }
.border-success   { --alt-border-color: #198754; }
.border-danger    { --alt-border-color: #dc3545; }
.border-warning   { --alt-border-color: #ffc107; }
.border-info      { --alt-border-color: #0dcaf0; }
.border-light     { --alt-border-color: #f8f9fa; }
.border-dark      { --alt-border-color: #212529; }

.border-primary,
.border-secondary,
.border-success,
.border-danger,
.border-warning,
.border-info,
.border-light,
.border-dark {
    border-color: var(--alt-border-color);
}

.bg-primary   { --alt-bg-rgb: var(--bs-primary-rgb); }
.bg-secondary { --alt-bg-rgb: 108, 117, 125; }
.bg-success   { --alt-bg-rgb: 25, 135, 84; }
.bg-danger    { --alt-bg-rgb: 220, 53, 69; }
.bg-warning   { --alt-bg-rgb: 255, 193, 7; }
.bg-info      { --alt-bg-rgb: 13, 202, 240; }
.bg-light     { --alt-bg-rgb: 248, 249, 250; }
.bg-dark      { --alt-bg-rgb: 33, 37, 41; }

.bg-primary,
.bg-secondary,
.bg-success,
.bg-danger,
.bg-warning,
.bg-info,
.bg-light,
.bg-dark {
    background-color: rgba(var(--alt-bg-rgb), var(--alt-bg-opacity, 1));
}

.bg-opacity-50  { --alt-bg-opacity: .5; }
.bg-opacity-100 { --alt-bg-opacity: 1; }

.d-none      { display: none !important; }
.d-flex      { display: flex; }
.flex-column { flex-direction: column; }
.justify-content-center { justify-content: center !important; }
.clearfix::after {
    display: block;
    clear: both;
    content: "";
}
.float-start { float: left !important; }
.float-end   { float: right !important; }
.rounded-pill { border-radius: 50rem !important; }
.text-center { text-align: center !important; }
.text-truncate {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.gap-1       { gap: 0.25rem; }
.gap-2       { gap: 0.5rem; }
.gap-3       { gap: 1rem; }
.gap-4       { gap: 1.5rem; }
.gap-5       { gap: 3rem; }

.mt-0 { margin-top: 0 !important; }
.mt-1 { margin-top: 0.25rem !important; }
.mt-2 { margin-top: 0.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: 0.25rem !important; }
.mb-2 { margin-bottom: 0.5rem !important; }
.mb-3 { margin-bottom: 1rem !important; }
.mb-4 { margin-bottom: 1.5rem !important; }
.mb-5 { margin-bottom: 3rem !important; }

.pt-0 { padding-top: 0 !important; }
.pt-1 { padding-top: 0.25rem !important; }
.pt-2 { padding-top: 0.5rem !important; }
.pt-3 { padding-top: 1rem !important; }
.pt-4 { padding-top: 1.5rem !important; }
.pt-5 { padding-top: 3rem !important; }

.pb-0 { padding-bottom: 0 !important; }
.pb-1 { padding-bottom: 0.25rem !important; }
.pb-2 { padding-bottom: 0.5rem !important; }
.pb-3 { padding-bottom: 1rem !important; }
.pb-4 { padding-bottom: 1.5rem !important; }
.pb-5 { padding-bottom: 3rem !important; }
