From 5e0cf8c9ae3738e8e0d6bcfd340dc24eaa9f0efc Mon Sep 17 00:00:00 2001 From: HB9HIL Date: Thu, 23 May 2024 10:50:36 +0200 Subject: [PATCH 001/154] strip bootstrap --- assets/css/bootstrap-grid.css | 4147 ----------------------- assets/css/bootstrap-grid.css.map | 1 - assets/css/bootstrap-grid.min.css | 3955 --------------------- assets/css/bootstrap-grid.min.css.map | 1 - assets/css/bootstrap-reboot.css | 504 --- assets/css/bootstrap-reboot.css.map | 1 - assets/css/bootstrap-reboot.min.css | 432 --- assets/css/bootstrap-reboot.min.css.map | 1 - 8 files changed, 9042 deletions(-) delete mode 100644 assets/css/bootstrap-grid.css delete mode 100644 assets/css/bootstrap-grid.css.map delete mode 100644 assets/css/bootstrap-grid.min.css delete mode 100644 assets/css/bootstrap-grid.min.css.map delete mode 100644 assets/css/bootstrap-reboot.css delete mode 100644 assets/css/bootstrap-reboot.css.map delete mode 100644 assets/css/bootstrap-reboot.min.css delete mode 100644 assets/css/bootstrap-reboot.min.css.map diff --git a/assets/css/bootstrap-grid.css b/assets/css/bootstrap-grid.css deleted file mode 100644 index 324c69034..000000000 --- a/assets/css/bootstrap-grid.css +++ /dev/null @@ -1,4147 +0,0 @@ -/*! - * Bootstrap Grid v5.2.3 (https://getbootstrap.com/) - * Copyright 2011-2022 The Bootstrap Authors - * Copyright 2011-2022 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */ -:root { - --bs-blue: #0d6efd; - --bs-indigo: #6610f2; - --bs-purple: #6f42c1; - --bs-pink: #d63384; - --bs-red: #dc3545; - --bs-orange: #fd7e14; - --bs-yellow: #ffc107; - --bs-green: #198754; - --bs-teal: #20c997; - --bs-cyan: #0dcaf0; - --bs-black: #000; - --bs-white: #fff; - --bs-gray: #6c757d; - --bs-gray-dark: #343a40; - --bs-gray-100: #f8f9fa; - --bs-gray-200: #e9ecef; - --bs-gray-300: #dee2e6; - --bs-gray-400: #ced4da; - --bs-gray-500: #adb5bd; - --bs-gray-600: #6c757d; - --bs-gray-700: #495057; - --bs-gray-800: #343a40; - --bs-gray-900: #212529; - --bs-primary: #0d6efd; - --bs-secondary: #6c757d; - --bs-success: #198754; - --bs-info: #0dcaf0; - --bs-warning: #ffc107; - --bs-danger: #dc3545; - --bs-light: #f8f9fa; - --bs-dark: #212529; - --bs-primary-rgb: 13, 110, 253; - --bs-secondary-rgb: 108, 117, 125; - --bs-success-rgb: 25, 135, 84; - --bs-info-rgb: 13, 202, 240; - --bs-warning-rgb: 255, 193, 7; - --bs-danger-rgb: 220, 53, 69; - --bs-light-rgb: 248, 249, 250; - --bs-dark-rgb: 33, 37, 41; - --bs-white-rgb: 255, 255, 255; - --bs-black-rgb: 0, 0, 0; - --bs-body-color-rgb: 33, 37, 41; - --bs-body-bg-rgb: 255, 255, 255; - --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, - "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, - "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", - "Noto Color Emoji"; - --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, - "Liberation Mono", "Courier New", monospace; - --bs-gradient: linear-gradient( - 180deg, - rgba(255, 255, 255, 0.15), - rgba(255, 255, 255, 0) - ); - --bs-body-font-family: var(--bs-font-sans-serif); - --bs-body-font-size: 1rem; - --bs-body-font-weight: 400; - --bs-body-line-height: 1.5; - --bs-body-color: #212529; - --bs-body-bg: #fff; - --bs-border-width: 1px; - --bs-border-style: solid; - --bs-border-color: #dee2e6; - --bs-border-color-translucent: rgba(0, 0, 0, 0.175); - --bs-border-radius: 0.375rem; - --bs-border-radius-sm: 0.25rem; - --bs-border-radius-lg: 0.5rem; - --bs-border-radius-xl: 1rem; - --bs-border-radius-2xl: 2rem; - --bs-border-radius-pill: 50rem; - --bs-link-color: #0d6efd; - --bs-link-hover-color: #0a58ca; - --bs-code-color: #d63384; - --bs-highlight-bg: #fff3cd; -} - -.container, -.container-fluid, -.container-xxl, -.container-xl, -.container-lg, -.container-md, -.container-sm { - --bs-gutter-x: 1.5rem; - --bs-gutter-y: 0; - width: 100%; - padding-right: calc(var(--bs-gutter-x) * 0.5); - padding-left: calc(var(--bs-gutter-x) * 0.5); - margin-right: auto; - margin-left: auto; -} - -@media (min-width: 576px) { - .container-sm, - .container { - max-width: 540px; - } -} -@media (min-width: 768px) { - .container-md, - .container-sm, - .container { - max-width: 720px; - } -} -@media (min-width: 992px) { - .container-lg, - .container-md, - .container-sm, - .container { - max-width: 960px; - } -} -@media (min-width: 1200px) { - .container-xl, - .container-lg, - .container-md, - .container-sm, - .container { - max-width: 1140px; - } -} -@media (min-width: 1400px) { - .container-xxl, - .container-xl, - .container-lg, - .container-md, - .container-sm, - .container { - max-width: 1320px; - } -} -.row { - --bs-gutter-x: 1.5rem; - --bs-gutter-y: 0; - display: flex; - flex-wrap: wrap; - margin-top: calc(-1 * var(--bs-gutter-y)); - margin-right: calc(-0.5 * var(--bs-gutter-x)); - margin-left: calc(-0.5 * var(--bs-gutter-x)); -} -.row > * { - box-sizing: border-box; - flex-shrink: 0; - width: 100%; - max-width: 100%; - padding-right: calc(var(--bs-gutter-x) * 0.5); - padding-left: calc(var(--bs-gutter-x) * 0.5); - margin-top: var(--bs-gutter-y); -} - -.col { - flex: 1 0 0%; -} - -.row-cols-auto > * { - flex: 0 0 auto; - width: auto; -} - -.row-cols-1 > * { - flex: 0 0 auto; - width: 100%; -} - -.row-cols-2 > * { - flex: 0 0 auto; - width: 50%; -} - -.row-cols-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; -} - -.row-cols-4 > * { - flex: 0 0 auto; - width: 25%; -} - -.row-cols-5 > * { - flex: 0 0 auto; - width: 20%; -} - -.row-cols-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; -} - -.col-auto { - flex: 0 0 auto; - width: auto; -} - -.col-1 { - flex: 0 0 auto; - width: 8.33333333%; -} - -.col-2 { - flex: 0 0 auto; - width: 16.66666667%; -} - -.col-3 { - flex: 0 0 auto; - width: 25%; -} - -.col-4 { - flex: 0 0 auto; - width: 33.33333333%; -} - -.col-5 { - flex: 0 0 auto; - width: 41.66666667%; -} - -.col-6 { - flex: 0 0 auto; - width: 50%; -} - -.col-7 { - flex: 0 0 auto; - width: 58.33333333%; -} - -.col-8 { - flex: 0 0 auto; - width: 66.66666667%; -} - -.col-9 { - flex: 0 0 auto; - width: 75%; -} - -.col-10 { - flex: 0 0 auto; - width: 83.33333333%; -} - -.col-11 { - flex: 0 0 auto; - width: 91.66666667%; -} - -.col-12 { - flex: 0 0 auto; - width: 100%; -} - -.offset-1 { - margin-left: 8.33333333%; -} - -.offset-2 { - margin-left: 16.66666667%; -} - -.offset-3 { - margin-left: 25%; -} - -.offset-4 { - margin-left: 33.33333333%; -} - -.offset-5 { - margin-left: 41.66666667%; -} - -.offset-6 { - margin-left: 50%; -} - -.offset-7 { - margin-left: 58.33333333%; -} - -.offset-8 { - margin-left: 66.66666667%; -} - -.offset-9 { - margin-left: 75%; -} - -.offset-10 { - margin-left: 83.33333333%; -} - -.offset-11 { - margin-left: 91.66666667%; -} - -.g-0, -.gx-0 { - --bs-gutter-x: 0; -} - -.g-0, -.gy-0 { - --bs-gutter-y: 0; -} - -.g-1, -.gx-1 { - --bs-gutter-x: 0.25rem; -} - -.g-1, -.gy-1 { - --bs-gutter-y: 0.25rem; -} - -.g-2, -.gx-2 { - --bs-gutter-x: 0.5rem; -} - -.g-2, -.gy-2 { - --bs-gutter-y: 0.5rem; -} - -.g-3, -.gx-3 { - --bs-gutter-x: 1rem; -} - -.g-3, -.gy-3 { - --bs-gutter-y: 1rem; -} - -.g-4, -.gx-4 { - --bs-gutter-x: 1.5rem; -} - -.g-4, -.gy-4 { - --bs-gutter-y: 1.5rem; -} - -.g-5, -.gx-5 { - --bs-gutter-x: 3rem; -} - -.g-5, -.gy-5 { - --bs-gutter-y: 3rem; -} - -@media (min-width: 576px) { - .col-sm { - flex: 1 0 0%; - } - .row-cols-sm-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-sm-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-sm-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-sm-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - .row-cols-sm-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-sm-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-sm-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } - .col-sm-auto { - flex: 0 0 auto; - width: auto; - } - .col-sm-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-sm-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-sm-3 { - flex: 0 0 auto; - width: 25%; - } - .col-sm-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-sm-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-sm-6 { - flex: 0 0 auto; - width: 50%; - } - .col-sm-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-sm-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-sm-9 { - flex: 0 0 auto; - width: 75%; - } - .col-sm-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-sm-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-sm-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-sm-0 { - margin-left: 0; - } - .offset-sm-1 { - margin-left: 8.33333333%; - } - .offset-sm-2 { - margin-left: 16.66666667%; - } - .offset-sm-3 { - margin-left: 25%; - } - .offset-sm-4 { - margin-left: 33.33333333%; - } - .offset-sm-5 { - margin-left: 41.66666667%; - } - .offset-sm-6 { - margin-left: 50%; - } - .offset-sm-7 { - margin-left: 58.33333333%; - } - .offset-sm-8 { - margin-left: 66.66666667%; - } - .offset-sm-9 { - margin-left: 75%; - } - .offset-sm-10 { - margin-left: 83.33333333%; - } - .offset-sm-11 { - margin-left: 91.66666667%; - } - .g-sm-0, - .gx-sm-0 { - --bs-gutter-x: 0; - } - .g-sm-0, - .gy-sm-0 { - --bs-gutter-y: 0; - } - .g-sm-1, - .gx-sm-1 { - --bs-gutter-x: 0.25rem; - } - .g-sm-1, - .gy-sm-1 { - --bs-gutter-y: 0.25rem; - } - .g-sm-2, - .gx-sm-2 { - --bs-gutter-x: 0.5rem; - } - .g-sm-2, - .gy-sm-2 { - --bs-gutter-y: 0.5rem; - } - .g-sm-3, - .gx-sm-3 { - --bs-gutter-x: 1rem; - } - .g-sm-3, - .gy-sm-3 { - --bs-gutter-y: 1rem; - } - .g-sm-4, - .gx-sm-4 { - --bs-gutter-x: 1.5rem; - } - .g-sm-4, - .gy-sm-4 { - --bs-gutter-y: 1.5rem; - } - .g-sm-5, - .gx-sm-5 { - --bs-gutter-x: 3rem; - } - .g-sm-5, - .gy-sm-5 { - --bs-gutter-y: 3rem; - } -} -@media (min-width: 768px) { - .col-md { - flex: 1 0 0%; - } - .row-cols-md-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-md-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-md-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-md-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - .row-cols-md-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-md-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-md-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } - .col-md-auto { - flex: 0 0 auto; - width: auto; - } - .col-md-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-md-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-md-3 { - flex: 0 0 auto; - width: 25%; - } - .col-md-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-md-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-md-6 { - flex: 0 0 auto; - width: 50%; - } - .col-md-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-md-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-md-9 { - flex: 0 0 auto; - width: 75%; - } - .col-md-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-md-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-md-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-md-0 { - margin-left: 0; - } - .offset-md-1 { - margin-left: 8.33333333%; - } - .offset-md-2 { - margin-left: 16.66666667%; - } - .offset-md-3 { - margin-left: 25%; - } - .offset-md-4 { - margin-left: 33.33333333%; - } - .offset-md-5 { - margin-left: 41.66666667%; - } - .offset-md-6 { - margin-left: 50%; - } - .offset-md-7 { - margin-left: 58.33333333%; - } - .offset-md-8 { - margin-left: 66.66666667%; - } - .offset-md-9 { - margin-left: 75%; - } - .offset-md-10 { - margin-left: 83.33333333%; - } - .offset-md-11 { - margin-left: 91.66666667%; - } - .g-md-0, - .gx-md-0 { - --bs-gutter-x: 0; - } - .g-md-0, - .gy-md-0 { - --bs-gutter-y: 0; - } - .g-md-1, - .gx-md-1 { - --bs-gutter-x: 0.25rem; - } - .g-md-1, - .gy-md-1 { - --bs-gutter-y: 0.25rem; - } - .g-md-2, - .gx-md-2 { - --bs-gutter-x: 0.5rem; - } - .g-md-2, - .gy-md-2 { - --bs-gutter-y: 0.5rem; - } - .g-md-3, - .gx-md-3 { - --bs-gutter-x: 1rem; - } - .g-md-3, - .gy-md-3 { - --bs-gutter-y: 1rem; - } - .g-md-4, - .gx-md-4 { - --bs-gutter-x: 1.5rem; - } - .g-md-4, - .gy-md-4 { - --bs-gutter-y: 1.5rem; - } - .g-md-5, - .gx-md-5 { - --bs-gutter-x: 3rem; - } - .g-md-5, - .gy-md-5 { - --bs-gutter-y: 3rem; - } -} -@media (min-width: 992px) { - .col-lg { - flex: 1 0 0%; - } - .row-cols-lg-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-lg-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-lg-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-lg-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - .row-cols-lg-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-lg-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-lg-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } - .col-lg-auto { - flex: 0 0 auto; - width: auto; - } - .col-lg-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-lg-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-lg-3 { - flex: 0 0 auto; - width: 25%; - } - .col-lg-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-lg-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-lg-6 { - flex: 0 0 auto; - width: 50%; - } - .col-lg-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-lg-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-lg-9 { - flex: 0 0 auto; - width: 75%; - } - .col-lg-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-lg-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-lg-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-lg-0 { - margin-left: 0; - } - .offset-lg-1 { - margin-left: 8.33333333%; - } - .offset-lg-2 { - margin-left: 16.66666667%; - } - .offset-lg-3 { - margin-left: 25%; - } - .offset-lg-4 { - margin-left: 33.33333333%; - } - .offset-lg-5 { - margin-left: 41.66666667%; - } - .offset-lg-6 { - margin-left: 50%; - } - .offset-lg-7 { - margin-left: 58.33333333%; - } - .offset-lg-8 { - margin-left: 66.66666667%; - } - .offset-lg-9 { - margin-left: 75%; - } - .offset-lg-10 { - margin-left: 83.33333333%; - } - .offset-lg-11 { - margin-left: 91.66666667%; - } - .g-lg-0, - .gx-lg-0 { - --bs-gutter-x: 0; - } - .g-lg-0, - .gy-lg-0 { - --bs-gutter-y: 0; - } - .g-lg-1, - .gx-lg-1 { - --bs-gutter-x: 0.25rem; - } - .g-lg-1, - .gy-lg-1 { - --bs-gutter-y: 0.25rem; - } - .g-lg-2, - .gx-lg-2 { - --bs-gutter-x: 0.5rem; - } - .g-lg-2, - .gy-lg-2 { - --bs-gutter-y: 0.5rem; - } - .g-lg-3, - .gx-lg-3 { - --bs-gutter-x: 1rem; - } - .g-lg-3, - .gy-lg-3 { - --bs-gutter-y: 1rem; - } - .g-lg-4, - .gx-lg-4 { - --bs-gutter-x: 1.5rem; - } - .g-lg-4, - .gy-lg-4 { - --bs-gutter-y: 1.5rem; - } - .g-lg-5, - .gx-lg-5 { - --bs-gutter-x: 3rem; - } - .g-lg-5, - .gy-lg-5 { - --bs-gutter-y: 3rem; - } -} -@media (min-width: 1200px) { - .col-xl { - flex: 1 0 0%; - } - .row-cols-xl-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-xl-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-xl-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-xl-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - .row-cols-xl-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-xl-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-xl-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } - .col-xl-auto { - flex: 0 0 auto; - width: auto; - } - .col-xl-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-xl-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-xl-3 { - flex: 0 0 auto; - width: 25%; - } - .col-xl-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-xl-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-xl-6 { - flex: 0 0 auto; - width: 50%; - } - .col-xl-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-xl-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-xl-9 { - flex: 0 0 auto; - width: 75%; - } - .col-xl-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-xl-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-xl-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-xl-0 { - margin-left: 0; - } - .offset-xl-1 { - margin-left: 8.33333333%; - } - .offset-xl-2 { - margin-left: 16.66666667%; - } - .offset-xl-3 { - margin-left: 25%; - } - .offset-xl-4 { - margin-left: 33.33333333%; - } - .offset-xl-5 { - margin-left: 41.66666667%; - } - .offset-xl-6 { - margin-left: 50%; - } - .offset-xl-7 { - margin-left: 58.33333333%; - } - .offset-xl-8 { - margin-left: 66.66666667%; - } - .offset-xl-9 { - margin-left: 75%; - } - .offset-xl-10 { - margin-left: 83.33333333%; - } - .offset-xl-11 { - margin-left: 91.66666667%; - } - .g-xl-0, - .gx-xl-0 { - --bs-gutter-x: 0; - } - .g-xl-0, - .gy-xl-0 { - --bs-gutter-y: 0; - } - .g-xl-1, - .gx-xl-1 { - --bs-gutter-x: 0.25rem; - } - .g-xl-1, - .gy-xl-1 { - --bs-gutter-y: 0.25rem; - } - .g-xl-2, - .gx-xl-2 { - --bs-gutter-x: 0.5rem; - } - .g-xl-2, - .gy-xl-2 { - --bs-gutter-y: 0.5rem; - } - .g-xl-3, - .gx-xl-3 { - --bs-gutter-x: 1rem; - } - .g-xl-3, - .gy-xl-3 { - --bs-gutter-y: 1rem; - } - .g-xl-4, - .gx-xl-4 { - --bs-gutter-x: 1.5rem; - } - .g-xl-4, - .gy-xl-4 { - --bs-gutter-y: 1.5rem; - } - .g-xl-5, - .gx-xl-5 { - --bs-gutter-x: 3rem; - } - .g-xl-5, - .gy-xl-5 { - --bs-gutter-y: 3rem; - } -} -@media (min-width: 1400px) { - .col-xxl { - flex: 1 0 0%; - } - .row-cols-xxl-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-xxl-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-xxl-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-xxl-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - .row-cols-xxl-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-xxl-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-xxl-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } - .col-xxl-auto { - flex: 0 0 auto; - width: auto; - } - .col-xxl-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-xxl-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-xxl-3 { - flex: 0 0 auto; - width: 25%; - } - .col-xxl-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-xxl-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-xxl-6 { - flex: 0 0 auto; - width: 50%; - } - .col-xxl-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-xxl-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-xxl-9 { - flex: 0 0 auto; - width: 75%; - } - .col-xxl-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-xxl-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-xxl-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-xxl-0 { - margin-left: 0; - } - .offset-xxl-1 { - margin-left: 8.33333333%; - } - .offset-xxl-2 { - margin-left: 16.66666667%; - } - .offset-xxl-3 { - margin-left: 25%; - } - .offset-xxl-4 { - margin-left: 33.33333333%; - } - .offset-xxl-5 { - margin-left: 41.66666667%; - } - .offset-xxl-6 { - margin-left: 50%; - } - .offset-xxl-7 { - margin-left: 58.33333333%; - } - .offset-xxl-8 { - margin-left: 66.66666667%; - } - .offset-xxl-9 { - margin-left: 75%; - } - .offset-xxl-10 { - margin-left: 83.33333333%; - } - .offset-xxl-11 { - margin-left: 91.66666667%; - } - .g-xxl-0, - .gx-xxl-0 { - --bs-gutter-x: 0; - } - .g-xxl-0, - .gy-xxl-0 { - --bs-gutter-y: 0; - } - .g-xxl-1, - .gx-xxl-1 { - --bs-gutter-x: 0.25rem; - } - .g-xxl-1, - .gy-xxl-1 { - --bs-gutter-y: 0.25rem; - } - .g-xxl-2, - .gx-xxl-2 { - --bs-gutter-x: 0.5rem; - } - .g-xxl-2, - .gy-xxl-2 { - --bs-gutter-y: 0.5rem; - } - .g-xxl-3, - .gx-xxl-3 { - --bs-gutter-x: 1rem; - } - .g-xxl-3, - .gy-xxl-3 { - --bs-gutter-y: 1rem; - } - .g-xxl-4, - .gx-xxl-4 { - --bs-gutter-x: 1.5rem; - } - .g-xxl-4, - .gy-xxl-4 { - --bs-gutter-y: 1.5rem; - } - .g-xxl-5, - .gx-xxl-5 { - --bs-gutter-x: 3rem; - } - .g-xxl-5, - .gy-xxl-5 { - --bs-gutter-y: 3rem; - } -} -.d-inline { - display: inline !important; -} - -.d-inline-block { - display: inline-block !important; -} - -.d-block { - display: block !important; -} - -.d-grid { - display: grid !important; -} - -.d-table { - display: table !important; -} - -.d-table-row { - display: table-row !important; -} - -.d-table-cell { - display: table-cell !important; -} - -.d-flex { - display: flex !important; -} - -.d-inline-flex { - display: inline-flex !important; -} - -.d-none { - display: none !important; -} - -.flex-fill { - flex: 1 1 auto !important; -} - -.flex-row { - flex-direction: row !important; -} - -.flex-column { - flex-direction: column !important; -} - -.flex-row-reverse { - flex-direction: row-reverse !important; -} - -.flex-column-reverse { - flex-direction: column-reverse !important; -} - -.flex-grow-0 { - flex-grow: 0 !important; -} - -.flex-grow-1 { - flex-grow: 1 !important; -} - -.flex-shrink-0 { - flex-shrink: 0 !important; -} - -.flex-shrink-1 { - flex-shrink: 1 !important; -} - -.flex-wrap { - flex-wrap: wrap !important; -} - -.flex-nowrap { - flex-wrap: nowrap !important; -} - -.flex-wrap-reverse { - flex-wrap: wrap-reverse !important; -} - -.justify-content-start { - justify-content: flex-start !important; -} - -.justify-content-end { - justify-content: flex-end !important; -} - -.justify-content-center { - justify-content: center !important; -} - -.justify-content-between { - justify-content: space-between !important; -} - -.justify-content-around { - justify-content: space-around !important; -} - -.justify-content-evenly { - justify-content: space-evenly !important; -} - -.align-items-start { - align-items: flex-start !important; -} - -.align-items-end { - align-items: flex-end !important; -} - -.align-items-center { - align-items: center !important; -} - -.align-items-baseline { - align-items: baseline !important; -} - -.align-items-stretch { - align-items: stretch !important; -} - -.align-content-start { - align-content: flex-start !important; -} - -.align-content-end { - align-content: flex-end !important; -} - -.align-content-center { - align-content: center !important; -} - -.align-content-between { - align-content: space-between !important; -} - -.align-content-around { - align-content: space-around !important; -} - -.align-content-stretch { - align-content: stretch !important; -} - -.align-self-auto { - align-self: auto !important; -} - -.align-self-start { - align-self: flex-start !important; -} - -.align-self-end { - align-self: flex-end !important; -} - -.align-self-center { - align-self: center !important; -} - -.align-self-baseline { - align-self: baseline !important; -} - -.align-self-stretch { - align-self: stretch !important; -} - -.order-first { - order: -1 !important; -} - -.order-0 { - order: 0 !important; -} - -.order-1 { - order: 1 !important; -} - -.order-2 { - order: 2 !important; -} - -.order-3 { - order: 3 !important; -} - -.order-4 { - order: 4 !important; -} - -.order-5 { - order: 5 !important; -} - -.order-last { - order: 6 !important; -} - -.m-0 { - margin: 0 !important; -} - -.m-1 { - margin: 0.25rem !important; -} - -.m-2 { - margin: 0.5rem !important; -} - -.m-3 { - margin: 1rem !important; -} - -.m-4 { - margin: 1.5rem !important; -} - -.m-5 { - margin: 3rem !important; -} - -.m-auto { - margin: auto !important; -} - -.mx-0 { - margin-right: 0 !important; - margin-left: 0 !important; -} - -.mx-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; -} - -.mx-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; -} - -.mx-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; -} - -.mx-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; -} - -.mx-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; -} - -.mx-auto { - margin-right: auto !important; - margin-left: auto !important; -} - -.my-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; -} - -.my-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; -} - -.my-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; -} - -.my-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; -} - -.my-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; -} - -.my-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; -} - -.my-auto { - margin-top: auto !important; - margin-bottom: auto !important; -} - -.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; -} - -.mt-auto { - margin-top: auto !important; -} - -.me-0 { - margin-right: 0 !important; -} - -.me-1 { - margin-right: 0.25rem !important; -} - -.me-2 { - margin-right: 0.5rem !important; -} - -.me-3 { - margin-right: 1rem !important; -} - -.me-4 { - margin-right: 1.5rem !important; -} - -.me-5 { - margin-right: 3rem !important; -} - -.me-auto { - margin-right: auto !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; -} - -.mb-auto { - margin-bottom: auto !important; -} - -.ms-0 { - margin-left: 0 !important; -} - -.ms-1 { - margin-left: 0.25rem !important; -} - -.ms-2 { - margin-left: 0.5rem !important; -} - -.ms-3 { - margin-left: 1rem !important; -} - -.ms-4 { - margin-left: 1.5rem !important; -} - -.ms-5 { - margin-left: 3rem !important; -} - -.ms-auto { - margin-left: auto !important; -} - -.p-0 { - padding: 0 !important; -} - -.p-1 { - padding: 0.25rem !important; -} - -.p-2 { - padding: 0.5rem !important; -} - -.p-3 { - padding: 1rem !important; -} - -.p-4 { - padding: 1.5rem !important; -} - -.p-5 { - padding: 3rem !important; -} - -.px-0 { - padding-right: 0 !important; - padding-left: 0 !important; -} - -.px-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; -} - -.px-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; -} - -.px-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; -} - -.px-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; -} - -.px-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; -} - -.py-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; -} - -.py-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; -} - -.py-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; -} - -.py-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; -} - -.py-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; -} - -.py-5 { - padding-top: 3rem !important; - padding-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; -} - -.pe-0 { - padding-right: 0 !important; -} - -.pe-1 { - padding-right: 0.25rem !important; -} - -.pe-2 { - padding-right: 0.5rem !important; -} - -.pe-3 { - padding-right: 1rem !important; -} - -.pe-4 { - padding-right: 1.5rem !important; -} - -.pe-5 { - padding-right: 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; -} - -.ps-0 { - padding-left: 0 !important; -} - -.ps-1 { - padding-left: 0.25rem !important; -} - -.ps-2 { - padding-left: 0.5rem !important; -} - -.ps-3 { - padding-left: 1rem !important; -} - -.ps-4 { - padding-left: 1.5rem !important; -} - -.ps-5 { - padding-left: 3rem !important; -} - -@media (min-width: 576px) { - .d-sm-inline { - display: inline !important; - } - .d-sm-inline-block { - display: inline-block !important; - } - .d-sm-block { - display: block !important; - } - .d-sm-grid { - display: grid !important; - } - .d-sm-table { - display: table !important; - } - .d-sm-table-row { - display: table-row !important; - } - .d-sm-table-cell { - display: table-cell !important; - } - .d-sm-flex { - display: flex !important; - } - .d-sm-inline-flex { - display: inline-flex !important; - } - .d-sm-none { - display: none !important; - } - .flex-sm-fill { - flex: 1 1 auto !important; - } - .flex-sm-row { - flex-direction: row !important; - } - .flex-sm-column { - flex-direction: column !important; - } - .flex-sm-row-reverse { - flex-direction: row-reverse !important; - } - .flex-sm-column-reverse { - flex-direction: column-reverse !important; - } - .flex-sm-grow-0 { - flex-grow: 0 !important; - } - .flex-sm-grow-1 { - flex-grow: 1 !important; - } - .flex-sm-shrink-0 { - flex-shrink: 0 !important; - } - .flex-sm-shrink-1 { - flex-shrink: 1 !important; - } - .flex-sm-wrap { - flex-wrap: wrap !important; - } - .flex-sm-nowrap { - flex-wrap: nowrap !important; - } - .flex-sm-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .justify-content-sm-start { - justify-content: flex-start !important; - } - .justify-content-sm-end { - justify-content: flex-end !important; - } - .justify-content-sm-center { - justify-content: center !important; - } - .justify-content-sm-between { - justify-content: space-between !important; - } - .justify-content-sm-around { - justify-content: space-around !important; - } - .justify-content-sm-evenly { - justify-content: space-evenly !important; - } - .align-items-sm-start { - align-items: flex-start !important; - } - .align-items-sm-end { - align-items: flex-end !important; - } - .align-items-sm-center { - align-items: center !important; - } - .align-items-sm-baseline { - align-items: baseline !important; - } - .align-items-sm-stretch { - align-items: stretch !important; - } - .align-content-sm-start { - align-content: flex-start !important; - } - .align-content-sm-end { - align-content: flex-end !important; - } - .align-content-sm-center { - align-content: center !important; - } - .align-content-sm-between { - align-content: space-between !important; - } - .align-content-sm-around { - align-content: space-around !important; - } - .align-content-sm-stretch { - align-content: stretch !important; - } - .align-self-sm-auto { - align-self: auto !important; - } - .align-self-sm-start { - align-self: flex-start !important; - } - .align-self-sm-end { - align-self: flex-end !important; - } - .align-self-sm-center { - align-self: center !important; - } - .align-self-sm-baseline { - align-self: baseline !important; - } - .align-self-sm-stretch { - align-self: stretch !important; - } - .order-sm-first { - order: -1 !important; - } - .order-sm-0 { - order: 0 !important; - } - .order-sm-1 { - order: 1 !important; - } - .order-sm-2 { - order: 2 !important; - } - .order-sm-3 { - order: 3 !important; - } - .order-sm-4 { - order: 4 !important; - } - .order-sm-5 { - order: 5 !important; - } - .order-sm-last { - order: 6 !important; - } - .m-sm-0 { - margin: 0 !important; - } - .m-sm-1 { - margin: 0.25rem !important; - } - .m-sm-2 { - margin: 0.5rem !important; - } - .m-sm-3 { - margin: 1rem !important; - } - .m-sm-4 { - margin: 1.5rem !important; - } - .m-sm-5 { - margin: 3rem !important; - } - .m-sm-auto { - margin: auto !important; - } - .mx-sm-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-sm-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-sm-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-sm-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-sm-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-sm-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-sm-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-sm-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-sm-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-sm-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-sm-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-sm-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-sm-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-sm-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-sm-0 { - margin-top: 0 !important; - } - .mt-sm-1 { - margin-top: 0.25rem !important; - } - .mt-sm-2 { - margin-top: 0.5rem !important; - } - .mt-sm-3 { - margin-top: 1rem !important; - } - .mt-sm-4 { - margin-top: 1.5rem !important; - } - .mt-sm-5 { - margin-top: 3rem !important; - } - .mt-sm-auto { - margin-top: auto !important; - } - .me-sm-0 { - margin-right: 0 !important; - } - .me-sm-1 { - margin-right: 0.25rem !important; - } - .me-sm-2 { - margin-right: 0.5rem !important; - } - .me-sm-3 { - margin-right: 1rem !important; - } - .me-sm-4 { - margin-right: 1.5rem !important; - } - .me-sm-5 { - margin-right: 3rem !important; - } - .me-sm-auto { - margin-right: auto !important; - } - .mb-sm-0 { - margin-bottom: 0 !important; - } - .mb-sm-1 { - margin-bottom: 0.25rem !important; - } - .mb-sm-2 { - margin-bottom: 0.5rem !important; - } - .mb-sm-3 { - margin-bottom: 1rem !important; - } - .mb-sm-4 { - margin-bottom: 1.5rem !important; - } - .mb-sm-5 { - margin-bottom: 3rem !important; - } - .mb-sm-auto { - margin-bottom: auto !important; - } - .ms-sm-0 { - margin-left: 0 !important; - } - .ms-sm-1 { - margin-left: 0.25rem !important; - } - .ms-sm-2 { - margin-left: 0.5rem !important; - } - .ms-sm-3 { - margin-left: 1rem !important; - } - .ms-sm-4 { - margin-left: 1.5rem !important; - } - .ms-sm-5 { - margin-left: 3rem !important; - } - .ms-sm-auto { - margin-left: auto !important; - } - .p-sm-0 { - padding: 0 !important; - } - .p-sm-1 { - padding: 0.25rem !important; - } - .p-sm-2 { - padding: 0.5rem !important; - } - .p-sm-3 { - padding: 1rem !important; - } - .p-sm-4 { - padding: 1.5rem !important; - } - .p-sm-5 { - padding: 3rem !important; - } - .px-sm-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-sm-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-sm-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-sm-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-sm-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-sm-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-sm-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-sm-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-sm-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-sm-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-sm-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-sm-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-sm-0 { - padding-top: 0 !important; - } - .pt-sm-1 { - padding-top: 0.25rem !important; - } - .pt-sm-2 { - padding-top: 0.5rem !important; - } - .pt-sm-3 { - padding-top: 1rem !important; - } - .pt-sm-4 { - padding-top: 1.5rem !important; - } - .pt-sm-5 { - padding-top: 3rem !important; - } - .pe-sm-0 { - padding-right: 0 !important; - } - .pe-sm-1 { - padding-right: 0.25rem !important; - } - .pe-sm-2 { - padding-right: 0.5rem !important; - } - .pe-sm-3 { - padding-right: 1rem !important; - } - .pe-sm-4 { - padding-right: 1.5rem !important; - } - .pe-sm-5 { - padding-right: 3rem !important; - } - .pb-sm-0 { - padding-bottom: 0 !important; - } - .pb-sm-1 { - padding-bottom: 0.25rem !important; - } - .pb-sm-2 { - padding-bottom: 0.5rem !important; - } - .pb-sm-3 { - padding-bottom: 1rem !important; - } - .pb-sm-4 { - padding-bottom: 1.5rem !important; - } - .pb-sm-5 { - padding-bottom: 3rem !important; - } - .ps-sm-0 { - padding-left: 0 !important; - } - .ps-sm-1 { - padding-left: 0.25rem !important; - } - .ps-sm-2 { - padding-left: 0.5rem !important; - } - .ps-sm-3 { - padding-left: 1rem !important; - } - .ps-sm-4 { - padding-left: 1.5rem !important; - } - .ps-sm-5 { - padding-left: 3rem !important; - } -} -@media (min-width: 768px) { - .d-md-inline { - display: inline !important; - } - .d-md-inline-block { - display: inline-block !important; - } - .d-md-block { - display: block !important; - } - .d-md-grid { - display: grid !important; - } - .d-md-table { - display: table !important; - } - .d-md-table-row { - display: table-row !important; - } - .d-md-table-cell { - display: table-cell !important; - } - .d-md-flex { - display: flex !important; - } - .d-md-inline-flex { - display: inline-flex !important; - } - .d-md-none { - display: none !important; - } - .flex-md-fill { - flex: 1 1 auto !important; - } - .flex-md-row { - flex-direction: row !important; - } - .flex-md-column { - flex-direction: column !important; - } - .flex-md-row-reverse { - flex-direction: row-reverse !important; - } - .flex-md-column-reverse { - flex-direction: column-reverse !important; - } - .flex-md-grow-0 { - flex-grow: 0 !important; - } - .flex-md-grow-1 { - flex-grow: 1 !important; - } - .flex-md-shrink-0 { - flex-shrink: 0 !important; - } - .flex-md-shrink-1 { - flex-shrink: 1 !important; - } - .flex-md-wrap { - flex-wrap: wrap !important; - } - .flex-md-nowrap { - flex-wrap: nowrap !important; - } - .flex-md-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .justify-content-md-start { - justify-content: flex-start !important; - } - .justify-content-md-end { - justify-content: flex-end !important; - } - .justify-content-md-center { - justify-content: center !important; - } - .justify-content-md-between { - justify-content: space-between !important; - } - .justify-content-md-around { - justify-content: space-around !important; - } - .justify-content-md-evenly { - justify-content: space-evenly !important; - } - .align-items-md-start { - align-items: flex-start !important; - } - .align-items-md-end { - align-items: flex-end !important; - } - .align-items-md-center { - align-items: center !important; - } - .align-items-md-baseline { - align-items: baseline !important; - } - .align-items-md-stretch { - align-items: stretch !important; - } - .align-content-md-start { - align-content: flex-start !important; - } - .align-content-md-end { - align-content: flex-end !important; - } - .align-content-md-center { - align-content: center !important; - } - .align-content-md-between { - align-content: space-between !important; - } - .align-content-md-around { - align-content: space-around !important; - } - .align-content-md-stretch { - align-content: stretch !important; - } - .align-self-md-auto { - align-self: auto !important; - } - .align-self-md-start { - align-self: flex-start !important; - } - .align-self-md-end { - align-self: flex-end !important; - } - .align-self-md-center { - align-self: center !important; - } - .align-self-md-baseline { - align-self: baseline !important; - } - .align-self-md-stretch { - align-self: stretch !important; - } - .order-md-first { - order: -1 !important; - } - .order-md-0 { - order: 0 !important; - } - .order-md-1 { - order: 1 !important; - } - .order-md-2 { - order: 2 !important; - } - .order-md-3 { - order: 3 !important; - } - .order-md-4 { - order: 4 !important; - } - .order-md-5 { - order: 5 !important; - } - .order-md-last { - order: 6 !important; - } - .m-md-0 { - margin: 0 !important; - } - .m-md-1 { - margin: 0.25rem !important; - } - .m-md-2 { - margin: 0.5rem !important; - } - .m-md-3 { - margin: 1rem !important; - } - .m-md-4 { - margin: 1.5rem !important; - } - .m-md-5 { - margin: 3rem !important; - } - .m-md-auto { - margin: auto !important; - } - .mx-md-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-md-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-md-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-md-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-md-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-md-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-md-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-md-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-md-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-md-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-md-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-md-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-md-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-md-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-md-0 { - margin-top: 0 !important; - } - .mt-md-1 { - margin-top: 0.25rem !important; - } - .mt-md-2 { - margin-top: 0.5rem !important; - } - .mt-md-3 { - margin-top: 1rem !important; - } - .mt-md-4 { - margin-top: 1.5rem !important; - } - .mt-md-5 { - margin-top: 3rem !important; - } - .mt-md-auto { - margin-top: auto !important; - } - .me-md-0 { - margin-right: 0 !important; - } - .me-md-1 { - margin-right: 0.25rem !important; - } - .me-md-2 { - margin-right: 0.5rem !important; - } - .me-md-3 { - margin-right: 1rem !important; - } - .me-md-4 { - margin-right: 1.5rem !important; - } - .me-md-5 { - margin-right: 3rem !important; - } - .me-md-auto { - margin-right: auto !important; - } - .mb-md-0 { - margin-bottom: 0 !important; - } - .mb-md-1 { - margin-bottom: 0.25rem !important; - } - .mb-md-2 { - margin-bottom: 0.5rem !important; - } - .mb-md-3 { - margin-bottom: 1rem !important; - } - .mb-md-4 { - margin-bottom: 1.5rem !important; - } - .mb-md-5 { - margin-bottom: 3rem !important; - } - .mb-md-auto { - margin-bottom: auto !important; - } - .ms-md-0 { - margin-left: 0 !important; - } - .ms-md-1 { - margin-left: 0.25rem !important; - } - .ms-md-2 { - margin-left: 0.5rem !important; - } - .ms-md-3 { - margin-left: 1rem !important; - } - .ms-md-4 { - margin-left: 1.5rem !important; - } - .ms-md-5 { - margin-left: 3rem !important; - } - .ms-md-auto { - margin-left: auto !important; - } - .p-md-0 { - padding: 0 !important; - } - .p-md-1 { - padding: 0.25rem !important; - } - .p-md-2 { - padding: 0.5rem !important; - } - .p-md-3 { - padding: 1rem !important; - } - .p-md-4 { - padding: 1.5rem !important; - } - .p-md-5 { - padding: 3rem !important; - } - .px-md-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-md-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-md-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-md-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-md-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-md-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-md-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-md-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-md-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-md-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-md-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-md-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-md-0 { - padding-top: 0 !important; - } - .pt-md-1 { - padding-top: 0.25rem !important; - } - .pt-md-2 { - padding-top: 0.5rem !important; - } - .pt-md-3 { - padding-top: 1rem !important; - } - .pt-md-4 { - padding-top: 1.5rem !important; - } - .pt-md-5 { - padding-top: 3rem !important; - } - .pe-md-0 { - padding-right: 0 !important; - } - .pe-md-1 { - padding-right: 0.25rem !important; - } - .pe-md-2 { - padding-right: 0.5rem !important; - } - .pe-md-3 { - padding-right: 1rem !important; - } - .pe-md-4 { - padding-right: 1.5rem !important; - } - .pe-md-5 { - padding-right: 3rem !important; - } - .pb-md-0 { - padding-bottom: 0 !important; - } - .pb-md-1 { - padding-bottom: 0.25rem !important; - } - .pb-md-2 { - padding-bottom: 0.5rem !important; - } - .pb-md-3 { - padding-bottom: 1rem !important; - } - .pb-md-4 { - padding-bottom: 1.5rem !important; - } - .pb-md-5 { - padding-bottom: 3rem !important; - } - .ps-md-0 { - padding-left: 0 !important; - } - .ps-md-1 { - padding-left: 0.25rem !important; - } - .ps-md-2 { - padding-left: 0.5rem !important; - } - .ps-md-3 { - padding-left: 1rem !important; - } - .ps-md-4 { - padding-left: 1.5rem !important; - } - .ps-md-5 { - padding-left: 3rem !important; - } -} -@media (min-width: 992px) { - .d-lg-inline { - display: inline !important; - } - .d-lg-inline-block { - display: inline-block !important; - } - .d-lg-block { - display: block !important; - } - .d-lg-grid { - display: grid !important; - } - .d-lg-table { - display: table !important; - } - .d-lg-table-row { - display: table-row !important; - } - .d-lg-table-cell { - display: table-cell !important; - } - .d-lg-flex { - display: flex !important; - } - .d-lg-inline-flex { - display: inline-flex !important; - } - .d-lg-none { - display: none !important; - } - .flex-lg-fill { - flex: 1 1 auto !important; - } - .flex-lg-row { - flex-direction: row !important; - } - .flex-lg-column { - flex-direction: column !important; - } - .flex-lg-row-reverse { - flex-direction: row-reverse !important; - } - .flex-lg-column-reverse { - flex-direction: column-reverse !important; - } - .flex-lg-grow-0 { - flex-grow: 0 !important; - } - .flex-lg-grow-1 { - flex-grow: 1 !important; - } - .flex-lg-shrink-0 { - flex-shrink: 0 !important; - } - .flex-lg-shrink-1 { - flex-shrink: 1 !important; - } - .flex-lg-wrap { - flex-wrap: wrap !important; - } - .flex-lg-nowrap { - flex-wrap: nowrap !important; - } - .flex-lg-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .justify-content-lg-start { - justify-content: flex-start !important; - } - .justify-content-lg-end { - justify-content: flex-end !important; - } - .justify-content-lg-center { - justify-content: center !important; - } - .justify-content-lg-between { - justify-content: space-between !important; - } - .justify-content-lg-around { - justify-content: space-around !important; - } - .justify-content-lg-evenly { - justify-content: space-evenly !important; - } - .align-items-lg-start { - align-items: flex-start !important; - } - .align-items-lg-end { - align-items: flex-end !important; - } - .align-items-lg-center { - align-items: center !important; - } - .align-items-lg-baseline { - align-items: baseline !important; - } - .align-items-lg-stretch { - align-items: stretch !important; - } - .align-content-lg-start { - align-content: flex-start !important; - } - .align-content-lg-end { - align-content: flex-end !important; - } - .align-content-lg-center { - align-content: center !important; - } - .align-content-lg-between { - align-content: space-between !important; - } - .align-content-lg-around { - align-content: space-around !important; - } - .align-content-lg-stretch { - align-content: stretch !important; - } - .align-self-lg-auto { - align-self: auto !important; - } - .align-self-lg-start { - align-self: flex-start !important; - } - .align-self-lg-end { - align-self: flex-end !important; - } - .align-self-lg-center { - align-self: center !important; - } - .align-self-lg-baseline { - align-self: baseline !important; - } - .align-self-lg-stretch { - align-self: stretch !important; - } - .order-lg-first { - order: -1 !important; - } - .order-lg-0 { - order: 0 !important; - } - .order-lg-1 { - order: 1 !important; - } - .order-lg-2 { - order: 2 !important; - } - .order-lg-3 { - order: 3 !important; - } - .order-lg-4 { - order: 4 !important; - } - .order-lg-5 { - order: 5 !important; - } - .order-lg-last { - order: 6 !important; - } - .m-lg-0 { - margin: 0 !important; - } - .m-lg-1 { - margin: 0.25rem !important; - } - .m-lg-2 { - margin: 0.5rem !important; - } - .m-lg-3 { - margin: 1rem !important; - } - .m-lg-4 { - margin: 1.5rem !important; - } - .m-lg-5 { - margin: 3rem !important; - } - .m-lg-auto { - margin: auto !important; - } - .mx-lg-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-lg-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-lg-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-lg-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-lg-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-lg-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-lg-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-lg-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-lg-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-lg-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-lg-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-lg-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-lg-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-lg-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-lg-0 { - margin-top: 0 !important; - } - .mt-lg-1 { - margin-top: 0.25rem !important; - } - .mt-lg-2 { - margin-top: 0.5rem !important; - } - .mt-lg-3 { - margin-top: 1rem !important; - } - .mt-lg-4 { - margin-top: 1.5rem !important; - } - .mt-lg-5 { - margin-top: 3rem !important; - } - .mt-lg-auto { - margin-top: auto !important; - } - .me-lg-0 { - margin-right: 0 !important; - } - .me-lg-1 { - margin-right: 0.25rem !important; - } - .me-lg-2 { - margin-right: 0.5rem !important; - } - .me-lg-3 { - margin-right: 1rem !important; - } - .me-lg-4 { - margin-right: 1.5rem !important; - } - .me-lg-5 { - margin-right: 3rem !important; - } - .me-lg-auto { - margin-right: auto !important; - } - .mb-lg-0 { - margin-bottom: 0 !important; - } - .mb-lg-1 { - margin-bottom: 0.25rem !important; - } - .mb-lg-2 { - margin-bottom: 0.5rem !important; - } - .mb-lg-3 { - margin-bottom: 1rem !important; - } - .mb-lg-4 { - margin-bottom: 1.5rem !important; - } - .mb-lg-5 { - margin-bottom: 3rem !important; - } - .mb-lg-auto { - margin-bottom: auto !important; - } - .ms-lg-0 { - margin-left: 0 !important; - } - .ms-lg-1 { - margin-left: 0.25rem !important; - } - .ms-lg-2 { - margin-left: 0.5rem !important; - } - .ms-lg-3 { - margin-left: 1rem !important; - } - .ms-lg-4 { - margin-left: 1.5rem !important; - } - .ms-lg-5 { - margin-left: 3rem !important; - } - .ms-lg-auto { - margin-left: auto !important; - } - .p-lg-0 { - padding: 0 !important; - } - .p-lg-1 { - padding: 0.25rem !important; - } - .p-lg-2 { - padding: 0.5rem !important; - } - .p-lg-3 { - padding: 1rem !important; - } - .p-lg-4 { - padding: 1.5rem !important; - } - .p-lg-5 { - padding: 3rem !important; - } - .px-lg-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-lg-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-lg-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-lg-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-lg-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-lg-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-lg-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-lg-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-lg-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-lg-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-lg-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-lg-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-lg-0 { - padding-top: 0 !important; - } - .pt-lg-1 { - padding-top: 0.25rem !important; - } - .pt-lg-2 { - padding-top: 0.5rem !important; - } - .pt-lg-3 { - padding-top: 1rem !important; - } - .pt-lg-4 { - padding-top: 1.5rem !important; - } - .pt-lg-5 { - padding-top: 3rem !important; - } - .pe-lg-0 { - padding-right: 0 !important; - } - .pe-lg-1 { - padding-right: 0.25rem !important; - } - .pe-lg-2 { - padding-right: 0.5rem !important; - } - .pe-lg-3 { - padding-right: 1rem !important; - } - .pe-lg-4 { - padding-right: 1.5rem !important; - } - .pe-lg-5 { - padding-right: 3rem !important; - } - .pb-lg-0 { - padding-bottom: 0 !important; - } - .pb-lg-1 { - padding-bottom: 0.25rem !important; - } - .pb-lg-2 { - padding-bottom: 0.5rem !important; - } - .pb-lg-3 { - padding-bottom: 1rem !important; - } - .pb-lg-4 { - padding-bottom: 1.5rem !important; - } - .pb-lg-5 { - padding-bottom: 3rem !important; - } - .ps-lg-0 { - padding-left: 0 !important; - } - .ps-lg-1 { - padding-left: 0.25rem !important; - } - .ps-lg-2 { - padding-left: 0.5rem !important; - } - .ps-lg-3 { - padding-left: 1rem !important; - } - .ps-lg-4 { - padding-left: 1.5rem !important; - } - .ps-lg-5 { - padding-left: 3rem !important; - } -} -@media (min-width: 1200px) { - .d-xl-inline { - display: inline !important; - } - .d-xl-inline-block { - display: inline-block !important; - } - .d-xl-block { - display: block !important; - } - .d-xl-grid { - display: grid !important; - } - .d-xl-table { - display: table !important; - } - .d-xl-table-row { - display: table-row !important; - } - .d-xl-table-cell { - display: table-cell !important; - } - .d-xl-flex { - display: flex !important; - } - .d-xl-inline-flex { - display: inline-flex !important; - } - .d-xl-none { - display: none !important; - } - .flex-xl-fill { - flex: 1 1 auto !important; - } - .flex-xl-row { - flex-direction: row !important; - } - .flex-xl-column { - flex-direction: column !important; - } - .flex-xl-row-reverse { - flex-direction: row-reverse !important; - } - .flex-xl-column-reverse { - flex-direction: column-reverse !important; - } - .flex-xl-grow-0 { - flex-grow: 0 !important; - } - .flex-xl-grow-1 { - flex-grow: 1 !important; - } - .flex-xl-shrink-0 { - flex-shrink: 0 !important; - } - .flex-xl-shrink-1 { - flex-shrink: 1 !important; - } - .flex-xl-wrap { - flex-wrap: wrap !important; - } - .flex-xl-nowrap { - flex-wrap: nowrap !important; - } - .flex-xl-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .justify-content-xl-start { - justify-content: flex-start !important; - } - .justify-content-xl-end { - justify-content: flex-end !important; - } - .justify-content-xl-center { - justify-content: center !important; - } - .justify-content-xl-between { - justify-content: space-between !important; - } - .justify-content-xl-around { - justify-content: space-around !important; - } - .justify-content-xl-evenly { - justify-content: space-evenly !important; - } - .align-items-xl-start { - align-items: flex-start !important; - } - .align-items-xl-end { - align-items: flex-end !important; - } - .align-items-xl-center { - align-items: center !important; - } - .align-items-xl-baseline { - align-items: baseline !important; - } - .align-items-xl-stretch { - align-items: stretch !important; - } - .align-content-xl-start { - align-content: flex-start !important; - } - .align-content-xl-end { - align-content: flex-end !important; - } - .align-content-xl-center { - align-content: center !important; - } - .align-content-xl-between { - align-content: space-between !important; - } - .align-content-xl-around { - align-content: space-around !important; - } - .align-content-xl-stretch { - align-content: stretch !important; - } - .align-self-xl-auto { - align-self: auto !important; - } - .align-self-xl-start { - align-self: flex-start !important; - } - .align-self-xl-end { - align-self: flex-end !important; - } - .align-self-xl-center { - align-self: center !important; - } - .align-self-xl-baseline { - align-self: baseline !important; - } - .align-self-xl-stretch { - align-self: stretch !important; - } - .order-xl-first { - order: -1 !important; - } - .order-xl-0 { - order: 0 !important; - } - .order-xl-1 { - order: 1 !important; - } - .order-xl-2 { - order: 2 !important; - } - .order-xl-3 { - order: 3 !important; - } - .order-xl-4 { - order: 4 !important; - } - .order-xl-5 { - order: 5 !important; - } - .order-xl-last { - order: 6 !important; - } - .m-xl-0 { - margin: 0 !important; - } - .m-xl-1 { - margin: 0.25rem !important; - } - .m-xl-2 { - margin: 0.5rem !important; - } - .m-xl-3 { - margin: 1rem !important; - } - .m-xl-4 { - margin: 1.5rem !important; - } - .m-xl-5 { - margin: 3rem !important; - } - .m-xl-auto { - margin: auto !important; - } - .mx-xl-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-xl-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-xl-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-xl-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-xl-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-xl-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-xl-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-xl-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-xl-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-xl-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-xl-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-xl-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-xl-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-xl-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-xl-0 { - margin-top: 0 !important; - } - .mt-xl-1 { - margin-top: 0.25rem !important; - } - .mt-xl-2 { - margin-top: 0.5rem !important; - } - .mt-xl-3 { - margin-top: 1rem !important; - } - .mt-xl-4 { - margin-top: 1.5rem !important; - } - .mt-xl-5 { - margin-top: 3rem !important; - } - .mt-xl-auto { - margin-top: auto !important; - } - .me-xl-0 { - margin-right: 0 !important; - } - .me-xl-1 { - margin-right: 0.25rem !important; - } - .me-xl-2 { - margin-right: 0.5rem !important; - } - .me-xl-3 { - margin-right: 1rem !important; - } - .me-xl-4 { - margin-right: 1.5rem !important; - } - .me-xl-5 { - margin-right: 3rem !important; - } - .me-xl-auto { - margin-right: auto !important; - } - .mb-xl-0 { - margin-bottom: 0 !important; - } - .mb-xl-1 { - margin-bottom: 0.25rem !important; - } - .mb-xl-2 { - margin-bottom: 0.5rem !important; - } - .mb-xl-3 { - margin-bottom: 1rem !important; - } - .mb-xl-4 { - margin-bottom: 1.5rem !important; - } - .mb-xl-5 { - margin-bottom: 3rem !important; - } - .mb-xl-auto { - margin-bottom: auto !important; - } - .ms-xl-0 { - margin-left: 0 !important; - } - .ms-xl-1 { - margin-left: 0.25rem !important; - } - .ms-xl-2 { - margin-left: 0.5rem !important; - } - .ms-xl-3 { - margin-left: 1rem !important; - } - .ms-xl-4 { - margin-left: 1.5rem !important; - } - .ms-xl-5 { - margin-left: 3rem !important; - } - .ms-xl-auto { - margin-left: auto !important; - } - .p-xl-0 { - padding: 0 !important; - } - .p-xl-1 { - padding: 0.25rem !important; - } - .p-xl-2 { - padding: 0.5rem !important; - } - .p-xl-3 { - padding: 1rem !important; - } - .p-xl-4 { - padding: 1.5rem !important; - } - .p-xl-5 { - padding: 3rem !important; - } - .px-xl-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-xl-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-xl-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-xl-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-xl-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-xl-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-xl-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-xl-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-xl-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-xl-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-xl-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-xl-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-xl-0 { - padding-top: 0 !important; - } - .pt-xl-1 { - padding-top: 0.25rem !important; - } - .pt-xl-2 { - padding-top: 0.5rem !important; - } - .pt-xl-3 { - padding-top: 1rem !important; - } - .pt-xl-4 { - padding-top: 1.5rem !important; - } - .pt-xl-5 { - padding-top: 3rem !important; - } - .pe-xl-0 { - padding-right: 0 !important; - } - .pe-xl-1 { - padding-right: 0.25rem !important; - } - .pe-xl-2 { - padding-right: 0.5rem !important; - } - .pe-xl-3 { - padding-right: 1rem !important; - } - .pe-xl-4 { - padding-right: 1.5rem !important; - } - .pe-xl-5 { - padding-right: 3rem !important; - } - .pb-xl-0 { - padding-bottom: 0 !important; - } - .pb-xl-1 { - padding-bottom: 0.25rem !important; - } - .pb-xl-2 { - padding-bottom: 0.5rem !important; - } - .pb-xl-3 { - padding-bottom: 1rem !important; - } - .pb-xl-4 { - padding-bottom: 1.5rem !important; - } - .pb-xl-5 { - padding-bottom: 3rem !important; - } - .ps-xl-0 { - padding-left: 0 !important; - } - .ps-xl-1 { - padding-left: 0.25rem !important; - } - .ps-xl-2 { - padding-left: 0.5rem !important; - } - .ps-xl-3 { - padding-left: 1rem !important; - } - .ps-xl-4 { - padding-left: 1.5rem !important; - } - .ps-xl-5 { - padding-left: 3rem !important; - } -} -@media (min-width: 1400px) { - .d-xxl-inline { - display: inline !important; - } - .d-xxl-inline-block { - display: inline-block !important; - } - .d-xxl-block { - display: block !important; - } - .d-xxl-grid { - display: grid !important; - } - .d-xxl-table { - display: table !important; - } - .d-xxl-table-row { - display: table-row !important; - } - .d-xxl-table-cell { - display: table-cell !important; - } - .d-xxl-flex { - display: flex !important; - } - .d-xxl-inline-flex { - display: inline-flex !important; - } - .d-xxl-none { - display: none !important; - } - .flex-xxl-fill { - flex: 1 1 auto !important; - } - .flex-xxl-row { - flex-direction: row !important; - } - .flex-xxl-column { - flex-direction: column !important; - } - .flex-xxl-row-reverse { - flex-direction: row-reverse !important; - } - .flex-xxl-column-reverse { - flex-direction: column-reverse !important; - } - .flex-xxl-grow-0 { - flex-grow: 0 !important; - } - .flex-xxl-grow-1 { - flex-grow: 1 !important; - } - .flex-xxl-shrink-0 { - flex-shrink: 0 !important; - } - .flex-xxl-shrink-1 { - flex-shrink: 1 !important; - } - .flex-xxl-wrap { - flex-wrap: wrap !important; - } - .flex-xxl-nowrap { - flex-wrap: nowrap !important; - } - .flex-xxl-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .justify-content-xxl-start { - justify-content: flex-start !important; - } - .justify-content-xxl-end { - justify-content: flex-end !important; - } - .justify-content-xxl-center { - justify-content: center !important; - } - .justify-content-xxl-between { - justify-content: space-between !important; - } - .justify-content-xxl-around { - justify-content: space-around !important; - } - .justify-content-xxl-evenly { - justify-content: space-evenly !important; - } - .align-items-xxl-start { - align-items: flex-start !important; - } - .align-items-xxl-end { - align-items: flex-end !important; - } - .align-items-xxl-center { - align-items: center !important; - } - .align-items-xxl-baseline { - align-items: baseline !important; - } - .align-items-xxl-stretch { - align-items: stretch !important; - } - .align-content-xxl-start { - align-content: flex-start !important; - } - .align-content-xxl-end { - align-content: flex-end !important; - } - .align-content-xxl-center { - align-content: center !important; - } - .align-content-xxl-between { - align-content: space-between !important; - } - .align-content-xxl-around { - align-content: space-around !important; - } - .align-content-xxl-stretch { - align-content: stretch !important; - } - .align-self-xxl-auto { - align-self: auto !important; - } - .align-self-xxl-start { - align-self: flex-start !important; - } - .align-self-xxl-end { - align-self: flex-end !important; - } - .align-self-xxl-center { - align-self: center !important; - } - .align-self-xxl-baseline { - align-self: baseline !important; - } - .align-self-xxl-stretch { - align-self: stretch !important; - } - .order-xxl-first { - order: -1 !important; - } - .order-xxl-0 { - order: 0 !important; - } - .order-xxl-1 { - order: 1 !important; - } - .order-xxl-2 { - order: 2 !important; - } - .order-xxl-3 { - order: 3 !important; - } - .order-xxl-4 { - order: 4 !important; - } - .order-xxl-5 { - order: 5 !important; - } - .order-xxl-last { - order: 6 !important; - } - .m-xxl-0 { - margin: 0 !important; - } - .m-xxl-1 { - margin: 0.25rem !important; - } - .m-xxl-2 { - margin: 0.5rem !important; - } - .m-xxl-3 { - margin: 1rem !important; - } - .m-xxl-4 { - margin: 1.5rem !important; - } - .m-xxl-5 { - margin: 3rem !important; - } - .m-xxl-auto { - margin: auto !important; - } - .mx-xxl-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-xxl-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-xxl-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-xxl-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-xxl-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-xxl-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-xxl-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-xxl-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-xxl-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-xxl-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-xxl-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-xxl-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-xxl-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-xxl-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-xxl-0 { - margin-top: 0 !important; - } - .mt-xxl-1 { - margin-top: 0.25rem !important; - } - .mt-xxl-2 { - margin-top: 0.5rem !important; - } - .mt-xxl-3 { - margin-top: 1rem !important; - } - .mt-xxl-4 { - margin-top: 1.5rem !important; - } - .mt-xxl-5 { - margin-top: 3rem !important; - } - .mt-xxl-auto { - margin-top: auto !important; - } - .me-xxl-0 { - margin-right: 0 !important; - } - .me-xxl-1 { - margin-right: 0.25rem !important; - } - .me-xxl-2 { - margin-right: 0.5rem !important; - } - .me-xxl-3 { - margin-right: 1rem !important; - } - .me-xxl-4 { - margin-right: 1.5rem !important; - } - .me-xxl-5 { - margin-right: 3rem !important; - } - .me-xxl-auto { - margin-right: auto !important; - } - .mb-xxl-0 { - margin-bottom: 0 !important; - } - .mb-xxl-1 { - margin-bottom: 0.25rem !important; - } - .mb-xxl-2 { - margin-bottom: 0.5rem !important; - } - .mb-xxl-3 { - margin-bottom: 1rem !important; - } - .mb-xxl-4 { - margin-bottom: 1.5rem !important; - } - .mb-xxl-5 { - margin-bottom: 3rem !important; - } - .mb-xxl-auto { - margin-bottom: auto !important; - } - .ms-xxl-0 { - margin-left: 0 !important; - } - .ms-xxl-1 { - margin-left: 0.25rem !important; - } - .ms-xxl-2 { - margin-left: 0.5rem !important; - } - .ms-xxl-3 { - margin-left: 1rem !important; - } - .ms-xxl-4 { - margin-left: 1.5rem !important; - } - .ms-xxl-5 { - margin-left: 3rem !important; - } - .ms-xxl-auto { - margin-left: auto !important; - } - .p-xxl-0 { - padding: 0 !important; - } - .p-xxl-1 { - padding: 0.25rem !important; - } - .p-xxl-2 { - padding: 0.5rem !important; - } - .p-xxl-3 { - padding: 1rem !important; - } - .p-xxl-4 { - padding: 1.5rem !important; - } - .p-xxl-5 { - padding: 3rem !important; - } - .px-xxl-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-xxl-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-xxl-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-xxl-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-xxl-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-xxl-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-xxl-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-xxl-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-xxl-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-xxl-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-xxl-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-xxl-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-xxl-0 { - padding-top: 0 !important; - } - .pt-xxl-1 { - padding-top: 0.25rem !important; - } - .pt-xxl-2 { - padding-top: 0.5rem !important; - } - .pt-xxl-3 { - padding-top: 1rem !important; - } - .pt-xxl-4 { - padding-top: 1.5rem !important; - } - .pt-xxl-5 { - padding-top: 3rem !important; - } - .pe-xxl-0 { - padding-right: 0 !important; - } - .pe-xxl-1 { - padding-right: 0.25rem !important; - } - .pe-xxl-2 { - padding-right: 0.5rem !important; - } - .pe-xxl-3 { - padding-right: 1rem !important; - } - .pe-xxl-4 { - padding-right: 1.5rem !important; - } - .pe-xxl-5 { - padding-right: 3rem !important; - } - .pb-xxl-0 { - padding-bottom: 0 !important; - } - .pb-xxl-1 { - padding-bottom: 0.25rem !important; - } - .pb-xxl-2 { - padding-bottom: 0.5rem !important; - } - .pb-xxl-3 { - padding-bottom: 1rem !important; - } - .pb-xxl-4 { - padding-bottom: 1.5rem !important; - } - .pb-xxl-5 { - padding-bottom: 3rem !important; - } - .ps-xxl-0 { - padding-left: 0 !important; - } - .ps-xxl-1 { - padding-left: 0.25rem !important; - } - .ps-xxl-2 { - padding-left: 0.5rem !important; - } - .ps-xxl-3 { - padding-left: 1rem !important; - } - .ps-xxl-4 { - padding-left: 1.5rem !important; - } - .ps-xxl-5 { - padding-left: 3rem !important; - } -} -@media print { - .d-print-inline { - display: inline !important; - } - .d-print-inline-block { - display: inline-block !important; - } - .d-print-block { - display: block !important; - } - .d-print-grid { - display: grid !important; - } - .d-print-table { - display: table !important; - } - .d-print-table-row { - display: table-row !important; - } - .d-print-table-cell { - display: table-cell !important; - } - .d-print-flex { - display: flex !important; - } - .d-print-inline-flex { - display: inline-flex !important; - } - .d-print-none { - display: none !important; - } -} - -/*# sourceMappingURL=bootstrap-grid.css.map */ diff --git a/assets/css/bootstrap-grid.css.map b/assets/css/bootstrap-grid.css.map deleted file mode 100644 index ab69ccdda..000000000 --- a/assets/css/bootstrap-grid.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","bootstrap-grid.css","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_variables.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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IGI;IAOI,0BAAA;EPwrDV;EO/rDM;IAOI,gCAAA;EP2rDV;EOlsDM;IAOI,yBAAA;EP8rDV;EOrsDM;IAOI,wBAAA;EPisDV;EOxsDM;IAOI,yBAAA;EPosDV;EO3sDM;IAOI,6BAAA;EPusDV;EO9sDM;IAOI,8BAAA;EP0sDV;EOjtDM;IAOI,wBAAA;EP6sDV;EOptDM;IAOI,+BAAA;EPgtDV;EOvtDM;IAOI,wBAAA;EPmtDV;EO1tDM;IAOI,yBAAA;EPstDV;EO7tDM;IAOI,8BAAA;EPytDV;EOhuDM;IAOI,iCAAA;EP4tDV;EOnuDM;IAOI,sCAAA;EP+tDV;EOtuDM;IAOI,yCAAA;EPkuDV;EOzuDM;IAOI,uBAAA;EPquDV;EO5uDM;IAOI,uBAAA;EPwuDV;EO/uDM;IAOI,yBAAA;EP2uDV;EOlvDM;IAOI,yBAAA;EP8uDV;EOrvDM;IAOI,0BAAA;EPivDV;EOxvDM;IAOI,4BAAA;EPovDV;EO3vDM;IAOI,kCAAA;EPuvDV;EO9vDM;IAOI,sCAAA;EP0vDV;EOjwDM;IAOI,oCAAA;EP6vDV;EOpwDM;IAOI,kCAAA;EPgwDV;EOvwDM;IAOI,yCAAA;EPmwDV;EO1wDM;IAOI,wCAAA;EPswDV;EO7wDM;IAOI,wCAAA;EPywDV;EOhxDM;IAOI,kCAAA;EP4wDV;EOnxDM;IAOI,gCAAA;EP+wDV;EOtxDM;IAOI,8BAAA;EPkxDV;EOzxDM;IAOI,gCAAA;EPqxDV;EO5xDM;IAOI,+BAAA;EPwxDV;EO/xDM;IAOI,oCAAA;EP2xDV;EOlyDM;IAOI,kCAAA;EP8xDV;EOryDM;IAOI,gCAAA;EPiyDV;EOxyDM;IAOI,uCAAA;EPoyDV;EO3yDM;IAOI,sCAAA;EPuyDV;EO9yDM;IAOI,iCAAA;EP0yDV;EOjzDM;IAOI,2BAAA;EP6yDV;EOpzDM;IAOI,iCAAA;EPgzDV;EOvzDM;IAOI,+BAAA;EPmzDV;EO1zDM;IAOI,6BAAA;EPszDV;EO7zDM;IAOI,+BAAA;EPyzDV;EOh0DM;IAOI,8BAAA;EP4zDV;EOn0DM;IAOI,oBAAA;EP+zDV;EOt0DM;IAOI,mBAAA;EPk0DV;EOz0DM;IAOI,mBAAA;EPq0DV;EO5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;EP8lEV;EOrmEM;IAOI,kCAAA;EPimEV;EOxmEM;IAOI,iCAAA;EPomEV;EO3mEM;IAOI,+BAAA;EPumEV;EO9mEM;IAOI,iCAAA;EP0mEV;EOjnEM;IAOI,+BAAA;EP6mEV;EOpnEM;IAOI,0BAAA;EPgnEV;EOvnEM;IAOI,gCAAA;EPmnEV;EO1nEM;IAOI,+BAAA;EPsnEV;EO7nEM;IAOI,6BAAA;EPynEV;EOhoEM;IAOI,+BAAA;EP4nEV;EOnoEM;IAOI,6BAAA;EP+nEV;AACF;AG1oEI;EIGI;IAOI,0BAAA;EPooEV;EO3oEM;IAOI,gCAAA;EPuoEV;EO9oEM;IAOI,yBAAA;EP0oEV;EOjpEM;IAOI,wBAAA;EP6oEV;EOppEM;IAOI,yBAAA;EPgpEV;EOvpEM;IAOI,6BAAA;EPmpEV;EO1pEM;IAOI,8BAAA;EPspEV;EO7pEM;IAOI,wBAAA;EPypEV;EOhqEM;IAOI,+BAAA;EP4pEV;EOnqEM;IAOI,wBAAA;EP+pEV;EOtqEM;IAOI,yBAAA;EPkqEV;EOzqEM;IAOI,8BAAA;EPqqEV;EO5qEM;IAOI,iCAAA;EPwqEV;EO/qEM;IAOI,sCAAA;EP2qEV;EOlrEM;IAOI,yCAAA;EP8qEV;EOrrEM;IAOI,uBAAA;EPirEV;EOxrEM;IAOI,uBAAA;EPorEV;EO3rEM;IAOI,yBAAA;EPurEV;EO9rEM;IAOI,yBAAA;EP0rEV;EOjsEM;IAOI,0BAAA;EP6rEV;EOpsEM;IAOI,4BAAA;EPgsEV;EOvsEM;IAOI,kCAAA;EPmsEV;EO1sEM;IAOI,sCAAA;EPssEV;EO7sEM;IAOI,oCAAA;EPysEV;EOhtEM;IAOI,kCAAA;EP4sEV;EOntEM;IAOI,yCAAA;EP+sEV;EOttEM;IAOI,wCAAA;EPktEV;EOztEM;IAOI,wCAAA;EPqtEV;EO5tEM;IAOI,kCAAA;EPwtEV;EO/tEM;IAOI,gCAAA;EP2tEV;EOluEM;IAOI,8BAAA;EP8tEV;EOruEM;IAOI,gCAAA;EPiuEV;EOxuEM;IAOI,+BAAA;EPouEV;EO3uEM;IAOI,oCAAA;EPuuEV;EO9uEM;IAOI,kCAAA;EP0uEV;EOjvEM;IAOI,gCAAA;EP6uEV;EOpvEM;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gFV;EO7gFM;IAOI,+BAAA;EPygFV;EOhhFM;IAOI,8BAAA;EP4gFV;EOnhFM;IAOI,4BAAA;EP+gFV;EOthFM;IAOI,8BAAA;EPkhFV;EOzhFM;IAOI,4BAAA;EPqhFV;EO5hFM;IAOI,2BAAA;EPwhFV;EO/hFM;IAOI,iCAAA;EP2hFV;EOliFM;IAOI,gCAAA;EP8hFV;EOriFM;IAOI,8BAAA;EPiiFV;EOxiFM;IAOI,gCAAA;EPoiFV;EO3iFM;IAOI,8BAAA;EPuiFV;EO9iFM;IAOI,4BAAA;EP0iFV;EOjjFM;IAOI,kCAAA;EP6iFV;EOpjFM;IAOI,iCAAA;EPgjFV;EOvjFM;IAOI,+BAAA;EPmjFV;EO1jFM;IAOI,iCAAA;EPsjFV;EO7jFM;IAOI,+BAAA;EPyjFV;EOhkFM;IAOI,0BAAA;EP4jFV;EOnkFM;IAOI,gCAAA;EP+jFV;EOtkFM;IAOI,+BAAA;EPkkFV;EOzkFM;IAOI,6BAAA;EPqkFV;EO5kFM;IAOI,+BAAA;EPwkFV;EO/kFM;IAOI,6BAAA;EP2kFV;AACF;AGtlFI;EIGI;IAOI,0BAAA;EPglFV;EOvlFM;IAOI,gCAAA;EPmlFV;EO1lFM;IAOI,yBAAA;EPslFV;EO7lFM;IAOI,wBAAA;EPylFV;EOhmFM;IAOI,yBAAA;EP4lFV;EOnmFM;IAOI,6BAAA;EP+lFV;EOtmFM;IAOI,8BAAA;EPkmFV;EOzmFM;IAOI,wBAAA;EPqmFV;EO5mFM;IAOI,+BAAA;EPwmFV;EO/mFM;IAOI,wBAAA;EP2mFV;EOlnFM;IAOI,yBAAA;EP8mFV;EOrnFM;IAOI,8BAAA;EPinFV;EOxnFM;IAOI,iCAAA;EPonFV;EO3nFM;IAOI,sCAAA;EPunFV;EO9nFM;IAOI,yCAAA;EP0nFV;EOjoFM;IAOI,uBAAA;EP6nFV;EOpoFM;IAOI,uBAAA;EPgoFV;EOvoFM;IAOI,yBAAA;EPmoFV;EO1oFM;IAOI,yBAAA;EPsoFV;EO7oFM;IAOI,0BAAA;EPyoFV;EOhpFM;IAOI,4BAAA;EP4oFV;EOnpFM;IAOI,kCAAA;EP+oFV;EOtpFM;IAOI,sCAAA;EPkpFV;EOzpFM;IAOI,oCAAA;EPqpFV;EO5pFM;IAOI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AA;EPgkGV;EOvkGM;IAOI,sCAAA;EPmkGV;EO1kGM;IAOI,yCAAA;EPskGV;EO7kGM;IAOI,uBAAA;EPykGV;EOhlGM;IAOI,uBAAA;EP4kGV;EOnlGM;IAOI,yBAAA;EP+kGV;EOtlGM;IAOI,yBAAA;EPklGV;EOzlGM;IAOI,0BAAA;EPqlGV;EO5lGM;IAOI,4BAAA;EPwlGV;EO/lGM;IAOI,kCAAA;EP2lGV;EOlmGM;IAOI,sCAAA;EP8lGV;EOrmGM;IAOI,oCAAA;EPimGV;EOxmGM;IAOI,kCAAA;EPomGV;EO3mGM;IAOI,yCAAA;EPumGV;EO9mGM;IAOI,wCAAA;EP0mGV;EOjnGM;IAOI,wCAAA;EP6mGV;EOpnGM;IAOI,kCAAA;EPgnGV;EOvnGM;IAOI,gCAAA;EPmnGV;EO1nGM;IAOI,8BAAA;EPsnGV;EO7nGM;IAOI,gCAAA;EPynGV;EOhoGM;IAOI,+BAAA;EP4nGV;EOnoGM;IAOI,oCAAA;EP+nGV;EOtoGM;IAOI,kCAAA;EPkoGV;EOzoGM;IAOI,gCAAA;EPqoGV;EO5oGM;IAOI,uCAAA;EPwoGV;EO/oGM;IAOI,sCAAA;EP2oGV;EOlpGM;IAOI,iCAAA;EP8oGV;EOrpGM;IAOI,2BAAA;EPipGV;EOxpGM;IAOI,iCAAA;EPopGV;EO3pGM;IAOI,+BAAA;EPupGV;EO9pGM;IAOI,6BAAA;EP0pGV;EOjqGM;IAOI,+BAAA;EP6pGV;EOpqGM;IAOI,8BAAA;EPgqGV;EOvqGM;IAOI,oBAAA;EPmqGV;EO1qGM;IAOI,mBAAA;EPsqGV;EO7qGM;IAOI,mBAAA;EPyqGV;EOhrGM;IAOI,mBAAA;EP4qGV;EOnrGM;IAOI,mBAAA;EP+qGV;EOtrGM;IAOI,mBAAA;EPkrGV;EOzrGM;IAOI,mBAAA;EPqrGV;EO5rGM;IAOI,mBAAA;EPwrGV;EO/rGM;IAOI,oBAAA;EP2rGV;EOlsGM;IAOI,0BAAA;EP8rGV;EOrsGM;IAOI,yBAAA;EPisGV;EOxsGM;IAOI,uBAAA;EPosGV;EO3sGM;IAOI,yBAAA;EPusGV;EO9sGM;IAOI,uBAAA;EP0sGV;EOjtGM;IAOI,uBAAA;EP6sGV;EOptGM;IAOI,0BA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Pw+GV;EO/+GM;IAOI,gCAAA;EP2+GV;EOl/GM;IAOI,yBAAA;EP8+GV;EOr/GM;IAOI,wBAAA;EPi/GV;EOx/GM;IAOI,yBAAA;EPo/GV;EO3/GM;IAOI,6BAAA;EPu/GV;EO9/GM;IAOI,8BAAA;EP0/GV;EOjgHM;IAOI,wBAAA;EP6/GV;EOpgHM;IAOI,+BAAA;EPggHV;EOvgHM;IAOI,wBAAA;EPmgHV;EO1gHM;IAOI,yBAAA;EPsgHV;EO7gHM;IAOI,8BAAA;EPygHV;EOhhHM;IAOI,iCAAA;EP4gHV;EOnhHM;IAOI,sCAAA;EP+gHV;EOthHM;IAOI,yCAAA;EPkhHV;EOzhHM;IAOI,uBAAA;EPqhHV;EO5hHM;IAOI,uBAAA;EPwhHV;EO/hHM;IAOI,yBAAA;EP2hHV;EOliHM;IAOI,yBAAA;EP8hHV;EOriHM;IAOI,0BAAA;EPiiHV;EOxiHM;IAOI,4BAAA;EPoiHV;EO3iHM;IAOI,kCAAA;EPuiHV;EO9iHM;IAOI,sCAAA;EP0iHV;EOjjHM;IAOI,oCAAA;EP6iHV;EOpjHM;IAOI,kCAAA;EPgjHV;EOvjHM;IAOI,yCAAA;EPmjHV;EO1jHM;IAOI,wCAAA;EPsjHV;EO7jHM;IAOI,wCAAA;EPyjHV;EOhkHM;IAOI,kCAAA;EP4jHV;EOnkHM;IAOI,gCAAA;EP+jHV;EOtkHM;IAOI,8BAAA;EPkkHV;EOzkHM;IAOI,gCAAA;EPqkHV;EO5kHM;IAOI,+BAAA;EPwkHV;EO/kHM;IAOI,oCAAA;EP2kHV;EOllHM;IAOI,kCAAA;EP8kHV;EOrlHM;IAOI,gCAAA;EPilHV;EOxlHM;IAOI,uCAAA;EPolHV;EO3lHM;IAOI,sCAAA;EPulHV;EO9lHM;IAOI,iCAAA;EP0lHV;EOjmHM;IAOI,2BAAA;EP6lHV;EOpmHM;IAOI,iCAAA;EPgmHV;EOvmHM;IAOI,+BAAA;EPmmHV;EO1mHM;IAOI,6BAAA;EPsmHV;EO7mHM;IAOI,+BAAA;EPymHV;EOhnHM;IAOI,8BAAA;EP4mHV;EOnnHM;IAOI,oBAAA;EP+mHV;EOtnHM;IAOI,mBAAA;EPknHV;EOznHM;IAOI,mBAAA;EPqnHV;EO5nHM;IAOI,mBAAA;E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","file":"bootstrap-grid.css","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","/*!\n * Bootstrap Grid v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n box-sizing: border-box;\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 768px) {\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 992px) {\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1200px) {\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1400px) {\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n$body-text-align: null !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-2xl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba($black, .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: $gray-600 !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: $border-width !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}body-color) !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: $border-width !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: $border-width !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: $body-bg !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: $gray-200 !default;\n$input-disabled-border-color: null !default;\n\n$input-color: $body-color !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: 1px solid rgba($black, .25) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $gray-200 !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: $gray-300 !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: $gray-500 !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: $input-group-addon-bg !default;\n$form-file-button-hover-bg: shade-color($form-file-button-bg, 5%) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba($black, .55) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: shade-color($dropdown-link-color, 10%) !default;\n$dropdown-link-hover-bg: $gray-200 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: $white !default;\n$pagination-border-radius: $border-radius !default;\n$pagination-border-width: $border-width !default;\n$pagination-margin-start: ($pagination-border-width * -1) !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: $gray-200 !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-border-width: $border-width !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: $border-radius !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: $body-color !default; // Sass variable because of $accordion-button-icon\n$accordion-bg: $body-bg !default;\n$accordion-border-width: $border-width !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: $border-radius !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: $accordion-color !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: tint-color($component-active-bg, 90%) !default;\n$accordion-button-active-color: shade-color($primary, 10%) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $accordion-button-color !default;\n$accordion-icon-active-color: $accordion-button-active-color !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: shade-color($popover-bg, 6%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: $border-width !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: $border-radius !default;\n$toast-box-shadow: $box-shadow !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba($black, .05) !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: $box-shadow-inset !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: $gray-900 !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n$list-group-item-bg-scale: -80% !default;\n$list-group-item-color-scale: 40% !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: $box-shadow-sm !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: $gray-600 !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: $modal-content-bg !default;\n$offcanvas-color: $modal-content-color !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file diff --git a/assets/css/bootstrap-grid.min.css b/assets/css/bootstrap-grid.min.css deleted file mode 100644 index 449969ac3..000000000 --- a/assets/css/bootstrap-grid.min.css +++ /dev/null @@ -1,3955 +0,0 @@ -/*! - * Bootstrap Grid v5.2.3 (https://getbootstrap.com/) - * Copyright 2011-2022 The Bootstrap Authors - * Copyright 2011-2022 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */ -:root { - --bs-blue: #0d6efd; - --bs-indigo: #6610f2; - --bs-purple: #6f42c1; - --bs-pink: #d63384; - --bs-red: #dc3545; - --bs-orange: #fd7e14; - --bs-yellow: #ffc107; - --bs-green: #198754; - --bs-teal: #20c997; - --bs-cyan: #0dcaf0; - --bs-black: #000; - --bs-white: #fff; - --bs-gray: #6c757d; - --bs-gray-dark: #343a40; - --bs-gray-100: #f8f9fa; - --bs-gray-200: #e9ecef; - --bs-gray-300: #dee2e6; - --bs-gray-400: #ced4da; - --bs-gray-500: #adb5bd; - --bs-gray-600: #6c757d; - --bs-gray-700: #495057; - --bs-gray-800: #343a40; - --bs-gray-900: #212529; - --bs-primary: #0d6efd; - --bs-secondary: #6c757d; - --bs-success: #198754; - --bs-info: #0dcaf0; - --bs-warning: #ffc107; - --bs-danger: #dc3545; - --bs-light: #f8f9fa; - --bs-dark: #212529; - --bs-primary-rgb: 13, 110, 253; - --bs-secondary-rgb: 108, 117, 125; - --bs-success-rgb: 25, 135, 84; - --bs-info-rgb: 13, 202, 240; - --bs-warning-rgb: 255, 193, 7; - --bs-danger-rgb: 220, 53, 69; - --bs-light-rgb: 248, 249, 250; - --bs-dark-rgb: 33, 37, 41; - --bs-white-rgb: 255, 255, 255; - --bs-black-rgb: 0, 0, 0; - --bs-body-color-rgb: 33, 37, 41; - --bs-body-bg-rgb: 255, 255, 255; - --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, - "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, - "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", - "Noto Color Emoji"; - --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, - "Liberation Mono", "Courier New", monospace; - --bs-gradient: linear-gradient( - 180deg, - rgba(255, 255, 255, 0.15), - rgba(255, 255, 255, 0) - ); - --bs-body-font-family: var(--bs-font-sans-serif); - --bs-body-font-size: 1rem; - --bs-body-font-weight: 400; - --bs-body-line-height: 1.5; - --bs-body-color: #212529; - --bs-body-bg: #fff; - --bs-border-width: 1px; - --bs-border-style: solid; - --bs-border-color: #dee2e6; - --bs-border-color-translucent: rgba(0, 0, 0, 0.175); - --bs-border-radius: 0.375rem; - --bs-border-radius-sm: 0.25rem; - --bs-border-radius-lg: 0.5rem; - --bs-border-radius-xl: 1rem; - --bs-border-radius-2xl: 2rem; - --bs-border-radius-pill: 50rem; - --bs-link-color: #0d6efd; - --bs-link-hover-color: #0a58ca; - --bs-code-color: #d63384; - --bs-highlight-bg: #fff3cd; -} -.container, -.container-fluid, -.container-lg, -.container-md, -.container-sm, -.container-xl, -.container-xxl { - --bs-gutter-x: 1.5rem; - --bs-gutter-y: 0; - width: 100%; - padding-right: calc(var(--bs-gutter-x) * 0.5); - padding-left: calc(var(--bs-gutter-x) * 0.5); - margin-right: auto; - margin-left: auto; -} -@media (min-width: 576px) { - .container, - .container-sm { - max-width: 540px; - } -} -@media (min-width: 768px) { - .container, - .container-md, - .container-sm { - max-width: 720px; - } -} -@media (min-width: 992px) { - .container, - .container-lg, - .container-md, - .container-sm { - max-width: 960px; - } -} -@media (min-width: 1200px) { - .container, - .container-lg, - .container-md, - .container-sm, - .container-xl { - max-width: 1140px; - } -} -@media (min-width: 1400px) { - .container, - .container-lg, - .container-md, - .container-sm, - .container-xl, - .container-xxl { - max-width: 1320px; - } -} -.row { - --bs-gutter-x: 1.5rem; - --bs-gutter-y: 0; - display: flex; - flex-wrap: wrap; - margin-top: calc(-1 * var(--bs-gutter-y)); - margin-right: calc(-0.5 * var(--bs-gutter-x)); - margin-left: calc(-0.5 * var(--bs-gutter-x)); -} -.row > * { - box-sizing: border-box; - flex-shrink: 0; - width: 100%; - max-width: 100%; - padding-right: calc(var(--bs-gutter-x) * 0.5); - padding-left: calc(var(--bs-gutter-x) * 0.5); - margin-top: var(--bs-gutter-y); -} -.col { - flex: 1 0 0%; -} -.row-cols-auto > * { - flex: 0 0 auto; - width: auto; -} -.row-cols-1 > * { - flex: 0 0 auto; - width: 100%; -} -.row-cols-2 > * { - flex: 0 0 auto; - width: 50%; -} -.row-cols-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; -} -.row-cols-4 > * { - flex: 0 0 auto; - width: 25%; -} -.row-cols-5 > * { - flex: 0 0 auto; - width: 20%; -} -.row-cols-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; -} -.col-auto { - flex: 0 0 auto; - width: auto; -} -.col-1 { - flex: 0 0 auto; - width: 8.33333333%; -} -.col-2 { - flex: 0 0 auto; - width: 16.66666667%; -} -.col-3 { - flex: 0 0 auto; - width: 25%; -} -.col-4 { - flex: 0 0 auto; - width: 33.33333333%; -} -.col-5 { - flex: 0 0 auto; - width: 41.66666667%; -} -.col-6 { - flex: 0 0 auto; - width: 50%; -} -.col-7 { - flex: 0 0 auto; - width: 58.33333333%; -} -.col-8 { - flex: 0 0 auto; - width: 66.66666667%; -} -.col-9 { - flex: 0 0 auto; - width: 75%; -} -.col-10 { - flex: 0 0 auto; - width: 83.33333333%; -} -.col-11 { - flex: 0 0 auto; - width: 91.66666667%; -} -.col-12 { - flex: 0 0 auto; - width: 100%; -} -.offset-1 { - margin-left: 8.33333333%; -} -.offset-2 { - margin-left: 16.66666667%; -} -.offset-3 { - margin-left: 25%; -} -.offset-4 { - margin-left: 33.33333333%; -} -.offset-5 { - margin-left: 41.66666667%; -} -.offset-6 { - margin-left: 50%; -} -.offset-7 { - margin-left: 58.33333333%; -} -.offset-8 { - margin-left: 66.66666667%; -} -.offset-9 { - margin-left: 75%; -} -.offset-10 { - margin-left: 83.33333333%; -} -.offset-11 { - margin-left: 91.66666667%; -} -.g-0, -.gx-0 { - --bs-gutter-x: 0; -} -.g-0, -.gy-0 { - --bs-gutter-y: 0; -} -.g-1, -.gx-1 { - --bs-gutter-x: 0.25rem; -} -.g-1, -.gy-1 { - --bs-gutter-y: 0.25rem; -} -.g-2, -.gx-2 { - --bs-gutter-x: 0.5rem; -} -.g-2, -.gy-2 { - --bs-gutter-y: 0.5rem; -} -.g-3, -.gx-3 { - --bs-gutter-x: 1rem; -} -.g-3, -.gy-3 { - --bs-gutter-y: 1rem; -} -.g-4, -.gx-4 { - --bs-gutter-x: 1.5rem; -} -.g-4, -.gy-4 { - --bs-gutter-y: 1.5rem; -} -.g-5, -.gx-5 { - --bs-gutter-x: 3rem; -} -.g-5, -.gy-5 { - --bs-gutter-y: 3rem; -} -@media (min-width: 576px) { - .col-sm { - flex: 1 0 0%; - } - .row-cols-sm-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-sm-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-sm-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-sm-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - .row-cols-sm-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-sm-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-sm-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } - .col-sm-auto { - flex: 0 0 auto; - width: auto; - } - .col-sm-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-sm-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-sm-3 { - flex: 0 0 auto; - width: 25%; - } - .col-sm-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-sm-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-sm-6 { - flex: 0 0 auto; - width: 50%; - } - .col-sm-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-sm-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-sm-9 { - flex: 0 0 auto; - width: 75%; - } - .col-sm-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-sm-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-sm-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-sm-0 { - margin-left: 0; - } - .offset-sm-1 { - margin-left: 8.33333333%; - } - .offset-sm-2 { - margin-left: 16.66666667%; - } - .offset-sm-3 { - margin-left: 25%; - } - .offset-sm-4 { - margin-left: 33.33333333%; - } - .offset-sm-5 { - margin-left: 41.66666667%; - } - .offset-sm-6 { - margin-left: 50%; - } - .offset-sm-7 { - margin-left: 58.33333333%; - } - .offset-sm-8 { - margin-left: 66.66666667%; - } - .offset-sm-9 { - margin-left: 75%; - } - .offset-sm-10 { - margin-left: 83.33333333%; - } - .offset-sm-11 { - margin-left: 91.66666667%; - } - .g-sm-0, - .gx-sm-0 { - --bs-gutter-x: 0; - } - .g-sm-0, - .gy-sm-0 { - --bs-gutter-y: 0; - } - .g-sm-1, - .gx-sm-1 { - --bs-gutter-x: 0.25rem; - } - .g-sm-1, - .gy-sm-1 { - --bs-gutter-y: 0.25rem; - } - .g-sm-2, - .gx-sm-2 { - --bs-gutter-x: 0.5rem; - } - .g-sm-2, - .gy-sm-2 { - --bs-gutter-y: 0.5rem; - } - .g-sm-3, - .gx-sm-3 { - --bs-gutter-x: 1rem; - } - .g-sm-3, - .gy-sm-3 { - --bs-gutter-y: 1rem; - } - .g-sm-4, - .gx-sm-4 { - --bs-gutter-x: 1.5rem; - } - .g-sm-4, - .gy-sm-4 { - --bs-gutter-y: 1.5rem; - } - .g-sm-5, - .gx-sm-5 { - --bs-gutter-x: 3rem; - } - .g-sm-5, - .gy-sm-5 { - --bs-gutter-y: 3rem; - } -} -@media (min-width: 768px) { - .col-md { - flex: 1 0 0%; - } - .row-cols-md-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-md-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-md-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-md-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - .row-cols-md-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-md-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-md-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } - .col-md-auto { - flex: 0 0 auto; - width: auto; - } - .col-md-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-md-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-md-3 { - flex: 0 0 auto; - width: 25%; - } - .col-md-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-md-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-md-6 { - flex: 0 0 auto; - width: 50%; - } - .col-md-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-md-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-md-9 { - flex: 0 0 auto; - width: 75%; - } - .col-md-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-md-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-md-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-md-0 { - margin-left: 0; - } - .offset-md-1 { - margin-left: 8.33333333%; - } - .offset-md-2 { - margin-left: 16.66666667%; - } - .offset-md-3 { - margin-left: 25%; - } - .offset-md-4 { - margin-left: 33.33333333%; - } - .offset-md-5 { - margin-left: 41.66666667%; - } - .offset-md-6 { - margin-left: 50%; - } - .offset-md-7 { - margin-left: 58.33333333%; - } - .offset-md-8 { - margin-left: 66.66666667%; - } - .offset-md-9 { - margin-left: 75%; - } - .offset-md-10 { - margin-left: 83.33333333%; - } - .offset-md-11 { - margin-left: 91.66666667%; - } - .g-md-0, - .gx-md-0 { - --bs-gutter-x: 0; - } - .g-md-0, - .gy-md-0 { - --bs-gutter-y: 0; - } - .g-md-1, - .gx-md-1 { - --bs-gutter-x: 0.25rem; - } - .g-md-1, - .gy-md-1 { - --bs-gutter-y: 0.25rem; - } - .g-md-2, - .gx-md-2 { - --bs-gutter-x: 0.5rem; - } - .g-md-2, - .gy-md-2 { - --bs-gutter-y: 0.5rem; - } - .g-md-3, - .gx-md-3 { - --bs-gutter-x: 1rem; - } - .g-md-3, - .gy-md-3 { - --bs-gutter-y: 1rem; - } - .g-md-4, - .gx-md-4 { - --bs-gutter-x: 1.5rem; - } - .g-md-4, - .gy-md-4 { - --bs-gutter-y: 1.5rem; - } - .g-md-5, - .gx-md-5 { - --bs-gutter-x: 3rem; - } - .g-md-5, - .gy-md-5 { - --bs-gutter-y: 3rem; - } -} -@media (min-width: 992px) { - .col-lg { - flex: 1 0 0%; - } - .row-cols-lg-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-lg-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-lg-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-lg-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - .row-cols-lg-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-lg-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-lg-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } - .col-lg-auto { - flex: 0 0 auto; - width: auto; - } - .col-lg-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-lg-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-lg-3 { - flex: 0 0 auto; - width: 25%; - } - .col-lg-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-lg-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-lg-6 { - flex: 0 0 auto; - width: 50%; - } - .col-lg-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-lg-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-lg-9 { - flex: 0 0 auto; - width: 75%; - } - .col-lg-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-lg-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-lg-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-lg-0 { - margin-left: 0; - } - .offset-lg-1 { - margin-left: 8.33333333%; - } - .offset-lg-2 { - margin-left: 16.66666667%; - } - .offset-lg-3 { - margin-left: 25%; - } - .offset-lg-4 { - margin-left: 33.33333333%; - } - .offset-lg-5 { - margin-left: 41.66666667%; - } - .offset-lg-6 { - margin-left: 50%; - } - .offset-lg-7 { - margin-left: 58.33333333%; - } - .offset-lg-8 { - margin-left: 66.66666667%; - } - .offset-lg-9 { - margin-left: 75%; - } - .offset-lg-10 { - margin-left: 83.33333333%; - } - .offset-lg-11 { - margin-left: 91.66666667%; - } - .g-lg-0, - .gx-lg-0 { - --bs-gutter-x: 0; - } - .g-lg-0, - .gy-lg-0 { - --bs-gutter-y: 0; - } - .g-lg-1, - .gx-lg-1 { - --bs-gutter-x: 0.25rem; - } - .g-lg-1, - .gy-lg-1 { - --bs-gutter-y: 0.25rem; - } - .g-lg-2, - .gx-lg-2 { - --bs-gutter-x: 0.5rem; - } - .g-lg-2, - .gy-lg-2 { - --bs-gutter-y: 0.5rem; - } - .g-lg-3, - .gx-lg-3 { - --bs-gutter-x: 1rem; - } - .g-lg-3, - .gy-lg-3 { - --bs-gutter-y: 1rem; - } - .g-lg-4, - .gx-lg-4 { - --bs-gutter-x: 1.5rem; - } - .g-lg-4, - .gy-lg-4 { - --bs-gutter-y: 1.5rem; - } - .g-lg-5, - .gx-lg-5 { - --bs-gutter-x: 3rem; - } - .g-lg-5, - .gy-lg-5 { - --bs-gutter-y: 3rem; - } -} -@media (min-width: 1200px) { - .col-xl { - flex: 1 0 0%; - } - .row-cols-xl-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-xl-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-xl-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-xl-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - .row-cols-xl-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-xl-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-xl-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } - .col-xl-auto { - flex: 0 0 auto; - width: auto; - } - .col-xl-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-xl-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-xl-3 { - flex: 0 0 auto; - width: 25%; - } - .col-xl-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-xl-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-xl-6 { - flex: 0 0 auto; - width: 50%; - } - .col-xl-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-xl-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-xl-9 { - flex: 0 0 auto; - width: 75%; - } - .col-xl-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-xl-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-xl-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-xl-0 { - margin-left: 0; - } - .offset-xl-1 { - margin-left: 8.33333333%; - } - .offset-xl-2 { - margin-left: 16.66666667%; - } - .offset-xl-3 { - margin-left: 25%; - } - .offset-xl-4 { - margin-left: 33.33333333%; - } - .offset-xl-5 { - margin-left: 41.66666667%; - } - .offset-xl-6 { - margin-left: 50%; - } - .offset-xl-7 { - margin-left: 58.33333333%; - } - .offset-xl-8 { - margin-left: 66.66666667%; - } - .offset-xl-9 { - margin-left: 75%; - } - .offset-xl-10 { - margin-left: 83.33333333%; - } - .offset-xl-11 { - margin-left: 91.66666667%; - } - .g-xl-0, - .gx-xl-0 { - --bs-gutter-x: 0; - } - .g-xl-0, - .gy-xl-0 { - --bs-gutter-y: 0; - } - .g-xl-1, - .gx-xl-1 { - --bs-gutter-x: 0.25rem; - } - .g-xl-1, - .gy-xl-1 { - --bs-gutter-y: 0.25rem; - } - .g-xl-2, - .gx-xl-2 { - --bs-gutter-x: 0.5rem; - } - .g-xl-2, - .gy-xl-2 { - --bs-gutter-y: 0.5rem; - } - .g-xl-3, - .gx-xl-3 { - --bs-gutter-x: 1rem; - } - .g-xl-3, - .gy-xl-3 { - --bs-gutter-y: 1rem; - } - .g-xl-4, - .gx-xl-4 { - --bs-gutter-x: 1.5rem; - } - .g-xl-4, - .gy-xl-4 { - --bs-gutter-y: 1.5rem; - } - .g-xl-5, - .gx-xl-5 { - --bs-gutter-x: 3rem; - } - .g-xl-5, - .gy-xl-5 { - --bs-gutter-y: 3rem; - } -} -@media (min-width: 1400px) { - .col-xxl { - flex: 1 0 0%; - } - .row-cols-xxl-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-xxl-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-xxl-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-xxl-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - .row-cols-xxl-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-xxl-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-xxl-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } - .col-xxl-auto { - flex: 0 0 auto; - width: auto; - } - .col-xxl-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-xxl-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-xxl-3 { - flex: 0 0 auto; - width: 25%; - } - .col-xxl-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-xxl-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-xxl-6 { - flex: 0 0 auto; - width: 50%; - } - .col-xxl-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-xxl-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-xxl-9 { - flex: 0 0 auto; - width: 75%; - } - .col-xxl-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-xxl-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-xxl-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-xxl-0 { - margin-left: 0; - } - .offset-xxl-1 { - margin-left: 8.33333333%; - } - .offset-xxl-2 { - margin-left: 16.66666667%; - } - .offset-xxl-3 { - margin-left: 25%; - } - .offset-xxl-4 { - margin-left: 33.33333333%; - } - .offset-xxl-5 { - margin-left: 41.66666667%; - } - .offset-xxl-6 { - margin-left: 50%; - } - .offset-xxl-7 { - margin-left: 58.33333333%; - } - .offset-xxl-8 { - margin-left: 66.66666667%; - } - .offset-xxl-9 { - margin-left: 75%; - } - .offset-xxl-10 { - margin-left: 83.33333333%; - } - .offset-xxl-11 { - margin-left: 91.66666667%; - } - .g-xxl-0, - .gx-xxl-0 { - --bs-gutter-x: 0; - } - .g-xxl-0, - .gy-xxl-0 { - --bs-gutter-y: 0; - } - .g-xxl-1, - .gx-xxl-1 { - --bs-gutter-x: 0.25rem; - } - .g-xxl-1, - .gy-xxl-1 { - --bs-gutter-y: 0.25rem; - } - .g-xxl-2, - .gx-xxl-2 { - --bs-gutter-x: 0.5rem; - } - .g-xxl-2, - .gy-xxl-2 { - --bs-gutter-y: 0.5rem; - } - .g-xxl-3, - .gx-xxl-3 { - --bs-gutter-x: 1rem; - } - .g-xxl-3, - .gy-xxl-3 { - --bs-gutter-y: 1rem; - } - .g-xxl-4, - .gx-xxl-4 { - --bs-gutter-x: 1.5rem; - } - .g-xxl-4, - .gy-xxl-4 { - --bs-gutter-y: 1.5rem; - } - .g-xxl-5, - .gx-xxl-5 { - --bs-gutter-x: 3rem; - } - .g-xxl-5, - .gy-xxl-5 { - --bs-gutter-y: 3rem; - } -} -.d-inline { - display: inline !important; -} -.d-inline-block { - display: inline-block !important; -} -.d-block { - display: block !important; -} -.d-grid { - display: grid !important; -} -.d-table { - display: table !important; -} -.d-table-row { - display: table-row !important; -} -.d-table-cell { - display: table-cell !important; -} -.d-flex { - display: flex !important; -} -.d-inline-flex { - display: inline-flex !important; -} -.d-none { - display: none !important; -} -.flex-fill { - flex: 1 1 auto !important; -} -.flex-row { - flex-direction: row !important; -} -.flex-column { - flex-direction: column !important; -} -.flex-row-reverse { - flex-direction: row-reverse !important; -} -.flex-column-reverse { - flex-direction: column-reverse !important; -} -.flex-grow-0 { - flex-grow: 0 !important; -} -.flex-grow-1 { - flex-grow: 1 !important; -} -.flex-shrink-0 { - flex-shrink: 0 !important; -} -.flex-shrink-1 { - flex-shrink: 1 !important; -} -.flex-wrap { - flex-wrap: wrap !important; -} -.flex-nowrap { - flex-wrap: nowrap !important; -} -.flex-wrap-reverse { - flex-wrap: wrap-reverse !important; -} -.justify-content-start { - justify-content: flex-start !important; -} -.justify-content-end { - justify-content: flex-end !important; -} -.justify-content-center { - justify-content: center !important; -} -.justify-content-between { - justify-content: space-between !important; -} -.justify-content-around { - justify-content: space-around !important; -} -.justify-content-evenly { - justify-content: space-evenly !important; -} -.align-items-start { - align-items: flex-start !important; -} -.align-items-end { - align-items: flex-end !important; -} -.align-items-center { - align-items: center !important; -} -.align-items-baseline { - align-items: baseline !important; -} -.align-items-stretch { - align-items: stretch !important; -} -.align-content-start { - align-content: flex-start !important; -} -.align-content-end { - align-content: flex-end !important; -} -.align-content-center { - align-content: center !important; -} -.align-content-between { - align-content: space-between !important; -} -.align-content-around { - align-content: space-around !important; -} -.align-content-stretch { - align-content: stretch !important; -} -.align-self-auto { - align-self: auto !important; -} -.align-self-start { - align-self: flex-start !important; -} -.align-self-end { - align-self: flex-end !important; -} -.align-self-center { - align-self: center !important; -} -.align-self-baseline { - align-self: baseline !important; -} -.align-self-stretch { - align-self: stretch !important; -} -.order-first { - order: -1 !important; -} -.order-0 { - order: 0 !important; -} -.order-1 { - order: 1 !important; -} -.order-2 { - order: 2 !important; -} -.order-3 { - order: 3 !important; -} -.order-4 { - order: 4 !important; -} -.order-5 { - order: 5 !important; -} -.order-last { - order: 6 !important; -} -.m-0 { - margin: 0 !important; -} -.m-1 { - margin: 0.25rem !important; -} -.m-2 { - margin: 0.5rem !important; -} -.m-3 { - margin: 1rem !important; -} -.m-4 { - margin: 1.5rem !important; -} -.m-5 { - margin: 3rem !important; -} -.m-auto { - margin: auto !important; -} -.mx-0 { - margin-right: 0 !important; - margin-left: 0 !important; -} -.mx-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; -} -.mx-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; -} -.mx-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; -} -.mx-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; -} -.mx-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; -} -.mx-auto { - margin-right: auto !important; - margin-left: auto !important; -} -.my-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; -} -.my-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; -} -.my-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; -} -.my-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; -} -.my-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; -} -.my-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; -} -.my-auto { - margin-top: auto !important; - margin-bottom: auto !important; -} -.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; -} -.mt-auto { - margin-top: auto !important; -} -.me-0 { - margin-right: 0 !important; -} -.me-1 { - margin-right: 0.25rem !important; -} -.me-2 { - margin-right: 0.5rem !important; -} -.me-3 { - margin-right: 1rem !important; -} -.me-4 { - margin-right: 1.5rem !important; -} -.me-5 { - margin-right: 3rem !important; -} -.me-auto { - margin-right: auto !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; -} -.mb-auto { - margin-bottom: auto !important; -} -.ms-0 { - margin-left: 0 !important; -} -.ms-1 { - margin-left: 0.25rem !important; -} -.ms-2 { - margin-left: 0.5rem !important; -} -.ms-3 { - margin-left: 1rem !important; -} -.ms-4 { - margin-left: 1.5rem !important; -} -.ms-5 { - margin-left: 3rem !important; -} -.ms-auto { - margin-left: auto !important; -} -.p-0 { - padding: 0 !important; -} -.p-1 { - padding: 0.25rem !important; -} -.p-2 { - padding: 0.5rem !important; -} -.p-3 { - padding: 1rem !important; -} -.p-4 { - padding: 1.5rem !important; -} -.p-5 { - padding: 3rem !important; -} -.px-0 { - padding-right: 0 !important; - padding-left: 0 !important; -} -.px-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; -} -.px-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; -} -.px-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; -} -.px-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; -} -.px-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; -} -.py-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; -} -.py-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; -} -.py-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; -} -.py-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; -} -.py-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; -} -.py-5 { - padding-top: 3rem !important; - padding-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; -} -.pe-0 { - padding-right: 0 !important; -} -.pe-1 { - padding-right: 0.25rem !important; -} -.pe-2 { - padding-right: 0.5rem !important; -} -.pe-3 { - padding-right: 1rem !important; -} -.pe-4 { - padding-right: 1.5rem !important; -} -.pe-5 { - padding-right: 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; -} -.ps-0 { - padding-left: 0 !important; -} -.ps-1 { - padding-left: 0.25rem !important; -} -.ps-2 { - padding-left: 0.5rem !important; -} -.ps-3 { - padding-left: 1rem !important; -} -.ps-4 { - padding-left: 1.5rem !important; -} -.ps-5 { - padding-left: 3rem !important; -} -@media (min-width: 576px) { - .d-sm-inline { - display: inline !important; - } - .d-sm-inline-block { - display: inline-block !important; - } - .d-sm-block { - display: block !important; - } - .d-sm-grid { - display: grid !important; - } - .d-sm-table { - display: table !important; - } - .d-sm-table-row { - display: table-row !important; - } - .d-sm-table-cell { - display: table-cell !important; - } - .d-sm-flex { - display: flex !important; - } - .d-sm-inline-flex { - display: inline-flex !important; - } - .d-sm-none { - display: none !important; - } - .flex-sm-fill { - flex: 1 1 auto !important; - } - .flex-sm-row { - flex-direction: row !important; - } - .flex-sm-column { - flex-direction: column !important; - } - .flex-sm-row-reverse { - flex-direction: row-reverse !important; - } - .flex-sm-column-reverse { - flex-direction: column-reverse !important; - } - .flex-sm-grow-0 { - flex-grow: 0 !important; - } - .flex-sm-grow-1 { - flex-grow: 1 !important; - } - .flex-sm-shrink-0 { - flex-shrink: 0 !important; - } - .flex-sm-shrink-1 { - flex-shrink: 1 !important; - } - .flex-sm-wrap { - flex-wrap: wrap !important; - } - .flex-sm-nowrap { - flex-wrap: nowrap !important; - } - .flex-sm-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .justify-content-sm-start { - justify-content: flex-start !important; - } - .justify-content-sm-end { - justify-content: flex-end !important; - } - .justify-content-sm-center { - justify-content: center !important; - } - .justify-content-sm-between { - justify-content: space-between !important; - } - .justify-content-sm-around { - justify-content: space-around !important; - } - .justify-content-sm-evenly { - justify-content: space-evenly !important; - } - .align-items-sm-start { - align-items: flex-start !important; - } - .align-items-sm-end { - align-items: flex-end !important; - } - .align-items-sm-center { - align-items: center !important; - } - .align-items-sm-baseline { - align-items: baseline !important; - } - .align-items-sm-stretch { - align-items: stretch !important; - } - .align-content-sm-start { - align-content: flex-start !important; - } - .align-content-sm-end { - align-content: flex-end !important; - } - .align-content-sm-center { - align-content: center !important; - } - .align-content-sm-between { - align-content: space-between !important; - } - .align-content-sm-around { - align-content: space-around !important; - } - .align-content-sm-stretch { - align-content: stretch !important; - } - .align-self-sm-auto { - align-self: auto !important; - } - .align-self-sm-start { - align-self: flex-start !important; - } - .align-self-sm-end { - align-self: flex-end !important; - } - .align-self-sm-center { - align-self: center !important; - } - .align-self-sm-baseline { - align-self: baseline !important; - } - .align-self-sm-stretch { - align-self: stretch !important; - } - .order-sm-first { - order: -1 !important; - } - .order-sm-0 { - order: 0 !important; - } - .order-sm-1 { - order: 1 !important; - } - .order-sm-2 { - order: 2 !important; - } - .order-sm-3 { - order: 3 !important; - } - .order-sm-4 { - order: 4 !important; - } - .order-sm-5 { - order: 5 !important; - } - .order-sm-last { - order: 6 !important; - } - .m-sm-0 { - margin: 0 !important; - } - .m-sm-1 { - margin: 0.25rem !important; - } - .m-sm-2 { - margin: 0.5rem !important; - } - .m-sm-3 { - margin: 1rem !important; - } - .m-sm-4 { - margin: 1.5rem !important; - } - .m-sm-5 { - margin: 3rem !important; - } - .m-sm-auto { - margin: auto !important; - } - .mx-sm-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-sm-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-sm-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-sm-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-sm-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-sm-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-sm-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-sm-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-sm-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-sm-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-sm-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-sm-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-sm-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-sm-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-sm-0 { - margin-top: 0 !important; - } - .mt-sm-1 { - margin-top: 0.25rem !important; - } - .mt-sm-2 { - margin-top: 0.5rem !important; - } - .mt-sm-3 { - margin-top: 1rem !important; - } - .mt-sm-4 { - margin-top: 1.5rem !important; - } - .mt-sm-5 { - margin-top: 3rem !important; - } - .mt-sm-auto { - margin-top: auto !important; - } - .me-sm-0 { - margin-right: 0 !important; - } - .me-sm-1 { - margin-right: 0.25rem !important; - } - .me-sm-2 { - margin-right: 0.5rem !important; - } - .me-sm-3 { - margin-right: 1rem !important; - } - .me-sm-4 { - margin-right: 1.5rem !important; - } - .me-sm-5 { - margin-right: 3rem !important; - } - .me-sm-auto { - margin-right: auto !important; - } - .mb-sm-0 { - margin-bottom: 0 !important; - } - .mb-sm-1 { - margin-bottom: 0.25rem !important; - } - .mb-sm-2 { - margin-bottom: 0.5rem !important; - } - .mb-sm-3 { - margin-bottom: 1rem !important; - } - .mb-sm-4 { - margin-bottom: 1.5rem !important; - } - .mb-sm-5 { - margin-bottom: 3rem !important; - } - .mb-sm-auto { - margin-bottom: auto !important; - } - .ms-sm-0 { - margin-left: 0 !important; - } - .ms-sm-1 { - margin-left: 0.25rem !important; - } - .ms-sm-2 { - margin-left: 0.5rem !important; - } - .ms-sm-3 { - margin-left: 1rem !important; - } - .ms-sm-4 { - margin-left: 1.5rem !important; - } - .ms-sm-5 { - margin-left: 3rem !important; - } - .ms-sm-auto { - margin-left: auto !important; - } - .p-sm-0 { - padding: 0 !important; - } - .p-sm-1 { - padding: 0.25rem !important; - } - .p-sm-2 { - padding: 0.5rem !important; - } - .p-sm-3 { - padding: 1rem !important; - } - .p-sm-4 { - padding: 1.5rem !important; - } - .p-sm-5 { - padding: 3rem !important; - } - .px-sm-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-sm-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-sm-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-sm-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-sm-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-sm-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-sm-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-sm-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-sm-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-sm-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-sm-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-sm-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-sm-0 { - padding-top: 0 !important; - } - .pt-sm-1 { - padding-top: 0.25rem !important; - } - .pt-sm-2 { - padding-top: 0.5rem !important; - } - .pt-sm-3 { - padding-top: 1rem !important; - } - .pt-sm-4 { - padding-top: 1.5rem !important; - } - .pt-sm-5 { - padding-top: 3rem !important; - } - .pe-sm-0 { - padding-right: 0 !important; - } - .pe-sm-1 { - padding-right: 0.25rem !important; - } - .pe-sm-2 { - padding-right: 0.5rem !important; - } - .pe-sm-3 { - padding-right: 1rem !important; - } - .pe-sm-4 { - padding-right: 1.5rem !important; - } - .pe-sm-5 { - padding-right: 3rem !important; - } - .pb-sm-0 { - padding-bottom: 0 !important; - } - .pb-sm-1 { - padding-bottom: 0.25rem !important; - } - .pb-sm-2 { - padding-bottom: 0.5rem !important; - } - .pb-sm-3 { - padding-bottom: 1rem !important; - } - .pb-sm-4 { - padding-bottom: 1.5rem !important; - } - .pb-sm-5 { - padding-bottom: 3rem !important; - } - .ps-sm-0 { - padding-left: 0 !important; - } - .ps-sm-1 { - padding-left: 0.25rem !important; - } - .ps-sm-2 { - padding-left: 0.5rem !important; - } - .ps-sm-3 { - padding-left: 1rem !important; - } - .ps-sm-4 { - padding-left: 1.5rem !important; - } - .ps-sm-5 { - padding-left: 3rem !important; - } -} -@media (min-width: 768px) { - .d-md-inline { - display: inline !important; - } - .d-md-inline-block { - display: inline-block !important; - } - .d-md-block { - display: block !important; - } - .d-md-grid { - display: grid !important; - } - .d-md-table { - display: table !important; - } - .d-md-table-row { - display: table-row !important; - } - .d-md-table-cell { - display: table-cell !important; - } - .d-md-flex { - display: flex !important; - } - .d-md-inline-flex { - display: inline-flex !important; - } - .d-md-none { - display: none !important; - } - .flex-md-fill { - flex: 1 1 auto !important; - } - .flex-md-row { - flex-direction: row !important; - } - .flex-md-column { - flex-direction: column !important; - } - .flex-md-row-reverse { - flex-direction: row-reverse !important; - } - .flex-md-column-reverse { - flex-direction: column-reverse !important; - } - .flex-md-grow-0 { - flex-grow: 0 !important; - } - .flex-md-grow-1 { - flex-grow: 1 !important; - } - .flex-md-shrink-0 { - flex-shrink: 0 !important; - } - .flex-md-shrink-1 { - flex-shrink: 1 !important; - } - .flex-md-wrap { - flex-wrap: wrap !important; - } - .flex-md-nowrap { - flex-wrap: nowrap !important; - } - .flex-md-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .justify-content-md-start { - justify-content: flex-start !important; - } - .justify-content-md-end { - justify-content: flex-end !important; - } - .justify-content-md-center { - justify-content: center !important; - } - .justify-content-md-between { - justify-content: space-between !important; - } - .justify-content-md-around { - justify-content: space-around !important; - } - .justify-content-md-evenly { - justify-content: space-evenly !important; - } - .align-items-md-start { - align-items: flex-start !important; - } - .align-items-md-end { - align-items: flex-end !important; - } - .align-items-md-center { - align-items: center !important; - } - .align-items-md-baseline { - align-items: baseline !important; - } - .align-items-md-stretch { - align-items: stretch !important; - } - .align-content-md-start { - align-content: flex-start !important; - } - .align-content-md-end { - align-content: flex-end !important; - } - .align-content-md-center { - align-content: center !important; - } - .align-content-md-between { - align-content: space-between !important; - } - .align-content-md-around { - align-content: space-around !important; - } - .align-content-md-stretch { - align-content: stretch !important; - } - .align-self-md-auto { - align-self: auto !important; - } - .align-self-md-start { - align-self: flex-start !important; - } - .align-self-md-end { - align-self: flex-end !important; - } - .align-self-md-center { - align-self: center !important; - } - .align-self-md-baseline { - align-self: baseline !important; - } - .align-self-md-stretch { - align-self: stretch !important; - } - .order-md-first { - order: -1 !important; - } - .order-md-0 { - order: 0 !important; - } - .order-md-1 { - order: 1 !important; - } - .order-md-2 { - order: 2 !important; - } - .order-md-3 { - order: 3 !important; - } - .order-md-4 { - order: 4 !important; - } - .order-md-5 { - order: 5 !important; - } - .order-md-last { - order: 6 !important; - } - .m-md-0 { - margin: 0 !important; - } - .m-md-1 { - margin: 0.25rem !important; - } - .m-md-2 { - margin: 0.5rem !important; - } - .m-md-3 { - margin: 1rem !important; - } - .m-md-4 { - margin: 1.5rem !important; - } - .m-md-5 { - margin: 3rem !important; - } - .m-md-auto { - margin: auto !important; - } - .mx-md-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-md-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-md-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-md-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-md-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-md-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-md-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-md-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-md-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-md-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-md-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-md-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-md-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-md-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-md-0 { - margin-top: 0 !important; - } - .mt-md-1 { - margin-top: 0.25rem !important; - } - .mt-md-2 { - margin-top: 0.5rem !important; - } - .mt-md-3 { - margin-top: 1rem !important; - } - .mt-md-4 { - margin-top: 1.5rem !important; - } - .mt-md-5 { - margin-top: 3rem !important; - } - .mt-md-auto { - margin-top: auto !important; - } - .me-md-0 { - margin-right: 0 !important; - } - .me-md-1 { - margin-right: 0.25rem !important; - } - .me-md-2 { - margin-right: 0.5rem !important; - } - .me-md-3 { - margin-right: 1rem !important; - } - .me-md-4 { - margin-right: 1.5rem !important; - } - .me-md-5 { - margin-right: 3rem !important; - } - .me-md-auto { - margin-right: auto !important; - } - .mb-md-0 { - margin-bottom: 0 !important; - } - .mb-md-1 { - margin-bottom: 0.25rem !important; - } - .mb-md-2 { - margin-bottom: 0.5rem !important; - } - .mb-md-3 { - margin-bottom: 1rem !important; - } - .mb-md-4 { - margin-bottom: 1.5rem !important; - } - .mb-md-5 { - margin-bottom: 3rem !important; - } - .mb-md-auto { - margin-bottom: auto !important; - } - .ms-md-0 { - margin-left: 0 !important; - } - .ms-md-1 { - margin-left: 0.25rem !important; - } - .ms-md-2 { - margin-left: 0.5rem !important; - } - .ms-md-3 { - margin-left: 1rem !important; - } - .ms-md-4 { - margin-left: 1.5rem !important; - } - .ms-md-5 { - margin-left: 3rem !important; - } - .ms-md-auto { - margin-left: auto !important; - } - .p-md-0 { - padding: 0 !important; - } - .p-md-1 { - padding: 0.25rem !important; - } - .p-md-2 { - padding: 0.5rem !important; - } - .p-md-3 { - padding: 1rem !important; - } - .p-md-4 { - padding: 1.5rem !important; - } - .p-md-5 { - padding: 3rem !important; - } - .px-md-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-md-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-md-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-md-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-md-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-md-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-md-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-md-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-md-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-md-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-md-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-md-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-md-0 { - padding-top: 0 !important; - } - .pt-md-1 { - padding-top: 0.25rem !important; - } - .pt-md-2 { - padding-top: 0.5rem !important; - } - .pt-md-3 { - padding-top: 1rem !important; - } - .pt-md-4 { - padding-top: 1.5rem !important; - } - .pt-md-5 { - padding-top: 3rem !important; - } - .pe-md-0 { - padding-right: 0 !important; - } - .pe-md-1 { - padding-right: 0.25rem !important; - } - .pe-md-2 { - padding-right: 0.5rem !important; - } - .pe-md-3 { - padding-right: 1rem !important; - } - .pe-md-4 { - padding-right: 1.5rem !important; - } - .pe-md-5 { - padding-right: 3rem !important; - } - .pb-md-0 { - padding-bottom: 0 !important; - } - .pb-md-1 { - padding-bottom: 0.25rem !important; - } - .pb-md-2 { - padding-bottom: 0.5rem !important; - } - .pb-md-3 { - padding-bottom: 1rem !important; - } - .pb-md-4 { - padding-bottom: 1.5rem !important; - } - .pb-md-5 { - padding-bottom: 3rem !important; - } - .ps-md-0 { - padding-left: 0 !important; - } - .ps-md-1 { - padding-left: 0.25rem !important; - } - .ps-md-2 { - padding-left: 0.5rem !important; - } - .ps-md-3 { - padding-left: 1rem !important; - } - .ps-md-4 { - padding-left: 1.5rem !important; - } - .ps-md-5 { - padding-left: 3rem !important; - } -} -@media (min-width: 992px) { - .d-lg-inline { - display: inline !important; - } - .d-lg-inline-block { - display: inline-block !important; - } - .d-lg-block { - display: block !important; - } - .d-lg-grid { - display: grid !important; - } - .d-lg-table { - display: table !important; - } - .d-lg-table-row { - display: table-row !important; - } - .d-lg-table-cell { - display: table-cell !important; - } - .d-lg-flex { - display: flex !important; - } - .d-lg-inline-flex { - display: inline-flex !important; - } - .d-lg-none { - display: none !important; - } - .flex-lg-fill { - flex: 1 1 auto !important; - } - .flex-lg-row { - flex-direction: row !important; - } - .flex-lg-column { - flex-direction: column !important; - } - .flex-lg-row-reverse { - flex-direction: row-reverse !important; - } - .flex-lg-column-reverse { - flex-direction: column-reverse !important; - } - .flex-lg-grow-0 { - flex-grow: 0 !important; - } - .flex-lg-grow-1 { - flex-grow: 1 !important; - } - .flex-lg-shrink-0 { - flex-shrink: 0 !important; - } - .flex-lg-shrink-1 { - flex-shrink: 1 !important; - } - .flex-lg-wrap { - flex-wrap: wrap !important; - } - .flex-lg-nowrap { - flex-wrap: nowrap !important; - } - .flex-lg-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .justify-content-lg-start { - justify-content: flex-start !important; - } - .justify-content-lg-end { - justify-content: flex-end !important; - } - .justify-content-lg-center { - justify-content: center !important; - } - .justify-content-lg-between { - justify-content: space-between !important; - } - .justify-content-lg-around { - justify-content: space-around !important; - } - .justify-content-lg-evenly { - justify-content: space-evenly !important; - } - .align-items-lg-start { - align-items: flex-start !important; - } - .align-items-lg-end { - align-items: flex-end !important; - } - .align-items-lg-center { - align-items: center !important; - } - .align-items-lg-baseline { - align-items: baseline !important; - } - .align-items-lg-stretch { - align-items: stretch !important; - } - .align-content-lg-start { - align-content: flex-start !important; - } - .align-content-lg-end { - align-content: flex-end !important; - } - .align-content-lg-center { - align-content: center !important; - } - .align-content-lg-between { - align-content: space-between !important; - } - .align-content-lg-around { - align-content: space-around !important; - } - .align-content-lg-stretch { - align-content: stretch !important; - } - .align-self-lg-auto { - align-self: auto !important; - } - .align-self-lg-start { - align-self: flex-start !important; - } - .align-self-lg-end { - align-self: flex-end !important; - } - .align-self-lg-center { - align-self: center !important; - } - .align-self-lg-baseline { - align-self: baseline !important; - } - .align-self-lg-stretch { - align-self: stretch !important; - } - .order-lg-first { - order: -1 !important; - } - .order-lg-0 { - order: 0 !important; - } - .order-lg-1 { - order: 1 !important; - } - .order-lg-2 { - order: 2 !important; - } - .order-lg-3 { - order: 3 !important; - } - .order-lg-4 { - order: 4 !important; - } - .order-lg-5 { - order: 5 !important; - } - .order-lg-last { - order: 6 !important; - } - .m-lg-0 { - margin: 0 !important; - } - .m-lg-1 { - margin: 0.25rem !important; - } - .m-lg-2 { - margin: 0.5rem !important; - } - .m-lg-3 { - margin: 1rem !important; - } - .m-lg-4 { - margin: 1.5rem !important; - } - .m-lg-5 { - margin: 3rem !important; - } - .m-lg-auto { - margin: auto !important; - } - .mx-lg-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-lg-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-lg-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-lg-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-lg-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-lg-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-lg-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-lg-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-lg-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-lg-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-lg-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-lg-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-lg-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-lg-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-lg-0 { - margin-top: 0 !important; - } - .mt-lg-1 { - margin-top: 0.25rem !important; - } - .mt-lg-2 { - margin-top: 0.5rem !important; - } - .mt-lg-3 { - margin-top: 1rem !important; - } - .mt-lg-4 { - margin-top: 1.5rem !important; - } - .mt-lg-5 { - margin-top: 3rem !important; - } - .mt-lg-auto { - margin-top: auto !important; - } - .me-lg-0 { - margin-right: 0 !important; - } - .me-lg-1 { - margin-right: 0.25rem !important; - } - .me-lg-2 { - margin-right: 0.5rem !important; - } - .me-lg-3 { - margin-right: 1rem !important; - } - .me-lg-4 { - margin-right: 1.5rem !important; - } - .me-lg-5 { - margin-right: 3rem !important; - } - .me-lg-auto { - margin-right: auto !important; - } - .mb-lg-0 { - margin-bottom: 0 !important; - } - .mb-lg-1 { - margin-bottom: 0.25rem !important; - } - .mb-lg-2 { - margin-bottom: 0.5rem !important; - } - .mb-lg-3 { - margin-bottom: 1rem !important; - } - .mb-lg-4 { - margin-bottom: 1.5rem !important; - } - .mb-lg-5 { - margin-bottom: 3rem !important; - } - .mb-lg-auto { - margin-bottom: auto !important; - } - .ms-lg-0 { - margin-left: 0 !important; - } - .ms-lg-1 { - margin-left: 0.25rem !important; - } - .ms-lg-2 { - margin-left: 0.5rem !important; - } - .ms-lg-3 { - margin-left: 1rem !important; - } - .ms-lg-4 { - margin-left: 1.5rem !important; - } - .ms-lg-5 { - margin-left: 3rem !important; - } - .ms-lg-auto { - margin-left: auto !important; - } - .p-lg-0 { - padding: 0 !important; - } - .p-lg-1 { - padding: 0.25rem !important; - } - .p-lg-2 { - padding: 0.5rem !important; - } - .p-lg-3 { - padding: 1rem !important; - } - .p-lg-4 { - padding: 1.5rem !important; - } - .p-lg-5 { - padding: 3rem !important; - } - .px-lg-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-lg-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-lg-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-lg-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-lg-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-lg-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-lg-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-lg-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-lg-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-lg-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-lg-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-lg-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-lg-0 { - padding-top: 0 !important; - } - .pt-lg-1 { - padding-top: 0.25rem !important; - } - .pt-lg-2 { - padding-top: 0.5rem !important; - } - .pt-lg-3 { - padding-top: 1rem !important; - } - .pt-lg-4 { - padding-top: 1.5rem !important; - } - .pt-lg-5 { - padding-top: 3rem !important; - } - .pe-lg-0 { - padding-right: 0 !important; - } - .pe-lg-1 { - padding-right: 0.25rem !important; - } - .pe-lg-2 { - padding-right: 0.5rem !important; - } - .pe-lg-3 { - padding-right: 1rem !important; - } - .pe-lg-4 { - padding-right: 1.5rem !important; - } - .pe-lg-5 { - padding-right: 3rem !important; - } - .pb-lg-0 { - padding-bottom: 0 !important; - } - .pb-lg-1 { - padding-bottom: 0.25rem !important; - } - .pb-lg-2 { - padding-bottom: 0.5rem !important; - } - .pb-lg-3 { - padding-bottom: 1rem !important; - } - .pb-lg-4 { - padding-bottom: 1.5rem !important; - } - .pb-lg-5 { - padding-bottom: 3rem !important; - } - .ps-lg-0 { - padding-left: 0 !important; - } - .ps-lg-1 { - padding-left: 0.25rem !important; - } - .ps-lg-2 { - padding-left: 0.5rem !important; - } - .ps-lg-3 { - padding-left: 1rem !important; - } - .ps-lg-4 { - padding-left: 1.5rem !important; - } - .ps-lg-5 { - padding-left: 3rem !important; - } -} -@media (min-width: 1200px) { - .d-xl-inline { - display: inline !important; - } - .d-xl-inline-block { - display: inline-block !important; - } - .d-xl-block { - display: block !important; - } - .d-xl-grid { - display: grid !important; - } - .d-xl-table { - display: table !important; - } - .d-xl-table-row { - display: table-row !important; - } - .d-xl-table-cell { - display: table-cell !important; - } - .d-xl-flex { - display: flex !important; - } - .d-xl-inline-flex { - display: inline-flex !important; - } - .d-xl-none { - display: none !important; - } - .flex-xl-fill { - flex: 1 1 auto !important; - } - .flex-xl-row { - flex-direction: row !important; - } - .flex-xl-column { - flex-direction: column !important; - } - .flex-xl-row-reverse { - flex-direction: row-reverse !important; - } - .flex-xl-column-reverse { - flex-direction: column-reverse !important; - } - .flex-xl-grow-0 { - flex-grow: 0 !important; - } - .flex-xl-grow-1 { - flex-grow: 1 !important; - } - .flex-xl-shrink-0 { - flex-shrink: 0 !important; - } - .flex-xl-shrink-1 { - flex-shrink: 1 !important; - } - .flex-xl-wrap { - flex-wrap: wrap !important; - } - .flex-xl-nowrap { - flex-wrap: nowrap !important; - } - .flex-xl-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .justify-content-xl-start { - justify-content: flex-start !important; - } - .justify-content-xl-end { - justify-content: flex-end !important; - } - .justify-content-xl-center { - justify-content: center !important; - } - .justify-content-xl-between { - justify-content: space-between !important; - } - .justify-content-xl-around { - justify-content: space-around !important; - } - .justify-content-xl-evenly { - justify-content: space-evenly !important; - } - .align-items-xl-start { - align-items: flex-start !important; - } - .align-items-xl-end { - align-items: flex-end !important; - } - .align-items-xl-center { - align-items: center !important; - } - .align-items-xl-baseline { - align-items: baseline !important; - } - .align-items-xl-stretch { - align-items: stretch !important; - } - .align-content-xl-start { - align-content: flex-start !important; - } - .align-content-xl-end { - align-content: flex-end !important; - } - .align-content-xl-center { - align-content: center !important; - } - .align-content-xl-between { - align-content: space-between !important; - } - .align-content-xl-around { - align-content: space-around !important; - } - .align-content-xl-stretch { - align-content: stretch !important; - } - .align-self-xl-auto { - align-self: auto !important; - } - .align-self-xl-start { - align-self: flex-start !important; - } - .align-self-xl-end { - align-self: flex-end !important; - } - .align-self-xl-center { - align-self: center !important; - } - .align-self-xl-baseline { - align-self: baseline !important; - } - .align-self-xl-stretch { - align-self: stretch !important; - } - .order-xl-first { - order: -1 !important; - } - .order-xl-0 { - order: 0 !important; - } - .order-xl-1 { - order: 1 !important; - } - .order-xl-2 { - order: 2 !important; - } - .order-xl-3 { - order: 3 !important; - } - .order-xl-4 { - order: 4 !important; - } - .order-xl-5 { - order: 5 !important; - } - .order-xl-last { - order: 6 !important; - } - .m-xl-0 { - margin: 0 !important; - } - .m-xl-1 { - margin: 0.25rem !important; - } - .m-xl-2 { - margin: 0.5rem !important; - } - .m-xl-3 { - margin: 1rem !important; - } - .m-xl-4 { - margin: 1.5rem !important; - } - .m-xl-5 { - margin: 3rem !important; - } - .m-xl-auto { - margin: auto !important; - } - .mx-xl-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-xl-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-xl-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-xl-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-xl-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-xl-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-xl-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-xl-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-xl-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-xl-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-xl-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-xl-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-xl-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-xl-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-xl-0 { - margin-top: 0 !important; - } - .mt-xl-1 { - margin-top: 0.25rem !important; - } - .mt-xl-2 { - margin-top: 0.5rem !important; - } - .mt-xl-3 { - margin-top: 1rem !important; - } - .mt-xl-4 { - margin-top: 1.5rem !important; - } - .mt-xl-5 { - margin-top: 3rem !important; - } - .mt-xl-auto { - margin-top: auto !important; - } - .me-xl-0 { - margin-right: 0 !important; - } - .me-xl-1 { - margin-right: 0.25rem !important; - } - .me-xl-2 { - margin-right: 0.5rem !important; - } - .me-xl-3 { - margin-right: 1rem !important; - } - .me-xl-4 { - margin-right: 1.5rem !important; - } - .me-xl-5 { - margin-right: 3rem !important; - } - .me-xl-auto { - margin-right: auto !important; - } - .mb-xl-0 { - margin-bottom: 0 !important; - } - .mb-xl-1 { - margin-bottom: 0.25rem !important; - } - .mb-xl-2 { - margin-bottom: 0.5rem !important; - } - .mb-xl-3 { - margin-bottom: 1rem !important; - } - .mb-xl-4 { - margin-bottom: 1.5rem !important; - } - .mb-xl-5 { - margin-bottom: 3rem !important; - } - .mb-xl-auto { - margin-bottom: auto !important; - } - .ms-xl-0 { - margin-left: 0 !important; - } - .ms-xl-1 { - margin-left: 0.25rem !important; - } - .ms-xl-2 { - margin-left: 0.5rem !important; - } - .ms-xl-3 { - margin-left: 1rem !important; - } - .ms-xl-4 { - margin-left: 1.5rem !important; - } - .ms-xl-5 { - margin-left: 3rem !important; - } - .ms-xl-auto { - margin-left: auto !important; - } - .p-xl-0 { - padding: 0 !important; - } - .p-xl-1 { - padding: 0.25rem !important; - } - .p-xl-2 { - padding: 0.5rem !important; - } - .p-xl-3 { - padding: 1rem !important; - } - .p-xl-4 { - padding: 1.5rem !important; - } - .p-xl-5 { - padding: 3rem !important; - } - .px-xl-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-xl-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-xl-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-xl-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-xl-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-xl-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-xl-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-xl-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-xl-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-xl-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-xl-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-xl-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-xl-0 { - padding-top: 0 !important; - } - .pt-xl-1 { - padding-top: 0.25rem !important; - } - .pt-xl-2 { - padding-top: 0.5rem !important; - } - .pt-xl-3 { - padding-top: 1rem !important; - } - .pt-xl-4 { - padding-top: 1.5rem !important; - } - .pt-xl-5 { - padding-top: 3rem !important; - } - .pe-xl-0 { - padding-right: 0 !important; - } - .pe-xl-1 { - padding-right: 0.25rem !important; - } - .pe-xl-2 { - padding-right: 0.5rem !important; - } - .pe-xl-3 { - padding-right: 1rem !important; - } - .pe-xl-4 { - padding-right: 1.5rem !important; - } - .pe-xl-5 { - padding-right: 3rem !important; - } - .pb-xl-0 { - padding-bottom: 0 !important; - } - .pb-xl-1 { - padding-bottom: 0.25rem !important; - } - .pb-xl-2 { - padding-bottom: 0.5rem !important; - } - .pb-xl-3 { - padding-bottom: 1rem !important; - } - .pb-xl-4 { - padding-bottom: 1.5rem !important; - } - .pb-xl-5 { - padding-bottom: 3rem !important; - } - .ps-xl-0 { - padding-left: 0 !important; - } - .ps-xl-1 { - padding-left: 0.25rem !important; - } - .ps-xl-2 { - padding-left: 0.5rem !important; - } - .ps-xl-3 { - padding-left: 1rem !important; - } - .ps-xl-4 { - padding-left: 1.5rem !important; - } - .ps-xl-5 { - padding-left: 3rem !important; - } -} -@media (min-width: 1400px) { - .d-xxl-inline { - display: inline !important; - } - .d-xxl-inline-block { - display: inline-block !important; - } - .d-xxl-block { - display: block !important; - } - .d-xxl-grid { - display: grid !important; - } - .d-xxl-table { - display: table !important; - } - .d-xxl-table-row { - display: table-row !important; - } - .d-xxl-table-cell { - display: table-cell !important; - } - .d-xxl-flex { - display: flex !important; - } - .d-xxl-inline-flex { - display: inline-flex !important; - } - .d-xxl-none { - display: none !important; - } - .flex-xxl-fill { - flex: 1 1 auto !important; - } - .flex-xxl-row { - flex-direction: row !important; - } - .flex-xxl-column { - flex-direction: column !important; - } - .flex-xxl-row-reverse { - flex-direction: row-reverse !important; - } - .flex-xxl-column-reverse { - flex-direction: column-reverse !important; - } - .flex-xxl-grow-0 { - flex-grow: 0 !important; - } - .flex-xxl-grow-1 { - flex-grow: 1 !important; - } - .flex-xxl-shrink-0 { - flex-shrink: 0 !important; - } - .flex-xxl-shrink-1 { - flex-shrink: 1 !important; - } - .flex-xxl-wrap { - flex-wrap: wrap !important; - } - .flex-xxl-nowrap { - flex-wrap: nowrap !important; - } - .flex-xxl-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .justify-content-xxl-start { - justify-content: flex-start !important; - } - .justify-content-xxl-end { - justify-content: flex-end !important; - } - .justify-content-xxl-center { - justify-content: center !important; - } - .justify-content-xxl-between { - justify-content: space-between !important; - } - .justify-content-xxl-around { - justify-content: space-around !important; - } - .justify-content-xxl-evenly { - justify-content: space-evenly !important; - } - .align-items-xxl-start { - align-items: flex-start !important; - } - .align-items-xxl-end { - align-items: flex-end !important; - } - .align-items-xxl-center { - align-items: center !important; - } - .align-items-xxl-baseline { - align-items: baseline !important; - } - .align-items-xxl-stretch { - align-items: stretch !important; - } - .align-content-xxl-start { - align-content: flex-start !important; - } - .align-content-xxl-end { - align-content: flex-end !important; - } - .align-content-xxl-center { - align-content: center !important; - } - .align-content-xxl-between { - align-content: space-between !important; - } - .align-content-xxl-around { - align-content: space-around !important; - } - .align-content-xxl-stretch { - align-content: stretch !important; - } - .align-self-xxl-auto { - align-self: auto !important; - } - .align-self-xxl-start { - align-self: flex-start !important; - } - .align-self-xxl-end { - align-self: flex-end !important; - } - .align-self-xxl-center { - align-self: center !important; - } - .align-self-xxl-baseline { - align-self: baseline !important; - } - .align-self-xxl-stretch { - align-self: stretch !important; - } - .order-xxl-first { - order: -1 !important; - } - .order-xxl-0 { - order: 0 !important; - } - .order-xxl-1 { - order: 1 !important; - } - .order-xxl-2 { - order: 2 !important; - } - .order-xxl-3 { - order: 3 !important; - } - .order-xxl-4 { - order: 4 !important; - } - .order-xxl-5 { - order: 5 !important; - } - .order-xxl-last { - order: 6 !important; - } - .m-xxl-0 { - margin: 0 !important; - } - .m-xxl-1 { - margin: 0.25rem !important; - } - .m-xxl-2 { - margin: 0.5rem !important; - } - .m-xxl-3 { - margin: 1rem !important; - } - .m-xxl-4 { - margin: 1.5rem !important; - } - .m-xxl-5 { - margin: 3rem !important; - } - .m-xxl-auto { - margin: auto !important; - } - .mx-xxl-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-xxl-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-xxl-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-xxl-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-xxl-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-xxl-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-xxl-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-xxl-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-xxl-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-xxl-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-xxl-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-xxl-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-xxl-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-xxl-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-xxl-0 { - margin-top: 0 !important; - } - .mt-xxl-1 { - margin-top: 0.25rem !important; - } - .mt-xxl-2 { - margin-top: 0.5rem !important; - } - .mt-xxl-3 { - margin-top: 1rem !important; - } - .mt-xxl-4 { - margin-top: 1.5rem !important; - } - .mt-xxl-5 { - margin-top: 3rem !important; - } - .mt-xxl-auto { - margin-top: auto !important; - } - .me-xxl-0 { - margin-right: 0 !important; - } - .me-xxl-1 { - margin-right: 0.25rem !important; - } - .me-xxl-2 { - margin-right: 0.5rem !important; - } - .me-xxl-3 { - margin-right: 1rem !important; - } - .me-xxl-4 { - margin-right: 1.5rem !important; - } - .me-xxl-5 { - margin-right: 3rem !important; - } - .me-xxl-auto { - margin-right: auto !important; - } - .mb-xxl-0 { - margin-bottom: 0 !important; - } - .mb-xxl-1 { - margin-bottom: 0.25rem !important; - } - .mb-xxl-2 { - margin-bottom: 0.5rem !important; - } - .mb-xxl-3 { - margin-bottom: 1rem !important; - } - .mb-xxl-4 { - margin-bottom: 1.5rem !important; - } - .mb-xxl-5 { - margin-bottom: 3rem !important; - } - .mb-xxl-auto { - margin-bottom: auto !important; - } - .ms-xxl-0 { - margin-left: 0 !important; - } - .ms-xxl-1 { - margin-left: 0.25rem !important; - } - .ms-xxl-2 { - margin-left: 0.5rem !important; - } - .ms-xxl-3 { - margin-left: 1rem !important; - } - .ms-xxl-4 { - margin-left: 1.5rem !important; - } - .ms-xxl-5 { - margin-left: 3rem !important; - } - .ms-xxl-auto { - margin-left: auto !important; - } - .p-xxl-0 { - padding: 0 !important; - } - .p-xxl-1 { - padding: 0.25rem !important; - } - .p-xxl-2 { - padding: 0.5rem !important; - } - .p-xxl-3 { - padding: 1rem !important; - } - .p-xxl-4 { - padding: 1.5rem !important; - } - .p-xxl-5 { - padding: 3rem !important; - } - .px-xxl-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-xxl-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-xxl-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-xxl-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-xxl-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-xxl-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-xxl-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-xxl-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-xxl-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-xxl-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-xxl-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-xxl-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-xxl-0 { - padding-top: 0 !important; - } - .pt-xxl-1 { - padding-top: 0.25rem !important; - } - .pt-xxl-2 { - padding-top: 0.5rem !important; - } - .pt-xxl-3 { - padding-top: 1rem !important; - } - .pt-xxl-4 { - padding-top: 1.5rem !important; - } - .pt-xxl-5 { - padding-top: 3rem !important; - } - .pe-xxl-0 { - padding-right: 0 !important; - } - .pe-xxl-1 { - padding-right: 0.25rem !important; - } - .pe-xxl-2 { - padding-right: 0.5rem !important; - } - .pe-xxl-3 { - padding-right: 1rem !important; - } - .pe-xxl-4 { - padding-right: 1.5rem !important; - } - .pe-xxl-5 { - padding-right: 3rem !important; - } - .pb-xxl-0 { - padding-bottom: 0 !important; - } - .pb-xxl-1 { - padding-bottom: 0.25rem !important; - } - .pb-xxl-2 { - padding-bottom: 0.5rem !important; - } - .pb-xxl-3 { - padding-bottom: 1rem !important; - } - .pb-xxl-4 { - padding-bottom: 1.5rem !important; - } - .pb-xxl-5 { - padding-bottom: 3rem !important; - } - .ps-xxl-0 { - padding-left: 0 !important; - } - .ps-xxl-1 { - padding-left: 0.25rem !important; - } - .ps-xxl-2 { - padding-left: 0.5rem !important; - } - .ps-xxl-3 { - padding-left: 1rem !important; - } - .ps-xxl-4 { - padding-left: 1.5rem !important; - } - .ps-xxl-5 { - padding-left: 3rem !important; - } -} -@media print { - .d-print-inline { - display: inline !important; - } - .d-print-inline-block { - display: inline-block !important; - } - .d-print-block { - display: block !important; - } - .d-print-grid { - display: grid !important; - } - .d-print-table { - display: table !important; - } - .d-print-table-row { - display: table-row !important; - } - .d-print-table-cell { - display: table-cell !important; - } - .d-print-flex { - display: flex !important; - } - .d-print-inline-flex { - display: inline-flex !important; - } - .d-print-none { - display: none !important; - } -} -/*# sourceMappingURL=bootstrap-grid.min.css.map */ diff --git a/assets/css/bootstrap-grid.min.css.map b/assets/css/bootstrap-grid.min.css.map deleted file mode 100644 index 63cfa34e9..000000000 --- a/assets/css/bootstrap-grid.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","../../scss/_containers.scss","dist/css/bootstrap-grid.css","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","/*!\n * Bootstrap Grid v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n box-sizing: border-box;\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 768px) {\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 992px) {\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1200px) {\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1400px) {\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file diff --git a/assets/css/bootstrap-reboot.css b/assets/css/bootstrap-reboot.css deleted file mode 100644 index 2ec18def2..000000000 --- a/assets/css/bootstrap-reboot.css +++ /dev/null @@ -1,504 +0,0 @@ -/*! - * Bootstrap Reboot v5.2.3 (https://getbootstrap.com/) - * Copyright 2011-2022 The Bootstrap Authors - * Copyright 2011-2022 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */ -:root { - --bs-blue: #0d6efd; - --bs-indigo: #6610f2; - --bs-purple: #6f42c1; - --bs-pink: #d63384; - --bs-red: #dc3545; - --bs-orange: #fd7e14; - --bs-yellow: #ffc107; - --bs-green: #198754; - --bs-teal: #20c997; - --bs-cyan: #0dcaf0; - --bs-black: #000; - --bs-white: #fff; - --bs-gray: #6c757d; - --bs-gray-dark: #343a40; - --bs-gray-100: #f8f9fa; - --bs-gray-200: #e9ecef; - --bs-gray-300: #dee2e6; - --bs-gray-400: #ced4da; - --bs-gray-500: #adb5bd; - --bs-gray-600: #6c757d; - --bs-gray-700: #495057; - --bs-gray-800: #343a40; - --bs-gray-900: #212529; - --bs-primary: #0d6efd; - --bs-secondary: #6c757d; - --bs-success: #198754; - --bs-info: #0dcaf0; - --bs-warning: #ffc107; - --bs-danger: #dc3545; - --bs-light: #f8f9fa; - --bs-dark: #212529; - --bs-primary-rgb: 13, 110, 253; - --bs-secondary-rgb: 108, 117, 125; - --bs-success-rgb: 25, 135, 84; - --bs-info-rgb: 13, 202, 240; - --bs-warning-rgb: 255, 193, 7; - --bs-danger-rgb: 220, 53, 69; - --bs-light-rgb: 248, 249, 250; - --bs-dark-rgb: 33, 37, 41; - --bs-white-rgb: 255, 255, 255; - --bs-black-rgb: 0, 0, 0; - --bs-body-color-rgb: 33, 37, 41; - --bs-body-bg-rgb: 255, 255, 255; - --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, - "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, - "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", - "Noto Color Emoji"; - --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, - "Liberation Mono", "Courier New", monospace; - --bs-gradient: linear-gradient( - 180deg, - rgba(255, 255, 255, 0.15), - rgba(255, 255, 255, 0) - ); - --bs-body-font-family: var(--bs-font-sans-serif); - --bs-body-font-size: 1rem; - --bs-body-font-weight: 400; - --bs-body-line-height: 1.5; - --bs-body-color: #212529; - --bs-body-bg: #fff; - --bs-border-width: 1px; - --bs-border-style: solid; - --bs-border-color: #dee2e6; - --bs-border-color-translucent: rgba(0, 0, 0, 0.175); - --bs-border-radius: 0.375rem; - --bs-border-radius-sm: 0.25rem; - --bs-border-radius-lg: 0.5rem; - --bs-border-radius-xl: 1rem; - --bs-border-radius-2xl: 2rem; - --bs-border-radius-pill: 50rem; - --bs-link-color: #0d6efd; - --bs-link-hover-color: #0a58ca; - --bs-code-color: #d63384; - --bs-highlight-bg: #fff3cd; -} - -*, -*::before, -*::after { - box-sizing: border-box; -} - -@media (prefers-reduced-motion: no-preference) { - :root { - scroll-behavior: smooth; - } -} - -body { - margin: 0; - font-family: var(--bs-body-font-family); - font-size: var(--bs-body-font-size); - font-weight: var(--bs-body-font-weight); - line-height: var(--bs-body-line-height); - color: var(--bs-body-color); - text-align: var(--bs-body-text-align); - background-color: var(--bs-body-bg); - -webkit-text-size-adjust: 100%; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} - -hr { - margin: 1rem 0; - color: inherit; - border: 0; - border-top: 1px solid; - opacity: 0.25; -} - -h6, -h5, -h4, -h3, -h2, -h1 { - margin-top: 0; - margin-bottom: 0.5rem; - font-weight: 500; - line-height: 1.2; -} - -h1 { - font-size: calc(1.375rem + 1.5vw); -} -@media (min-width: 1200px) { - h1 { - font-size: 2.5rem; - } -} - -h2 { - font-size: calc(1.325rem + 0.9vw); -} -@media (min-width: 1200px) { - h2 { - font-size: 2rem; - } -} - -h3 { - font-size: calc(1.3rem + 0.6vw); -} -@media (min-width: 1200px) { - h3 { - font-size: 1.75rem; - } -} - -h4 { - font-size: calc(1.275rem + 0.3vw); -} -@media (min-width: 1200px) { - h4 { - font-size: 1.5rem; - } -} - -h5 { - font-size: 1.25rem; -} - -h6 { - font-size: 1rem; -} - -p { - margin-top: 0; - margin-bottom: 1rem; -} - -abbr[title] { - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; - cursor: help; - -webkit-text-decoration-skip-ink: none; - text-decoration-skip-ink: none; -} - -address { - margin-bottom: 1rem; - font-style: normal; - line-height: inherit; -} - -ol, -ul { - padding-left: 2rem; -} - -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: 0.5rem; - margin-left: 0; -} - -blockquote { - margin: 0 0 1rem; -} - -b, -strong { - font-weight: bolder; -} - -small { - font-size: 0.875em; -} - -mark { - padding: 0.1875em; - background-color: var(--bs-highlight-bg); -} - -sub, -sup { - position: relative; - font-size: 0.75em; - line-height: 0; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -a { - color: var(--bs-link-color); - text-decoration: underline; -} -a:hover { - color: var(--bs-link-hover-color); -} - -a:not([href]):not([class]), -a:not([href]):not([class]):hover { - color: inherit; - text-decoration: none; -} - -pre, -code, -kbd, -samp { - font-family: var(--bs-font-monospace); - font-size: 1em; -} - -pre { - display: block; - margin-top: 0; - margin-bottom: 1rem; - overflow: auto; - font-size: 0.875em; -} -pre code { - font-size: inherit; - color: inherit; - word-break: normal; -} - -code { - font-size: 0.875em; - color: var(--bs-code-color); - word-wrap: break-word; -} -a > code { - color: inherit; -} - -kbd { - padding: 0.1875rem 0.375rem; - font-size: 0.875em; - color: var(--bs-body-bg); - background-color: var(--bs-body-color); - border-radius: 0.25rem; -} -kbd kbd { - padding: 0; - font-size: 1em; -} - -figure { - margin: 0 0 1rem; -} - -img, -svg { - vertical-align: middle; -} - -table { - caption-side: bottom; - border-collapse: collapse; -} - -caption { - padding-top: 0.5rem; - padding-bottom: 0.5rem; - color: #6c757d; - text-align: left; -} - -th { - text-align: inherit; - text-align: -webkit-match-parent; -} - -thead, -tbody, -tfoot, -tr, -td, -th { - border-color: inherit; - border-style: solid; - border-width: 0; -} - -label { - display: inline-block; -} - -button { - border-radius: 0; -} - -button:focus:not(:focus-visible) { - outline: 0; -} - -input, -button, -select, -optgroup, -textarea { - margin: 0; - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - -button, -select { - text-transform: none; -} - -[role="button"] { - cursor: pointer; -} - -select { - word-wrap: normal; -} -select:disabled { - opacity: 1; -} - -[list]:not([type="date"]):not([type="datetime-local"]):not([type="month"]):not( - [type="week"] - ):not([type="time"])::-webkit-calendar-picker-indicator { - display: none !important; -} - -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; -} - -::-moz-focus-inner { - padding: 0; - border-style: none; -} - -textarea { - resize: vertical; -} - -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0; -} - -legend { - float: left; - width: 100%; - padding: 0; - margin-bottom: 0.5rem; - font-size: calc(1.275rem + 0.3vw); - line-height: inherit; -} -@media (min-width: 1200px) { - legend { - font-size: 1.5rem; - } -} -legend + * { - clear: left; -} - -::-webkit-datetime-edit-fields-wrapper, -::-webkit-datetime-edit-text, -::-webkit-datetime-edit-minute, -::-webkit-datetime-edit-hour-field, -::-webkit-datetime-edit-day-field, -::-webkit-datetime-edit-month-field, -::-webkit-datetime-edit-year-field { - padding: 0; -} - -::-webkit-inner-spin-button { - height: auto; -} - -[type="search"] { - outline-offset: -2px; - -webkit-appearance: textfield; -} - -/* rtl:raw: -[type="tel"], -[type="url"], -[type="email"], -[type="number"] { - direction: ltr; -} -*/ -::-webkit-search-decoration { - -webkit-appearance: none; -} - -::-webkit-color-swatch-wrapper { - padding: 0; -} - -::-webkit-file-upload-button { - font: inherit; - -webkit-appearance: button; -} - -::file-selector-button { - font: inherit; - -webkit-appearance: button; -} - -output { - display: inline-block; -} - -iframe { - border: 0; -} - -summary { - display: list-item; - cursor: pointer; -} - -progress { - vertical-align: baseline; -} - -[hidden] { - display: none !important; -} - -/*# sourceMappingURL=bootstrap-reboot.css.map */ diff --git a/assets/css/bootstrap-reboot.css.map b/assets/css/bootstrap-reboot.css.map deleted file mode 100644 index d52609ea3..000000000 --- a/assets/css/bootstrap-reboot.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","bootstrap-reboot.css","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_border-radius.scss"],"names":[],"mappings":"AACE;;;;;EAAA;ACDF;EAQI,kBAAA;EAAA,oBAAA;EAAA,oBAAA;EAAA,kBAAA;EAAA,iBAAA;EAAA,oBAAA;EAAA,oBAAA;EAAA,mBAAA;EAAA,kBAAA;EAAA,kBAAA;EAAA,gBAAA;EAAA,gBAAA;EAAA,kBAAA;EAAA,uBAAA;EAIA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAIA,qBAAA;EAAA,uBAAA;EAAA,qBAAA;EAAA,kBAAA;EAAA,qBAAA;EAAA,oBAAA;EAAA,mBAAA;EAAA,kBAAA;EAIA,8BAAA;EAAA,iCAAA;EAAA,6BAAA;EAAA,2BAAA;EAAA,6BAAA;EAAA,4BAAA;EAAA,6BAAA;EAAA,yBAAA;EAGF,6BAAA;EACA,uBAAA;EACA,+BAAA;EACA,+BAAA;EAMA,qNAAA;EACA,yGAAA;EACA,yFAAA;EAOA,gDAAA;EC4PI,yBALI;EDrPR,0BAAA;EACA,0BAAA;EACA,wBAAA;EAIA,kBAAA;EAIA,sBAAA;EACA,wBAAA;EACA,0BAAA;EACA,mDAAA;EAEA,4BAAA;EACA,8BAAA;EACA,6BAAA;EACA,2BAAA;EACA,4BAAA;EACA,8BAAA;EAGA,wBAAA;EACA,8BAAA;EAEA,wBAAA;EAEA,0BAAA;AEEF;;AC1DA;;;EAGE,sBAAA;AD6DF;;AC9CI;EANJ;IAOM,uBAAA;EDkDJ;AACF;;ACrCA;EACE,SAAA;EACA,uCAAA;EFmPI,mCALI;EE5OR,uCAAA;EACA,uCAAA;EACA,2BAAA;EACA,qCAAA;EACA,mCAAA;EACA,8BAAA;EACA,6CAAA;ADwCF;;AC/BA;EACE,cAAA;EACA,cCijB4B;EDhjB5B,SAAA;EACA,qBAAA;EACA,aCujB4B;AFrhB9B;;ACxBA;EACE,aAAA;EACA,qBCwf4B;EDrf5B,gBCwf4B;EDvf5B,gBCwf4B;AF/d9B;;ACrBA;EF6MQ,iCAAA;ACpLR;ADkBI;EE3CJ;IFoNQ,iBAAA;ECvLN;AACF;;ACzBA;EFwMQ,iCAAA;AC3KR;ADSI;EEtCJ;IF+MQ,eAAA;EC9KN;AACF;;AC7BA;EFmMQ,+BAAA;AClKR;ADAI;EEjCJ;IF0MQ,kBAAA;ECrKN;AACF;;ACjCA;EF8LQ,iCAAA;ACzJR;ADTI;EE5BJ;IFqMQ,iBAAA;EC5JN;AACF;;ACrCA;EFqLM,kBALI;ACvIV;;ACpCA;EFgLM,eALI;ACnIV;;AC7BA;EACE,aAAA;EACA,mBCmS0B;AFnQ5B;;ACtBA;EACE,yCAAA;EAAA,iCAAA;EACA,YAAA;EACA,sCAAA;EAAA,8BAAA;ADyBF;;ACnBA;EACE,mBAAA;EACA,kBAAA;EACA,oBAAA;ADsBF;;AChBA;;EAEE,kBAAA;ADmBF;;AChBA;;;EAGE,aAAA;EACA,mBAAA;ADmBF;;AChBA;;;;EAIE,gBAAA;ADmBF;;AChBA;EACE,gBC6X4B;AF1W9B;;ACdA;EACE,qBAAA;EACA,cAAA;ADiBF;;ACXA;EACE,gBAAA;ADcF;;ACNA;;EAEE,mBCsW4B;AF7V9B;;ACDA;EFmFM,kBALI;ACzEV;;ACEA;EACE,iBC+a4B;ED9a5B,wCAAA;ADCF;;ACQA;;EAEE,kBAAA;EF+DI,iBALI;EExDR,cAAA;EACA,wBAAA;ADLF;;ACQA;EAAM,eAAA;ADJN;;ACKA;EAAM,WAAA;ADDN;;ACMA;EACE,2BAAA;EACA,0BCqKwC;AFxK1C;ACKE;EACE,iCAAA;ADHJ;;ACcE;EAEE,cAAA;EACA,qBAAA;ADZJ;;ACmBA;;;;EAIE,qCCkR4B;EH7PxB,cALI;AC/BV;;ACuBA;EACE,cAAA;EACA,aAAA;EACA,mBAAA;EACA,cAAA;EFSI,kBALI;ACvBV;ACwBE;EFII,kBALI;EEGN,cAAA;EACA,kBAAA;ADtBJ;;AC0BA;EFHM,kBALI;EEUR,2BAAA;EACA,qBAAA;ADvBF;AC0BE;EACE,cAAA;ADxBJ;;AC4BA;EACE,2BAAA;EFfI,kBALI;EEsBR,wBCuyCkC;EDtyClC,sCCuyCkC;EC3kDhC,sBAAA;AH4QJ;AC2BE;EACE,UAAA;EFtBE,cALI;ACGV;;ACmCA;EACE,gBAAA;ADhCF;;ACsCA;;EAEE,sBAAA;ADnCF;;AC2CA;EACE,oBAAA;EACA,yBAAA;ADxCF;;AC2CA;EACE,mBCsT4B;EDrT5B,sBCqT4B;EDpT5B,cCjVS;EDkVT,gBAAA;ADxCF;;AC+CA;EAEE,mBAAA;EACA,gCAAA;AD7CF;;ACgDA;;;;;;EAME,qBAAA;EACA,mBAAA;EACA,eAAA;AD7CF;;ACqDA;EACE,qBAAA;ADlDF;;ACwDA;EAEE,gBAAA;ADtDF;;AC8DA;EACE,UAAA;AD3DF;;ACgEA;;;;;EAKE,SAAA;EACA,oBAAA;EFrHI,kBALI;EE4HR,oBAAA;AD7DF;;ACiEA;;EAEE,oBAAA;AD9DF;;ACmEA;EACE,eAAA;ADhEF;;ACmEA;EAGE,iBAAA;ADlEF;ACqEE;EACE,UAAA;ADnEJ;;AC0EA;EACE,wBAAA;ADvEF;;AC+EA;;;;EAIE,0BAAA;AD5EF;AC+EI;;;;EACE,eAAA;AD1EN;;ACiFA;EACE,UAAA;EACA,kBAAA;AD9EF;;ACmFA;EACE,gBAAA;ADhFF;;AC0FA;EACE,YAAA;EACA,UAAA;EACA,SAAA;EACA,SAAA;ADvFF;;AC+FA;EACE,WAAA;EACA,WAAA;EACA,UAAA;EACA,qBC8I4B;EHxVtB,iCAAA;EE6MN,oBAAA;AD7FF;ADlRI;EEwWJ;IF/LQ,iBAAA;EC6GN;AACF;AC0FE;EACE,WAAA;ADxFJ;;AC+FA;;;;;;;EAOE,UAAA;AD5FF;;AC+FA;EACE,YAAA;AD5FF;;ACqGA;EACE,oBAAA;EACA,6BAAA;ADlGF;;AC0GA;;;;;;;CAAA;AAWA;EACE,wBAAA;AD1GF;;AC+GA;EACE,UAAA;AD5GF;;ACmHA;EACE,aAAA;EACA,0BAAA;ADhHF;;AC8GA;EACE,aAAA;EACA,0BAAA;ADhHF;;ACqHA;EACE,qBAAA;ADlHF;;ACuHA;EACE,SAAA;ADpHF;;AC2HA;EACE,kBAAA;EACA,eAAA;ADxHF;;ACgIA;EACE,wBAAA;AD7HF;;ACqIA;EACE,wBAAA;ADlIF","file":"bootstrap-reboot.css","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","/*!\n * Bootstrap Reboot v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: 1px solid;\n opacity: 0.25;\n}\n\nh6, h5, h4, h3, h2, h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1 {\n font-size: 2.5rem;\n }\n}\n\nh2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2 {\n font-size: 2rem;\n }\n}\n\nh3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3 {\n font-size: 1.75rem;\n }\n}\n\nh4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4 {\n font-size: 1.5rem;\n }\n}\n\nh5 {\n font-size: 1.25rem;\n}\n\nh6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n text-decoration: underline dotted;\n cursor: help;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 0.875em;\n}\n\nmark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: var(--bs-link-color);\n text-decoration: underline;\n}\na:hover {\n color: var(--bs-link-hover-color);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: #6c757d;\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: var(--#{$prefix}link-color);\n text-decoration: $link-decoration;\n\n &:hover {\n color: var(--#{$prefix}link-hover-color);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`'); - // $icon.append(this.options.closeIcon); - $container.append($icon); - $container.on('click', { dialog: this }, function (event) { - event.data.dialog.close(); - }); - - return $container; - }, - }); - BootstrapDialog.prototype = { - constructor: BootstrapDialog, - initOptions: function (options) { - this.options = $.extend(true, this.defaultOptions, options); - - return this; - }, - holdThisInstance: function () { - BootstrapDialog.addDialog(this); - - return this; - }, - initModalStuff: function () { - - - this.setModal(this.createModal()) - .setModalDialog(this.createModalDialog()) - .setModalContent(this.createModalContent()) - .setModalHeader(this.createModalHeader()) - .setModalBody(this.createModalBody()) - .setModalFooter(this.createModalFooter()); - - this.getModal().append(this.getModalDialog()); - this.getModalDialog().append(this.getModalContent()); - this.getModalContent() - .append(this.getModalHeader()) - .append(this.getModalBody()) - .append(this.getModalFooter()); - - - - return this; - }, - createModal: function () { - var $modal = $('

'); - $modal.prop('id', this.getId()); - $modal.attr('aria-labelledby', this.getId() + '_title'); - - return $modal; - }, - getModal: function () { - return this.$modal; - }, - setModal: function ($modal) { - this.$modal = $modal; - - return this; - }, - getModalBackdrop: function ($modal) { //FIXME for BootstrapV4 - return $modal.data('bs.modal').$backdrop; - }, - getModalForBootstrapDialogModal: function () { //FIXME for BootstrapV4 - return this.getModal(); - }, - createModalDialog: function () { - return $(''); - }, - getModalDialog: function () { - return this.$modalDialog; - }, - setModalDialog: function ($modalDialog) { - this.$modalDialog = $modalDialog; - - return this; - }, - createModalContent: function () { - return $(''); - }, - getModalContent: function () { - return this.$modalContent; - }, - setModalContent: function ($modalContent) { - this.$modalContent = $modalContent; - - return this; - }, - createModalHeader: function () { - return $(''); - }, - getModalHeader: function () { - return this.$modalHeader; - }, - setModalHeader: function ($modalHeader) { - this.$modalHeader = $modalHeader; - - return this; - }, - createModalBody: function () { - return $(''); - }, - getModalBody: function () { - return this.$modalBody; - }, - setModalBody: function ($modalBody) { - this.$modalBody = $modalBody; - - return this; - }, - createModalFooter: function () { - return $(''); - }, - getModalFooter: function () { - return this.$modalFooter; - }, - setModalFooter: function ($modalFooter) { - this.$modalFooter = $modalFooter; - - return this; - }, - createDynamicContent: function (rawContent) { - var content = null; - if (typeof rawContent === 'function') { - content = rawContent.call(rawContent, this); - } else { - content = rawContent; - } - if (typeof content === 'string') { - content = this.formatStringContent(content); - } - - return content; - }, - formatStringContent: function (content) { - if (this.options.nl2br) { - return content.replace(/\r\n/g, '
').replace(/[\r\n]/g, '
'); - } - - return content; - }, - setData: function (key, value) { - this.options.data[key] = value; - - return this; - }, - getData: function (key) { - return this.options.data[key]; - }, - setId: function (id) { - this.options.id = id; - - return this; - }, - getId: function () { - return this.options.id; - }, - getType: function () { - return this.options.type; - }, - setType: function (type) { - this.options.type = type; - this.updateType(); - - return this; - }, - updateType: function () { - if (this.isRealized()) { - var types = [BootstrapDialog.TYPE_DEFAULT, - BootstrapDialog.TYPE_INFO, - BootstrapDialog.TYPE_PRIMARY, - BootstrapDialog.TYPE_SECONDARY, - BootstrapDialog.TYPE_SUCCESS, - BootstrapDialog.TYPE_WARNING, - BootstrapDialog.TYPE_DARK, - BootstrapDialog.TYPE_LIGHT, - BootstrapDialog.TYPE_DANGER]; - - this.getModal().removeClass(types.join(' ')).addClass(this.getType()); - } - - return this; - }, - getSize: function () { - return this.options.size; - }, - setSize: function (size) { - this.options.size = size; - this.updateSize(); - - return this; - }, - updateSize: function () { - if (this.isRealized()) { - var dialog = this; - - // Dialog size - this.getModal().removeClass(BootstrapDialog.SIZE_NORMAL) - .removeClass(BootstrapDialog.SIZE_SMALL) - .removeClass(BootstrapDialog.SIZE_WIDE) - .removeClass(BootstrapDialog.SIZE_EXTRAWIDE) - .removeClass(BootstrapDialog.SIZE_LARGE); - this.getModal().addClass(this.getSize()); - - // Smaller dialog. - this.getModalDialog().removeClass('modal-sm'); - if (this.getSize() === BootstrapDialog.SIZE_SMALL) { - this.getModalDialog().addClass('modal-sm'); - } - - // Wider dialog. - this.getModalDialog().removeClass('modal-lg'); - if (this.getSize() === BootstrapDialog.SIZE_WIDE) { - this.getModalDialog().addClass('modal-lg'); - } - // Extra Wide Dialog. - this.getModalDialog().removeClass('modal-xl'); - if (this.getSize() === BootstrapDialog.SIZE_EXTRAWIDE) { - this.getModalDialog().addClass('modal-xl'); - } - - // Button size - $.each(this.options.buttons, function (index, button) { - var $button = dialog.getButton(button.id); - var buttonSizes = ['btn-lg', 'btn-sm', 'btn-xs']; - var sizeClassSpecified = false; - if (typeof button['cssClass'] === 'string') { - var btnClasses = button['cssClass'].split(' '); - $.each(btnClasses, function (index, btnClass) { - if ($.inArray(btnClass, buttonSizes) !== -1) { - sizeClassSpecified = true; - } - }); - } - if (!sizeClassSpecified) { - $button.removeClass(buttonSizes.join(' ')); - $button.addClass(dialog.getButtonSize()); - } - }); - } - - return this; - }, - getCssClass: function () { - return this.options.cssClass; - }, - setCssClass: function (cssClass) { - this.options.cssClass = cssClass; - - return this; - }, - getTitle: function () { - return this.options.title; - }, - setTitle: function (title) { - this.options.title = title; - this.updateTitle(); - - return this; - }, - updateTitle: function () { - if (this.isRealized()) { - var title = this.getTitle() !== null ? this.createDynamicContent(this.getTitle()) : this.getDefaultText(); - this.getModalHeader().find('.' + this.getNamespace('title')).html('').append(title).prop('id', this.getId() + '_title'); - } - - return this; - }, - getMessage: function () { - return this.options.message; - }, - setMessage: function (message) { - this.options.message = message; - this.updateMessage(); - - return this; - }, - updateMessage: function () { - if (this.isRealized()) { - var message = this.createDynamicContent(this.getMessage()); - this.getModalBody().find('.' + this.getNamespace('message')).html('').append(message); - } - - return this; - }, - isClosable: function () { - return this.options.closable; - }, - setClosable: function (closable) { - this.options.closable = closable; - this.updateClosable(); - - return this; - }, - setCloseByBackdrop: function (closeByBackdrop) { - this.options.closeByBackdrop = closeByBackdrop; - - return this; - }, - canCloseByBackdrop: function () { - return this.options.closeByBackdrop; - }, - setCloseByKeyboard: function (closeByKeyboard) { - this.options.closeByKeyboard = closeByKeyboard; - - return this; - }, - canCloseByKeyboard: function () { - return this.options.closeByKeyboard; - }, - isAnimate: function () { - return this.options.animate; - }, - setAnimate: function (animate) { - this.options.animate = animate; - - return this; - }, - updateAnimate: function () { - if (this.isRealized()) { - this.getModal().toggleClass('fade', this.isAnimate()); - } - - return this; - }, - getSpinicon: function () { - return this.options.spinicon; - }, - setSpinicon: function (spinicon) { - this.options.spinicon = spinicon; - - return this; - }, - addButton: function (button) { - this.options.buttons.push(button); - - return this; - }, - addButtons: function (buttons) { - var that = this; - $.each(buttons, function (index, button) { - that.addButton(button); - }); - - return this; - }, - getButtons: function () { - return this.options.buttons; - }, - setButtons: function (buttons) { - this.options.buttons = buttons; - this.updateButtons(); - - return this; - }, - /** - * If there is id provided for a button option, it will be in dialog.indexedButtons list. - * - * In that case you can use dialog.getButton(id) to find the button. - * - * @param {type} id - * @returns {undefined} - */ - getButton: function (id) { - if (typeof this.indexedButtons[id] !== 'undefined') { - return this.indexedButtons[id]; - } - - return null; - }, - getButtonSize: function () { - if (typeof BootstrapDialog.BUTTON_SIZES[this.getSize()] !== 'undefined') { - return BootstrapDialog.BUTTON_SIZES[this.getSize()]; - } - - return ''; - }, - updateButtons: function () { - if (this.isRealized()) { - if (this.getButtons().length === 0) { - this.getModalFooter().hide(); - } else { - this.getModalFooter().show().closest('.modal-footer').append(this.createFooterButtons()); - } - } - - return this; - }, - isAutodestroy: function () { - return this.options.autodestroy; - }, - setAutodestroy: function (autodestroy) { - this.options.autodestroy = autodestroy; - }, - getDescription: function () { - return this.options.description; - }, - setDescription: function (description) { - this.options.description = description; - - return this; - }, - getVerticalCentered: function(){ - return this.options.verticalCentered; - }, - setVerticalCentered: function (verticalcentered) { - this.options.verticalCentered = verticalCentered; - - return this; - }, - setTabindex: function (tabindex) { - this.options.tabindex = tabindex; - - return this; - }, - getTabindex: function () { - return this.options.tabindex; - }, - updateTabindex: function () { - if (this.isRealized()) { - this.getModal().attr('tabindex', this.getTabindex()); - } - - return this; - }, - getDefaultText: function () { - return BootstrapDialog.DEFAULT_TEXTS[this.getType()]; - }, - getNamespace: function (name) { - return BootstrapDialog.NAMESPACE + '-' + name; - }, - createHeaderContent: function () { - var $container = $('
'); - $container.addClass(this.getNamespace('header')); - - // title - $container.append(this.createTitleContent()); - - // Close button - $container.append(this.createCloseButton()); - - return $container; - }, - createTitleContent: function () { - var $title = $('
'); - $title.addClass(this.getNamespace('title')); - - return $title; - }, - createCloseButton: function () { - var $container = $('
'); - $container.addClass(this.getNamespace('close-button')); - var $icon = $(''); - $icon.append(this.options.closeIcon); - $container.append($icon); - $container.on('click', { dialog: this }, function (event) { - event.data.dialog.close(); - }); - - return $container; - }, - createBodyContent: function () { - var $container = $('
'); - $container.addClass(this.getNamespace('body')); - - // Message - $container.append(this.createMessageContent()); - - return $container; - }, - createMessageContent: function () { - var $message = $('
'); - $message.addClass(this.getNamespace('message')); - - return $message; - }, - createFooterContent: function () { - var $container = $('
'); - $container.addClass(this.getNamespace('footer')); - - return $container; - }, - createFooterButtons: function () { - var that = this; - - var $container = that.$modalFooter;// $('
'); - //$container.addClass(this.getNamespace('footer-buttons')); - - - this.indexedButtons = {}; - $.each(this.options.buttons, function (index, button) { - if (!button.id) { - button.id = BootstrapDialog.newGuid(); - } - var $button = that.createButton(button); - that.indexedButtons[button.id] = $button; - $container.append($button); - }); - - return $container; - }, - createButton: function (button) { - var $button = $(''); - $button.prop('id', button.id); - $button.data('button', button); - - // Icon - if (typeof button.icon !== 'undefined' && $.trim(button.icon) !== '') { - $button.append(this.createButtonIcon(button.icon)); - } - - // Label - if (typeof button.label !== 'undefined') { - $button.append(button.label); - } - - // title - if (typeof button.title !== 'undefined') { - $button.attr('title', button.title); - } - - // Css class - if (typeof button.cssClass !== 'undefined' && $.trim(button.cssClass) !== '') { - $button.addClass(button.cssClass); - } else { - $button.addClass('btn-secondary'); - } - - // Data attributes - if (typeof button.data === 'object' && button.data.constructor === {}.constructor) { - $.each(button.data, function (key, value) { - $button.attr('data-' + key, value); - }); - } - - // Hotkey - if (typeof button.hotkey !== 'undefined') { - this.registeredButtonHotkeys[button.hotkey] = $button; - } - - // Button on click - $button.on('click', { dialog: this, $button: $button, button: button }, function (event) { - var dialog = event.data.dialog; - var $button = event.data.$button; - var button = $button.data('button'); - if (button.autospin) { - $button.toggleSpin(true); - } - if (typeof button.action === 'function') { - return button.action.call($button, dialog, event); - } - }); - - // Dynamically add extra functions to $button - this.enhanceButton($button); - - //Initialize enabled or not - if (typeof button.enabled !== 'undefined') { - $button.toggleEnable(button.enabled); - } - - $button.addClass("bootstrap4-dialog-button"); - - return $button; - }, - /** - * Dynamically add extra functions to $button - * - * Using '$this' to reference 'this' is just for better readability. - * - * @param {type} $button - * @returns {_L13.BootstrapDialog.prototype} - */ - enhanceButton: function ($button) { - $button.dialog = this; - - // Enable / Disable - $button.toggleEnable = function (enable) { - var $this = this; - if (typeof enable !== 'undefined') { - $this.prop("disabled", !enable).toggleClass('disabled', !enable); - } else { - $this.prop("disabled", !$this.prop("disabled")); - } - - return $this; - }; - $button.enable = function () { - var $this = this; - $this.toggleEnable(true); - - return $this; - }; - $button.disable = function () { - var $this = this; - $this.toggleEnable(false); - - return $this; - }; - - // Icon spinning, helpful for indicating ajax loading status. - $button.toggleSpin = function (spin) { - var $this = this; - var dialog = $this.dialog; - var $icon = $this.find('.' + dialog.getNamespace('button-icon')); - if (typeof spin === 'undefined') { - spin = !($button.find('.icon-spin').length > 0); - } - if (spin) { - $icon.hide(); - $button.prepend(dialog.createButtonIcon(dialog.getSpinicon()).addClass('icon-spin')); - } else { - $icon.show(); - $button.find('.icon-spin').remove(); - } - - return $this; - }; - $button.spin = function () { - var $this = this; - $this.toggleSpin(true); - - return $this; - }; - $button.stopSpin = function () { - var $this = this; - $this.toggleSpin(false); - - return $this; - }; - - return this; - }, - createButtonIcon: function (icon) { - var $icon = $(''); - $icon.addClass(this.getNamespace('button-icon')).addClass(icon); - - return $icon; - }, - /** - * Invoke this only after the dialog is realized. - * - * @param {type} enable - * @returns {undefined} - */ - enableButtons: function (enable) { - $.each(this.indexedButtons, function (id, $button) { - $button.toggleEnable(enable); - }); - - return this; - }, - /** - * Invoke this only after the dialog is realized. - * - * @returns {undefined} - */ - updateClosable: function () { - if (this.isRealized()) { - // Close button - this.getModalHeader().find('.' + this.getNamespace('close-button')).toggle(this.isClosable()); - } - - return this; - }, - /** - * Set handler for modal event 'show.bs.modal'. - * This is a setter! - */ - onShow: function (onshow) { - this.options.onshow = onshow; - - return this; - }, - /** - * Set handler for modal event 'shown.bs.modal'. - * This is a setter! - */ - onShown: function (onshown) { - this.options.onshown = onshown; - - return this; - }, - /** - * Set handler for modal event 'hide.bs.modal'. - * This is a setter! - */ - onHide: function (onhide) { - this.options.onhide = onhide; - - return this; - }, - /** - * Set handler for modal event 'hidden.bs.modal'. - * This is a setter! - */ - onHidden: function (onhidden) { - this.options.onhidden = onhidden; - - return this; - }, - isRealized: function () { - return this.realized; - }, - setRealized: function (realized) { - this.realized = realized; - - return this; - }, - isOpened: function () { - return this.opened; - }, - setOpened: function (opened) { - this.opened = opened; - - return this; - }, - handleModalEvents: function () { - this.getModal().on('show.bs.modal', { dialog: this }, function (event) { - var dialog = event.data.dialog; - dialog.setOpened(true); - if (dialog.isModalEvent(event) && typeof dialog.options.onshow === 'function') { - var openIt = dialog.options.onshow(dialog); - if (openIt === false) { - dialog.setOpened(false); - } - - return openIt; - } - }); - this.getModal().on('shown.bs.modal', { dialog: this }, function (event) { - var dialog = event.data.dialog; - dialog.isModalEvent(event) && typeof dialog.options.onshown === 'function' && dialog.options.onshown(dialog); - }); - this.getModal().on('hide.bs.modal', { dialog: this }, function (event) { - var dialog = event.data.dialog; - dialog.setOpened(false); - if (dialog.isModalEvent(event) && typeof dialog.options.onhide === 'function') { - var hideIt = dialog.options.onhide(dialog); - if (hideIt === false) { - dialog.setOpened(true); - } - - return hideIt; - } - }); - this.getModal().on('hidden.bs.modal', { dialog: this }, function (event) { - var dialog = event.data.dialog; - dialog.isModalEvent(event) && typeof dialog.options.onhidden === 'function' && dialog.options.onhidden(dialog); - if (dialog.isAutodestroy()) { - dialog.setRealized(false); - delete BootstrapDialog.dialogs[dialog.getId()]; - $(this).remove(); - } - BootstrapDialog.moveFocus(); - if ($('.modal').hasClass('in') || $('.modal').hasClass('show')) { - $('body').addClass('modal-open'); - } - }); - - // ESC key support - this.getModal().on('keyup', { dialog: this }, function (event) { - event.which === 27 && event.data.dialog.isClosable() && event.data.dialog.canCloseByKeyboard() && event.data.dialog.close(); - }); - - // Button hotkey - this.getModal().on('keyup', { dialog: this }, function (event) { - var dialog = event.data.dialog; - if (typeof dialog.registeredButtonHotkeys[event.which] !== 'undefined') { - var $button = $(dialog.registeredButtonHotkeys[event.which]); - !$button.prop('disabled') && !$button.is(':focus') && $button.focus().trigger('click'); - } - }); - - return this; - }, - isModalEvent: function (event) { - return typeof event.namespace !== 'undefined' && event.namespace === 'bs.modal'; - }, - makeModalDraggable: function () { - if (this.options.draggable) { - this.getModalHeader().addClass(this.getNamespace('draggable')).on('mousedown', { dialog: this }, function (event) { - event.preventDefault(); - var dialog = event.data.dialog; - dialog.draggableData.isMouseDown = true; - var dialogOffset = dialog.getModalDialog().offset(); - dialog.draggableData.mouseOffset = { - top: event.clientY - dialogOffset.top, - left: event.clientX - dialogOffset.left - }; - }); - this.getModal().on('mouseup', { dialog: this }, function (event) { - event.data.dialog.draggableData.isMouseDown = false; - }); - $('body').on('mousemove', { dialog: this }, function (event) { - var dialog = event.data.dialog; - if (!dialog.draggableData.isMouseDown) { - return; - } - dialog.getModalDialog().offset({ - top: event.clientY - dialog.draggableData.mouseOffset.top, - left: event.clientX - dialog.draggableData.mouseOffset.left - }); - }).on('mouseleave', { dialog: this }, function (event) { - event.data.dialog.draggableData.isMouseDown = false; - }); - } - - return this; - }, - realize: function () { - this.initModalStuff(); - this.getModal().addClass(BootstrapDialog.NAMESPACE) - .addClass(this.getCssClass()); - this.updateSize(); - if (this.getDescription()) { - this.getModal().attr('aria-describedby', this.getDescription()); - } - //this.getModalFooter().append(this.createFooterContent()); - if(this.getVerticalCentered()){ - this.getModalDialog().addClass('modal-dialog-centered'); - } - this.getModalHeader().append(this.createHeaderContent()); - this.getModalBody().append(this.createBodyContent()); - this.getModal().data('bs.modal', new BootstrapDialogModal(this.getModalForBootstrapDialogModal(), { //FIXME for BootstrapV4 - backdrop: (this.isClosable() && this.canCloseByBackdrop()) ? true : 'static', - keyboard: false, - show: false - })); - this.makeModalDraggable(); - this.handleModalEvents(); - this.setRealized(true); - this.updateButtons(); - this.updateType(); - this.updateTitle(); - this.updateMessage(); - this.updateClosable(); - this.updateAnimate(); - this.updateSize(); - this.updateTabindex(); - - return this; - }, - open: function () { - !this.isRealized() && this.realize(); - this.getModal().modal('show'); - - return this; - }, - close: function () { - !this.isRealized() && this.realize(); - this.getModal().modal('hide'); - - return this; - } - }; - - // Add compatible methods. - BootstrapDialog.prototype = $.extend(BootstrapDialog.prototype, BootstrapDialog.METHODS_TO_OVERRIDE[BootstrapDialogModal.getModalVersion()]); - - /** - * RFC4122 version 4 compliant unique id creator. - * - * Added by https://github.com/tufanbarisyildirim/ - * - * @returns {String} - */ - BootstrapDialog.newGuid = function () { - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { - var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8); - return v.toString(16); - }); - }; - - /* ================================================ - * For lazy people - * ================================================ */ - - /** - * Shortcut function: show - * - * @param {type} options - * @returns the created dialog instance - */ - BootstrapDialog.show = function (options) { - return new BootstrapDialog(options).open(); - }; - - /** - * Alert window - * - * @returns the created dialog instance - */ - BootstrapDialog.alert = function () { - var alertOptions = {}; - var defaultAlertOptions = { - type: BootstrapDialog.TYPE_PRIMARY, - title: null, - message: null, - closable: false, - draggable: false, - buttonLabel: BootstrapDialog.DEFAULT_TEXTS.OK, - buttonHotkey: null, - callback: null - }; - - if (typeof arguments[0] === 'object' && arguments[0].constructor === {}.constructor) { - alertOptions = $.extend(true, defaultAlertOptions, arguments[0]); - } else { - alertOptions = $.extend(true, defaultAlertOptions, { - message: arguments[0], - callback: typeof arguments[1] !== 'undefined' ? arguments[1] : null - }); - } - - var dialog = new BootstrapDialog(alertOptions); - dialog.setData('callback', alertOptions.callback); - dialog.addButton({ - label: alertOptions.buttonLabel, - hotkey: alertOptions.buttonHotkey, - action: function (dialog) { - if (typeof dialog.getData('callback') === 'function' && dialog.getData('callback').call(this, true) === false) { - return false; - } - dialog.setData('btnClicked', true); - - return dialog.close(); - } - }); - if (typeof dialog.options.onhide === 'function') { - dialog.onHide(function (dialog) { - var hideIt = true; - if (!dialog.getData('btnClicked') && dialog.isClosable() && typeof dialog.getData('callback') === 'function') { - hideIt = dialog.getData('callback')(false); - } - if (hideIt === false) { - return false; - } - hideIt = this.onhide(dialog); - - return hideIt; - }.bind({ - onhide: dialog.options.onhide - })); - } else { - dialog.onHide(function (dialog) { - var hideIt = true; - if (!dialog.getData('btnClicked') && dialog.isClosable() && typeof dialog.getData('callback') === 'function') { - hideIt = dialog.getData('callback')(false); - } - - return hideIt; - }); - } - - return dialog.open(); - }; - - /** - * Confirm window - * - * @returns the created dialog instance - */ - BootstrapDialog.confirm = function () { - var confirmOptions = {}; - var defaultConfirmOptions = { - type: BootstrapDialog.TYPE_PRIMARY, - title: null, - message: null, - closable: false, - draggable: false, - btnCancelLabel: BootstrapDialog.DEFAULT_TEXTS.CANCEL, - btnCancelClass: null, - btnCancelHotkey: null, - btnOKLabel: BootstrapDialog.DEFAULT_TEXTS.OK, - btnOKClass: null, - btnOKHotkey: null, - btnsOrder: BootstrapDialog.defaultOptions.btnsOrder, - callback: null - }; - if (typeof arguments[0] === 'object' && arguments[0].constructor === {}.constructor) { - confirmOptions = $.extend(true, defaultConfirmOptions, arguments[0]); - } else { - confirmOptions = $.extend(true, defaultConfirmOptions, { - message: arguments[0], - callback: typeof arguments[1] !== 'undefined' ? arguments[1] : null - }); - } - if (confirmOptions.btnOKClass === null) { - confirmOptions.btnOKClass = ['btn', confirmOptions.type.split('-')[1]].join('-'); - } - - var dialog = new BootstrapDialog(confirmOptions); - dialog.setData('callback', confirmOptions.callback); - - var buttons = [{ - label: confirmOptions.btnCancelLabel, - cssClass: confirmOptions.btnCancelClass, - hotkey: confirmOptions.btnCancelHotkey, - action: function (dialog) { - if (typeof dialog.getData('callback') === 'function' && dialog.getData('callback').call(this, false) === false) { - return false; - } - - return dialog.close(); - } - }, { - label: confirmOptions.btnOKLabel, - cssClass: confirmOptions.btnOKClass, - hotkey: confirmOptions.btnOKHotkey, - action: function (dialog) { - if (typeof dialog.getData('callback') === 'function' && dialog.getData('callback').call(this, true) === false) { - return false; - } - - return dialog.close(); - } - }]; - if (confirmOptions.btnsOrder === BootstrapDialog.BUTTONS_ORDER_OK_CANCEL) { - buttons.reverse(); - } - dialog.addButtons(buttons); - - return dialog.open(); - - }; - - /** - * Warning window - * - * @param {type} message - * @returns the created dialog instance - */ - BootstrapDialog.warning = function (message, callback) { - return new BootstrapDialog({ - type: BootstrapDialog.TYPE_WARNING, - message: message - }).open(); - }; - - /** - * Danger window - * - * @param {type} message - * @returns the created dialog instance - */ - BootstrapDialog.danger = function (message, callback) { - return new BootstrapDialog({ - type: BootstrapDialog.TYPE_DANGER, - message: message - }).open(); - }; - - /** - * Success window - * - * @param {type} message - * @returns the created dialog instance - */ - BootstrapDialog.success = function (message, callback) { - return new BootstrapDialog({ - type: BootstrapDialog.TYPE_SUCCESS, - message: message - }).open(); - }; - - return BootstrapDialog; - -})); diff --git a/assets/js/color.jquery.js b/assets/js/color.jquery.js deleted file mode 100755 index 126240272..000000000 --- a/assets/js/color.jquery.js +++ /dev/null @@ -1,123 +0,0 @@ -/* - * jQuery Color Animations - * Copyright 2007 John Resig - * Released under the MIT and GPL licenses. - */ - -(function(jQuery){ - - // We override the animation for all of these color styles - jQuery.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'], function(i,attr){ - jQuery.fx.step[attr] = function(fx){ - if ( fx.state == 0 ) { - fx.start = getColor( fx.elem, attr ); - fx.end = getRGB( fx.end ); - } - - fx.elem.style[attr] = "rgb(" + [ - Math.max(Math.min( parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0]), 255), 0), - Math.max(Math.min( parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1]), 255), 0), - Math.max(Math.min( parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2]), 255), 0) - ].join(",") + ")"; - } - }); - - // Color Conversion functions from highlightFade - // By Blair Mitchelmore - // http://jquery.offput.ca/highlightFade/ - - // Parse strings looking for color tuples [255,255,255] - function getRGB(color) { - var result; - - // Check if we're already dealing with an array of colors - if ( color && color.constructor == Array && color.length == 3 ) - return color; - - // Look for rgb(num,num,num) - if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) - return [parseInt(result[1]), parseInt(result[2]), parseInt(result[3])]; - - // Look for rgb(num%,num%,num%) - if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) - return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55]; - - // Look for #a0b1c2 - if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) - return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)]; - - // Look for #fff - if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) - return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)]; - - // Otherwise, we're most likely dealing with a named color - return colors[jQuery.trim(color).toLowerCase()]; - } - - function getColor(elem, attr) { - var color; - - do { - color = jQuery.curCSS(elem, attr); - - // Keep going until we find an element that has color, or we hit the body - if ( color != '' && color != 'transparent' || jQuery.nodeName(elem, "body") ) - break; - - attr = "backgroundColor"; - } while ( elem = elem.parentNode ); - - return getRGB(color); - }; - - // Some named colors to work with - // From Interface by Stefan Petre - // http://interface.eyecon.ro/ - - var colors = { - aqua:[0,255,255], - azure:[240,255,255], - beige:[245,245,220], - black:[0,0,0], - blue:[0,0,255], - brown:[165,42,42], - cyan:[0,255,255], - darkblue:[0,0,139], - darkcyan:[0,139,139], - darkgrey:[169,169,169], - darkgreen:[0,100,0], - darkkhaki:[189,183,107], - darkmagenta:[139,0,139], - darkolivegreen:[85,107,47], - darkorange:[255,140,0], - darkorchid:[153,50,204], - darkred:[139,0,0], - darksalmon:[233,150,122], - darkviolet:[148,0,211], - fuchsia:[255,0,255], - gold:[255,215,0], - green:[0,128,0], - indigo:[75,0,130], - khaki:[240,230,140], - lightblue:[173,216,230], - lightcyan:[224,255,255], - lightgreen:[144,238,144], - lightgrey:[211,211,211], - lightpink:[255,182,193], - lightyellow:[255,255,224], - lime:[0,255,0], - magenta:[255,0,255], - maroon:[128,0,0], - navy:[0,0,128], - olive:[128,128,0], - orange:[255,165,0], - pink:[255,192,203], - purple:[128,0,128], - violet:[128,0,128], - red:[255,0,0], - silver:[192,192,192], - white:[255,255,255], - yellow:[255,255,0] - }; - -})(jQuery); \ No newline at end of file diff --git a/assets/js/jquery.usmap.js b/assets/js/jquery.usmap.js deleted file mode 100644 index 0b2b1feee..000000000 --- a/assets/js/jquery.usmap.js +++ /dev/null @@ -1,656 +0,0 @@ -(function($, document, window, Raphael, undefined) { - // jQuery Plugin Factory - function jQueryPluginFactory( $, name, methods, getters ){ - getters = getters instanceof Array ? getters : []; - var getters_obj = {}; - for(var i=0; i} - * @readonly - */ - this.icons = this.settings.icons; - - /** - * List of operators - * @member {QueryBuilder.Operator[]} - * @readonly - */ - this.operators = this.settings.operators; - - /** - * List of templates - * @member {object.} - * @readonly - */ - this.templates = this.settings.templates; - - /** - * Plugins configuration - * @member {object.} - * @readonly - */ - this.plugins = this.settings.plugins; - - /** - * Translations object - * @member {object} - * @readonly - */ - this.lang = null; - - // translations : english << 'lang_code' << custom - if (QueryBuilder.regional['en'] === undefined) { - Utils.error('Config', '"i18n/en.js" not loaded.'); - } - this.lang = $.extendext(true, 'replace', {}, QueryBuilder.regional['en'], QueryBuilder.regional[this.settings.lang_code], this.settings.lang); - - // "allow_groups" can be boolean or int - if (this.settings.allow_groups === false) { - this.settings.allow_groups = 0; - } - else if (this.settings.allow_groups === true) { - this.settings.allow_groups = -1; - } - - // init templates - Object.keys(this.templates).forEach(function(tpl) { - if (!this.templates[tpl]) { - this.templates[tpl] = QueryBuilder.templates[tpl]; - } - if (typeof this.templates[tpl] == 'string') { - this.templates[tpl] = doT.template(this.templates[tpl]); - } - }, this); - - // ensure we have a container id - if (!this.$el.attr('id')) { - this.$el.attr('id', 'qb_' + Math.floor(Math.random() * 99999)); - this.status.generated_id = true; - } - this.status.id = this.$el.attr('id'); - - // INIT - this.$el.addClass('query-builder form-inline'); - - this.filters = this.checkFilters(this.filters); - this.operators = this.checkOperators(this.operators); - this.bindEvents(); - this.initPlugins(); -}; - -$.extend(QueryBuilder.prototype, /** @lends QueryBuilder.prototype */ { - /** - * Triggers an event on the builder container - * @param {string} type - * @returns {$.Event} - */ - trigger: function(type) { - var event = new $.Event(this._tojQueryEvent(type), { - builder: this - }); - - this.$el.triggerHandler(event, Array.prototype.slice.call(arguments, 1)); - - return event; - }, - - /** - * Triggers an event on the builder container and returns the modified value - * @param {string} type - * @param {*} value - * @returns {*} - */ - change: function(type, value) { - var event = new $.Event(this._tojQueryEvent(type, true), { - builder: this, - value: value - }); - - this.$el.triggerHandler(event, Array.prototype.slice.call(arguments, 2)); - - return event.value; - }, - - /** - * Attaches an event listener on the builder container - * @param {string} type - * @param {function} cb - * @returns {QueryBuilder} - */ - on: function(type, cb) { - this.$el.on(this._tojQueryEvent(type), cb); - return this; - }, - - /** - * Removes an event listener from the builder container - * @param {string} type - * @param {function} [cb] - * @returns {QueryBuilder} - */ - off: function(type, cb) { - this.$el.off(this._tojQueryEvent(type), cb); - return this; - }, - - /** - * Attaches an event listener called once on the builder container - * @param {string} type - * @param {function} cb - * @returns {QueryBuilder} - */ - once: function(type, cb) { - this.$el.one(this._tojQueryEvent(type), cb); - return this; - }, - - /** - * Appends `.queryBuilder` and optionally `.filter` to the events names - * @param {string} name - * @param {boolean} [filter=false] - * @returns {string} - * @private - */ - _tojQueryEvent: function(name, filter) { - return name.split(' ').map(function(type) { - return type + '.queryBuilder' + (filter ? '.filter' : ''); - }).join(' '); - } -}); - - -/** - * Allowed types and their internal representation - * @type {object.} - * @readonly - * @private - */ -QueryBuilder.types = { - 'string': 'string', - 'integer': 'number', - 'double': 'number', - 'date': 'datetime', - 'time': 'datetime', - 'datetime': 'datetime', - 'boolean': 'boolean' -}; - -/** - * Allowed inputs - * @type {string[]} - * @readonly - * @private - */ -QueryBuilder.inputs = [ - 'text', - 'number', - 'textarea', - 'radio', - 'checkbox', - 'select' -]; - -/** - * Runtime modifiable options with `setOptions` method - * @type {string[]} - * @readonly - * @private - */ -QueryBuilder.modifiable_options = [ - 'display_errors', - 'allow_groups', - 'allow_empty', - 'default_condition', - 'default_filter' -]; - -/** - * CSS selectors for common components - * @type {object.} - * @readonly - */ -QueryBuilder.selectors = { - group_container: '.rules-group-container', - rule_container: '.rule-container', - filter_container: '.rule-filter-container', - operator_container: '.rule-operator-container', - value_container: '.rule-value-container', - error_container: '.error-container', - condition_container: '.rules-group-header .group-conditions', - - rule_header: '.rule-header', - group_header: '.rules-group-header', - group_actions: '.group-actions', - rule_actions: '.rule-actions', - - rules_list: '.rules-group-body>.rules-list', - - group_condition: '.rules-group-header [name$=_cond]', - rule_filter: '.rule-filter-container [name$=_filter]', - rule_operator: '.rule-operator-container [name$=_operator]', - rule_value: '.rule-value-container [name*=_value_]', - - add_rule: '[data-add=rule]', - delete_rule: '[data-delete=rule]', - add_group: '[data-add=group]', - delete_group: '[data-delete=group]' -}; - -/** - * Template strings (see template.js) - * @type {object.} - * @readonly - */ -QueryBuilder.templates = {}; - -/** - * Localized strings (see i18n/) - * @type {object.} - * @readonly - */ -QueryBuilder.regional = {}; - -/** - * Default operators - * @type {object.} - * @readonly - */ -QueryBuilder.OPERATORS = { - equal: { type: 'equal', nb_inputs: 1, multiple: false, apply_to: ['string', 'number', 'datetime', 'boolean'] }, - not_equal: { type: 'not_equal', nb_inputs: 1, multiple: false, apply_to: ['string', 'number', 'datetime', 'boolean'] }, - in: { type: 'in', nb_inputs: 1, multiple: true, apply_to: ['string', 'number', 'datetime'] }, - not_in: { type: 'not_in', nb_inputs: 1, multiple: true, apply_to: ['string', 'number', 'datetime'] }, - less: { type: 'less', nb_inputs: 1, multiple: false, apply_to: ['number', 'datetime'] }, - less_or_equal: { type: 'less_or_equal', nb_inputs: 1, multiple: false, apply_to: ['number', 'datetime'] }, - greater: { type: 'greater', nb_inputs: 1, multiple: false, apply_to: ['number', 'datetime'] }, - greater_or_equal: { type: 'greater_or_equal', nb_inputs: 1, multiple: false, apply_to: ['number', 'datetime'] }, - between: { type: 'between', nb_inputs: 2, multiple: false, apply_to: ['number', 'datetime'] }, - not_between: { type: 'not_between', nb_inputs: 2, multiple: false, apply_to: ['number', 'datetime'] }, - begins_with: { type: 'begins_with', nb_inputs: 1, multiple: false, apply_to: ['string'] }, - not_begins_with: { type: 'not_begins_with', nb_inputs: 1, multiple: false, apply_to: ['string'] }, - contains: { type: 'contains', nb_inputs: 1, multiple: false, apply_to: ['string'] }, - not_contains: { type: 'not_contains', nb_inputs: 1, multiple: false, apply_to: ['string'] }, - ends_with: { type: 'ends_with', nb_inputs: 1, multiple: false, apply_to: ['string'] }, - not_ends_with: { type: 'not_ends_with', nb_inputs: 1, multiple: false, apply_to: ['string'] }, - is_empty: { type: 'is_empty', nb_inputs: 0, multiple: false, apply_to: ['string'] }, - is_not_empty: { type: 'is_not_empty', nb_inputs: 0, multiple: false, apply_to: ['string'] }, - is_null: { type: 'is_null', nb_inputs: 0, multiple: false, apply_to: ['string', 'number', 'datetime', 'boolean'] }, - is_not_null: { type: 'is_not_null', nb_inputs: 0, multiple: false, apply_to: ['string', 'number', 'datetime', 'boolean'] } -}; - -/** - * Default configuration - * @type {object} - * @readonly - */ -QueryBuilder.DEFAULTS = { - filters: [], - plugins: [], - - sort_filters: false, - display_errors: true, - allow_groups: -1, - allow_empty: false, - conditions: ['AND', 'OR'], - default_condition: 'AND', - inputs_separator: ' , ', - select_placeholder: '------', - display_empty_filter: true, - default_filter: null, - optgroups: {}, - - default_rule_flags: { - filter_readonly: false, - operator_readonly: false, - value_readonly: false, - no_delete: false - }, - - default_group_flags: { - condition_readonly: false, - no_add_rule: false, - no_add_group: false, - no_delete: false - }, - - templates: { - group: null, - rule: null, - filterSelect: null, - operatorSelect: null, - ruleValueSelect: null - }, - - lang_code: 'en', - lang: {}, - - operators: [ - 'equal', - 'not_equal', - 'in', - 'not_in', - 'less', - 'less_or_equal', - 'greater', - 'greater_or_equal', - 'between', - 'not_between', - 'begins_with', - 'not_begins_with', - 'contains', - 'not_contains', - 'ends_with', - 'not_ends_with', - 'is_empty', - 'is_not_empty', - 'is_null', - 'is_not_null' - ], - - icons: { - add_group: 'glyphicon glyphicon-plus-sign', - add_rule: 'glyphicon glyphicon-plus', - remove_group: 'glyphicon glyphicon-remove', - remove_rule: 'glyphicon glyphicon-remove', - error: 'glyphicon glyphicon-warning-sign' - } -}; - - -/** - * @module plugins - */ - -/** - * Definition of available plugins - * @type {object.} - */ -QueryBuilder.plugins = {}; - -/** - * Gets or extends the default configuration - * @param {object} [options] - new configuration - * @returns {undefined|object} nothing or configuration object (copy) - */ -QueryBuilder.defaults = function(options) { - if (typeof options == 'object') { - $.extendext(true, 'replace', QueryBuilder.DEFAULTS, options); - } - else if (typeof options == 'string') { - if (typeof QueryBuilder.DEFAULTS[options] == 'object') { - return $.extend(true, {}, QueryBuilder.DEFAULTS[options]); - } - else { - return QueryBuilder.DEFAULTS[options]; - } - } - else { - return $.extend(true, {}, QueryBuilder.DEFAULTS); - } -}; - -/** - * Registers a new plugin - * @param {string} name - * @param {function} fct - init function - * @param {object} [def] - default options - */ -QueryBuilder.define = function(name, fct, def) { - QueryBuilder.plugins[name] = { - fct: fct, - def: def || {} - }; -}; - -/** - * Adds new methods to QueryBuilder prototype - * @param {object.} methods - */ -QueryBuilder.extend = function(methods) { - $.extend(QueryBuilder.prototype, methods); -}; - -/** - * Initializes plugins for an instance - * @throws ConfigError - * @private - */ -QueryBuilder.prototype.initPlugins = function() { - if (!this.plugins) { - return; - } - - if ($.isArray(this.plugins)) { - var tmp = {}; - this.plugins.forEach(function(plugin) { - tmp[plugin] = null; - }); - this.plugins = tmp; - } - - Object.keys(this.plugins).forEach(function(plugin) { - if (plugin in QueryBuilder.plugins) { - this.plugins[plugin] = $.extend(true, {}, - QueryBuilder.plugins[plugin].def, - this.plugins[plugin] || {} - ); - - QueryBuilder.plugins[plugin].fct.call(this, this.plugins[plugin]); - } - else { - Utils.error('Config', 'Unable to find plugin "{0}"', plugin); - } - }, this); -}; - -/** - * Returns the config of a plugin, if the plugin is not loaded, returns the default config. - * @param {string} name - * @param {string} [property] - * @throws ConfigError - * @returns {*} - */ -QueryBuilder.prototype.getPluginOptions = function(name, property) { - var plugin; - if (this.plugins && this.plugins[name]) { - plugin = this.plugins[name]; - } - else if (QueryBuilder.plugins[name]) { - plugin = QueryBuilder.plugins[name].def; - } - - if (plugin) { - if (property) { - return plugin[property]; - } - else { - return plugin; - } - } - else { - Utils.error('Config', 'Unable to find plugin "{0}"', name); - } -}; - - -/** - * Final initialisation of the builder - * @param {object} [rules] - * @fires QueryBuilder.afterInit - * @private - */ -QueryBuilder.prototype.init = function(rules) { - /** - * When the initilization is done, just before creating the root group - * @event afterInit - * @memberof QueryBuilder - */ - this.trigger('afterInit'); - - if (rules) { - this.setRules(rules); - delete this.settings.rules; - } - else { - this.setRoot(true); - } -}; - -/** - * Checks the configuration of each filter - * @param {QueryBuilder.Filter[]} filters - * @returns {QueryBuilder.Filter[]} - * @throws ConfigError - */ -QueryBuilder.prototype.checkFilters = function(filters) { - var definedFilters = []; - - if (!filters || filters.length === 0) { - Utils.error('Config', 'Missing filters list'); - } - - filters.forEach(function(filter, i) { - if (!filter.id) { - Utils.error('Config', 'Missing filter {0} id', i); - } - if (definedFilters.indexOf(filter.id) != -1) { - Utils.error('Config', 'Filter "{0}" already defined', filter.id); - } - definedFilters.push(filter.id); - - if (!filter.type) { - filter.type = 'string'; - } - else if (!QueryBuilder.types[filter.type]) { - Utils.error('Config', 'Invalid type "{0}"', filter.type); - } - - if (!filter.input) { - filter.input = QueryBuilder.types[filter.type] === 'number' ? 'number' : 'text'; - } - else if (typeof filter.input != 'function' && QueryBuilder.inputs.indexOf(filter.input) == -1) { - Utils.error('Config', 'Invalid input "{0}"', filter.input); - } - - if (filter.operators) { - filter.operators.forEach(function(operator) { - if (typeof operator != 'string') { - Utils.error('Config', 'Filter operators must be global operators types (string)'); - } - }); - } - - if (!filter.field) { - filter.field = filter.id; - } - if (!filter.label) { - filter.label = filter.field; - } - - if (!filter.optgroup) { - filter.optgroup = null; - } - else { - this.status.has_optgroup = true; - - // register optgroup if needed - if (!this.settings.optgroups[filter.optgroup]) { - this.settings.optgroups[filter.optgroup] = filter.optgroup; - } - } - - switch (filter.input) { - case 'radio': - case 'checkbox': - if (!filter.values || filter.values.length < 1) { - Utils.error('Config', 'Missing filter "{0}" values', filter.id); - } - break; - - case 'select': - var cleanValues = []; - filter.has_optgroup = false; - - Utils.iterateOptions(filter.values, function(value, label, optgroup) { - cleanValues.push({ - value: value, - label: label, - optgroup: optgroup || null - }); - - if (optgroup) { - filter.has_optgroup = true; - - // register optgroup if needed - if (!this.settings.optgroups[optgroup]) { - this.settings.optgroups[optgroup] = optgroup; - } - } - }.bind(this)); - - if (filter.has_optgroup) { - filter.values = Utils.groupSort(cleanValues, 'optgroup'); - } - else { - filter.values = cleanValues; - } - - if (filter.placeholder) { - if (filter.placeholder_value === undefined) { - filter.placeholder_value = -1; - } - - filter.values.forEach(function(entry) { - if (entry.value == filter.placeholder_value) { - Utils.error('Config', 'Placeholder of filter "{0}" overlaps with one of its values', filter.id); - } - }); - } - break; - } - }, this); - - if (this.settings.sort_filters) { - if (typeof this.settings.sort_filters == 'function') { - filters.sort(this.settings.sort_filters); - } - else { - var self = this; - filters.sort(function(a, b) { - return self.translate(a.label).localeCompare(self.translate(b.label)); - }); - } - } - - if (this.status.has_optgroup) { - filters = Utils.groupSort(filters, 'optgroup'); - } - - return filters; -}; - -/** - * Checks the configuration of each operator - * @param {QueryBuilder.Operator[]} operators - * @returns {QueryBuilder.Operator[]} - * @throws ConfigError - */ -QueryBuilder.prototype.checkOperators = function(operators) { - var definedOperators = []; - - operators.forEach(function(operator, i) { - if (typeof operator == 'string') { - if (!QueryBuilder.OPERATORS[operator]) { - Utils.error('Config', 'Unknown operator "{0}"', operator); - } - - operators[i] = operator = $.extendext(true, 'replace', {}, QueryBuilder.OPERATORS[operator]); - } - else { - if (!operator.type) { - Utils.error('Config', 'Missing "type" for operator {0}', i); - } - - if (QueryBuilder.OPERATORS[operator.type]) { - operators[i] = operator = $.extendext(true, 'replace', {}, QueryBuilder.OPERATORS[operator.type], operator); - } - - if (operator.nb_inputs === undefined || operator.apply_to === undefined) { - Utils.error('Config', 'Missing "nb_inputs" and/or "apply_to" for operator "{0}"', operator.type); - } - } - - if (definedOperators.indexOf(operator.type) != -1) { - Utils.error('Config', 'Operator "{0}" already defined', operator.type); - } - definedOperators.push(operator.type); - - if (!operator.optgroup) { - operator.optgroup = null; - } - else { - this.status.has_operator_optgroup = true; - - // register optgroup if needed - if (!this.settings.optgroups[operator.optgroup]) { - this.settings.optgroups[operator.optgroup] = operator.optgroup; - } - } - }, this); - - if (this.status.has_operator_optgroup) { - operators = Utils.groupSort(operators, 'optgroup'); - } - - return operators; -}; - -/** - * Adds all events listeners to the builder - * @private - */ -QueryBuilder.prototype.bindEvents = function() { - var self = this; - var Selectors = QueryBuilder.selectors; - - // group condition change - this.$el.on('change.queryBuilder', Selectors.group_condition, function() { - if ($(this).is(':checked')) { - var $group = $(this).closest(Selectors.group_container); - self.getModel($group).condition = $(this).val(); - } - }); - - // rule filter change - this.$el.on('change.queryBuilder', Selectors.rule_filter, function() { - var $rule = $(this).closest(Selectors.rule_container); - self.getModel($rule).filter = self.getFilterById($(this).val()); - }); - - // rule operator change - this.$el.on('change.queryBuilder', Selectors.rule_operator, function() { - var $rule = $(this).closest(Selectors.rule_container); - self.getModel($rule).operator = self.getOperatorByType($(this).val()); - }); - - // add rule button - this.$el.on('click.queryBuilder', Selectors.add_rule, function() { - var $group = $(this).closest(Selectors.group_container); - self.addRule(self.getModel($group)); - }); - - // delete rule button - this.$el.on('click.queryBuilder', Selectors.delete_rule, function() { - var $rule = $(this).closest(Selectors.rule_container); - self.deleteRule(self.getModel($rule)); - }); - - if (this.settings.allow_groups !== 0) { - // add group button - this.$el.on('click.queryBuilder', Selectors.add_group, function() { - var $group = $(this).closest(Selectors.group_container); - self.addGroup(self.getModel($group)); - }); - - // delete group button - this.$el.on('click.queryBuilder', Selectors.delete_group, function() { - var $group = $(this).closest(Selectors.group_container); - self.deleteGroup(self.getModel($group)); - }); - } - - // model events - this.model.on({ - 'drop': function(e, node) { - node.$el.remove(); - self.refreshGroupsConditions(); - }, - 'add': function(e, parent, node, index) { - if (index === 0) { - node.$el.prependTo(parent.$el.find('>' + QueryBuilder.selectors.rules_list)); - } - else { - node.$el.insertAfter(parent.rules[index - 1].$el); - } - self.refreshGroupsConditions(); - }, - 'move': function(e, node, group, index) { - node.$el.detach(); - - if (index === 0) { - node.$el.prependTo(group.$el.find('>' + QueryBuilder.selectors.rules_list)); - } - else { - node.$el.insertAfter(group.rules[index - 1].$el); - } - self.refreshGroupsConditions(); - }, - 'update': function(e, node, field, value, oldValue) { - if (node instanceof Rule) { - switch (field) { - case 'error': - self.updateError(node); - break; - - case 'flags': - self.applyRuleFlags(node); - break; - - case 'filter': - self.updateRuleFilter(node, oldValue); - break; - - case 'operator': - self.updateRuleOperator(node, oldValue); - break; - - case 'value': - self.updateRuleValue(node, oldValue); - break; - } - } - else { - switch (field) { - case 'error': - self.updateError(node); - break; - - case 'flags': - self.applyGroupFlags(node); - break; - - case 'condition': - self.updateGroupCondition(node, oldValue); - break; - } - } - } - }); -}; - -/** - * Creates the root group - * @param {boolean} [addRule=true] - adds a default empty rule - * @param {object} [data] - group custom data - * @param {object} [flags] - flags to apply to the group - * @returns {Group} root group - * @fires QueryBuilder.afterAddGroup - */ -QueryBuilder.prototype.setRoot = function(addRule, data, flags) { - addRule = (addRule === undefined || addRule === true); - - var group_id = this.nextGroupId(); - var $group = $(this.getGroupTemplate(group_id, 1)); - - this.$el.append($group); - this.model.root = new Group(null, $group); - this.model.root.model = this.model; - - this.model.root.data = data; - this.model.root.flags = $.extend({}, this.settings.default_group_flags, flags); - this.model.root.condition = this.settings.default_condition; - - this.trigger('afterAddGroup', this.model.root); - - if (addRule) { - this.addRule(this.model.root); - } - - return this.model.root; -}; - -/** - * Adds a new group - * @param {Group} parent - * @param {boolean} [addRule=true] - adds a default empty rule - * @param {object} [data] - group custom data - * @param {object} [flags] - flags to apply to the group - * @returns {Group} - * @fires QueryBuilder.beforeAddGroup - * @fires QueryBuilder.afterAddGroup - */ -QueryBuilder.prototype.addGroup = function(parent, addRule, data, flags) { - addRule = (addRule === undefined || addRule === true); - - var level = parent.level + 1; - - /** - * Just before adding a group, can be prevented. - * @event beforeAddGroup - * @memberof QueryBuilder - * @param {Group} parent - * @param {boolean} addRule - if an empty rule will be added in the group - * @param {int} level - nesting level of the group, 1 is the root group - */ - var e = this.trigger('beforeAddGroup', parent, addRule, level); - if (e.isDefaultPrevented()) { - return null; - } - - var group_id = this.nextGroupId(); - var $group = $(this.getGroupTemplate(group_id, level)); - var model = parent.addGroup($group); - - model.data = data; - model.flags = $.extend({}, this.settings.default_group_flags, flags); - model.condition = this.settings.default_condition; - - /** - * Just after adding a group - * @event afterAddGroup - * @memberof QueryBuilder - * @param {Group} group - */ - this.trigger('afterAddGroup', model); - - /** - * After any change in the rules - * @event rulesChanged - * @memberof QueryBuilder - */ - this.trigger('rulesChanged'); - - if (addRule) { - this.addRule(model); - } - - return model; -}; - -/** - * Tries to delete a group. The group is not deleted if at least one rule is flagged `no_delete`. - * @param {Group} group - * @returns {boolean} if the group has been deleted - * @fires QueryBuilder.beforeDeleteGroup - * @fires QueryBuilder.afterDeleteGroup - */ -QueryBuilder.prototype.deleteGroup = function(group) { - if (group.isRoot()) { - return false; - } - - /** - * Just before deleting a group, can be prevented - * @event beforeDeleteGroup - * @memberof QueryBuilder - * @param {Group} parent - */ - var e = this.trigger('beforeDeleteGroup', group); - if (e.isDefaultPrevented()) { - return false; - } - - var del = true; - - group.each('reverse', function(rule) { - del &= this.deleteRule(rule); - }, function(group) { - del &= this.deleteGroup(group); - }, this); - - if (del) { - group.drop(); - - /** - * Just after deleting a group - * @event afterDeleteGroup - * @memberof QueryBuilder - */ - this.trigger('afterDeleteGroup'); - - this.trigger('rulesChanged'); - } - - return del; -}; - -/** - * Performs actions when a group's condition changes - * @param {Group} group - * @param {object} previousCondition - * @fires QueryBuilder.afterUpdateGroupCondition - * @private - */ -QueryBuilder.prototype.updateGroupCondition = function(group, previousCondition) { - group.$el.find('>' + QueryBuilder.selectors.group_condition).each(function() { - var $this = $(this); - $this.prop('checked', $this.val() === group.condition); - $this.parent().toggleClass('active', $this.val() === group.condition); - }); - - /** - * After the group condition has been modified - * @event afterUpdateGroupCondition - * @memberof QueryBuilder - * @param {Group} group - * @param {object} previousCondition - */ - this.trigger('afterUpdateGroupCondition', group, previousCondition); - - this.trigger('rulesChanged'); -}; - -/** - * Updates the visibility of conditions based on number of rules inside each group - * @private - */ -QueryBuilder.prototype.refreshGroupsConditions = function() { - (function walk(group) { - if (!group.flags || (group.flags && !group.flags.condition_readonly)) { - group.$el.find('>' + QueryBuilder.selectors.group_condition).prop('disabled', group.rules.length <= 1) - .parent().toggleClass('disabled', group.rules.length <= 1); - } - - group.each(null, function(group) { - walk(group); - }, this); - }(this.model.root)); -}; - -/** - * Adds a new rule - * @param {Group} parent - * @param {object} [data] - rule custom data - * @param {object} [flags] - flags to apply to the rule - * @returns {Rule} - * @fires QueryBuilder.beforeAddRule - * @fires QueryBuilder.afterAddRule - * @fires QueryBuilder.changer:getDefaultFilter - */ -QueryBuilder.prototype.addRule = function(parent, data, flags) { - /** - * Just before adding a rule, can be prevented - * @event beforeAddRule - * @memberof QueryBuilder - * @param {Group} parent - */ - var e = this.trigger('beforeAddRule', parent); - if (e.isDefaultPrevented()) { - return null; - } - - var rule_id = this.nextRuleId(); - var $rule = $(this.getRuleTemplate(rule_id)); - var model = parent.addRule($rule); - - model.data = data; - model.flags = $.extend({}, this.settings.default_rule_flags, flags); - - /** - * Just after adding a rule - * @event afterAddRule - * @memberof QueryBuilder - * @param {Rule} rule - */ - this.trigger('afterAddRule', model); - - this.trigger('rulesChanged'); - - this.createRuleFilters(model); - - if (this.settings.default_filter || !this.settings.display_empty_filter) { - /** - * Modifies the default filter for a rule - * @event changer:getDefaultFilter - * @memberof QueryBuilder - * @param {QueryBuilder.Filter} filter - * @param {Rule} rule - * @returns {QueryBuilder.Filter} - */ - model.filter = this.change('getDefaultFilter', - this.getFilterById(this.settings.default_filter || this.filters[0].id), - model - ); - } - - return model; -}; - -/** - * Tries to delete a rule - * @param {Rule} rule - * @returns {boolean} if the rule has been deleted - * @fires QueryBuilder.beforeDeleteRule - * @fires QueryBuilder.afterDeleteRule - */ -QueryBuilder.prototype.deleteRule = function(rule) { - if (rule.flags.no_delete) { - return false; - } - - /** - * Just before deleting a rule, can be prevented - * @event beforeDeleteRule - * @memberof QueryBuilder - * @param {Rule} rule - */ - var e = this.trigger('beforeDeleteRule', rule); - if (e.isDefaultPrevented()) { - return false; - } - - rule.drop(); - - /** - * Just after deleting a rule - * @event afterDeleteRule - * @memberof QueryBuilder - */ - this.trigger('afterDeleteRule'); - - this.trigger('rulesChanged'); - - return true; -}; - -/** - * Creates the filters for a rule - * @param {Rule} rule - * @fires QueryBuilder.changer:getRuleFilters - * @fires QueryBuilder.afterCreateRuleFilters - * @private - */ -QueryBuilder.prototype.createRuleFilters = function(rule) { - /** - * Modifies the list a filters available for a rule - * @event changer:getRuleFilters - * @memberof QueryBuilder - * @param {QueryBuilder.Filter[]} filters - * @param {Rule} rule - * @returns {QueryBuilder.Filter[]} - */ - var filters = this.change('getRuleFilters', this.filters, rule); - var $filterSelect = $(this.getRuleFilterSelect(rule, filters)); - - rule.$el.find(QueryBuilder.selectors.filter_container).html($filterSelect); - - /** - * After creating the dropdown for filters - * @event afterCreateRuleFilters - * @memberof QueryBuilder - * @param {Rule} rule - */ - this.trigger('afterCreateRuleFilters', rule); - - this.applyRuleFlags(rule); -}; - -/** - * Creates the operators for a rule and init the rule operator - * @param {Rule} rule - * @fires QueryBuilder.afterCreateRuleOperators - * @private - */ -QueryBuilder.prototype.createRuleOperators = function(rule) { - var $operatorContainer = rule.$el.find(QueryBuilder.selectors.operator_container).empty(); - - if (!rule.filter) { - return; - } - - var operators = this.getOperators(rule.filter); - var $operatorSelect = $(this.getRuleOperatorSelect(rule, operators)); - - $operatorContainer.html($operatorSelect); - - // set the operator without triggering update event - if (rule.filter.default_operator) { - rule.__.operator = this.getOperatorByType(rule.filter.default_operator); - } - else { - rule.__.operator = operators[0]; - } - - rule.$el.find(QueryBuilder.selectors.rule_operator).val(rule.operator.type); - - /** - * After creating the dropdown for operators - * @event afterCreateRuleOperators - * @memberof QueryBuilder - * @param {Rule} rule - * @param {QueryBuilder.Operator[]} operators - allowed operators for this rule - */ - this.trigger('afterCreateRuleOperators', rule, operators); - - this.applyRuleFlags(rule); -}; - -/** - * Creates the main input for a rule - * @param {Rule} rule - * @fires QueryBuilder.afterCreateRuleInput - * @private - */ -QueryBuilder.prototype.createRuleInput = function(rule) { - var $valueContainer = rule.$el.find(QueryBuilder.selectors.value_container).empty(); - - rule.__.value = undefined; - - if (!rule.filter || !rule.operator || rule.operator.nb_inputs === 0) { - return; - } - - var self = this; - var $inputs = $(); - var filter = rule.filter; - - for (var i = 0; i < rule.operator.nb_inputs; i++) { - var $ruleInput = $(this.getRuleInput(rule, i)); - if (i > 0) $valueContainer.append(this.settings.inputs_separator); - $valueContainer.append($ruleInput); - $inputs = $inputs.add($ruleInput); - } - - $valueContainer.css('display', ''); - - $inputs.on('change ' + (filter.input_event || ''), function() { - if (!rule._updating_input) { - rule._updating_value = true; - rule.value = self.getRuleInputValue(rule); - rule._updating_value = false; - } - }); - - if (filter.plugin) { - $inputs[filter.plugin](filter.plugin_config || {}); - } - - /** - * After creating the input for a rule and initializing optional plugin - * @event afterCreateRuleInput - * @memberof QueryBuilder - * @param {Rule} rule - */ - this.trigger('afterCreateRuleInput', rule); - - if (filter.default_value !== undefined) { - rule.value = filter.default_value; - } - else { - rule._updating_value = true; - rule.value = self.getRuleInputValue(rule); - rule._updating_value = false; - } - - this.applyRuleFlags(rule); -}; - -/** - * Performs action when a rule's filter changes - * @param {Rule} rule - * @param {object} previousFilter - * @fires QueryBuilder.afterUpdateRuleFilter - * @private - */ -QueryBuilder.prototype.updateRuleFilter = function(rule, previousFilter) { - this.createRuleOperators(rule); - this.createRuleInput(rule); - - rule.$el.find(QueryBuilder.selectors.rule_filter).val(rule.filter ? rule.filter.id : '-1'); - - // clear rule data if the filter changed - if (previousFilter && rule.filter && previousFilter.id !== rule.filter.id) { - rule.data = undefined; - } - - /** - * After the filter has been updated and the operators and input re-created - * @event afterUpdateRuleFilter - * @memberof QueryBuilder - * @param {Rule} rule - * @param {object} previousFilter - */ - this.trigger('afterUpdateRuleFilter', rule, previousFilter); - - this.trigger('rulesChanged'); -}; - -/** - * Performs actions when a rule's operator changes - * @param {Rule} rule - * @param {object} previousOperator - * @fires QueryBuilder.afterUpdateRuleOperator - * @private - */ -QueryBuilder.prototype.updateRuleOperator = function(rule, previousOperator) { - var $valueContainer = rule.$el.find(QueryBuilder.selectors.value_container); - - if (!rule.operator || rule.operator.nb_inputs === 0) { - $valueContainer.hide(); - - rule.__.value = undefined; - } - else { - $valueContainer.css('display', ''); - - if ($valueContainer.is(':empty') || !previousOperator || - rule.operator.nb_inputs !== previousOperator.nb_inputs || - rule.operator.optgroup !== previousOperator.optgroup - ) { - this.createRuleInput(rule); - } - } - - if (rule.operator) { - rule.$el.find(QueryBuilder.selectors.rule_operator).val(rule.operator.type); - - // refresh value if the format changed for this operator - rule.__.value = this.getRuleInputValue(rule); - } - - /** - * After the operator has been updated and the input optionally re-created - * @event afterUpdateRuleOperator - * @memberof QueryBuilder - * @param {Rule} rule - * @param {object} previousOperator - */ - this.trigger('afterUpdateRuleOperator', rule, previousOperator); - - this.trigger('rulesChanged'); -}; - -/** - * Performs actions when rule's value changes - * @param {Rule} rule - * @param {object} previousValue - * @fires QueryBuilder.afterUpdateRuleValue - * @private - */ -QueryBuilder.prototype.updateRuleValue = function(rule, previousValue) { - if (!rule._updating_value) { - this.setRuleInputValue(rule, rule.value); - } - - /** - * After the rule value has been modified - * @event afterUpdateRuleValue - * @memberof QueryBuilder - * @param {Rule} rule - * @param {*} previousValue - */ - this.trigger('afterUpdateRuleValue', rule, previousValue); - - this.trigger('rulesChanged'); -}; - -/** - * Changes a rule's properties depending on its flags - * @param {Rule} rule - * @fires QueryBuilder.afterApplyRuleFlags - * @private - */ -QueryBuilder.prototype.applyRuleFlags = function(rule) { - var flags = rule.flags; - var Selectors = QueryBuilder.selectors; - - rule.$el.find(Selectors.rule_filter).prop('disabled', flags.filter_readonly); - rule.$el.find(Selectors.rule_operator).prop('disabled', flags.operator_readonly); - rule.$el.find(Selectors.rule_value).prop('disabled', flags.value_readonly); - - if (flags.no_delete) { - rule.$el.find(Selectors.delete_rule).remove(); - } - - /** - * After rule's flags has been applied - * @event afterApplyRuleFlags - * @memberof QueryBuilder - * @param {Rule} rule - */ - this.trigger('afterApplyRuleFlags', rule); -}; - -/** - * Changes group's properties depending on its flags - * @param {Group} group - * @fires QueryBuilder.afterApplyGroupFlags - * @private - */ -QueryBuilder.prototype.applyGroupFlags = function(group) { - var flags = group.flags; - var Selectors = QueryBuilder.selectors; - - group.$el.find('>' + Selectors.group_condition).prop('disabled', flags.condition_readonly) - .parent().toggleClass('readonly', flags.condition_readonly); - - if (flags.no_add_rule) { - group.$el.find(Selectors.add_rule).remove(); - } - if (flags.no_add_group) { - group.$el.find(Selectors.add_group).remove(); - } - if (flags.no_delete) { - group.$el.find(Selectors.delete_group).remove(); - } - - /** - * After group's flags has been applied - * @event afterApplyGroupFlags - * @memberof QueryBuilder - * @param {Group} group - */ - this.trigger('afterApplyGroupFlags', group); -}; - -/** - * Clears all errors markers - * @param {Node} [node] default is root Group - */ -QueryBuilder.prototype.clearErrors = function(node) { - node = node || this.model.root; - - if (!node) { - return; - } - - node.error = null; - - if (node instanceof Group) { - node.each(function(rule) { - rule.error = null; - }, function(group) { - this.clearErrors(group); - }, this); - } -}; - -/** - * Adds/Removes error on a Rule or Group - * @param {Node} node - * @fires QueryBuilder.changer:displayError - * @private - */ -QueryBuilder.prototype.updateError = function(node) { - if (this.settings.display_errors) { - if (node.error === null) { - node.$el.removeClass('has-error'); - } - else { - var errorMessage = this.translate('errors', node.error[0]); - errorMessage = Utils.fmt(errorMessage, node.error.slice(1)); - - /** - * Modifies an error message before display - * @event changer:displayError - * @memberof QueryBuilder - * @param {string} errorMessage - the error message (translated and formatted) - * @param {array} error - the raw error array (error code and optional arguments) - * @param {Node} node - * @returns {string} - */ - errorMessage = this.change('displayError', errorMessage, node.error, node); - - node.$el.addClass('has-error') - .find(QueryBuilder.selectors.error_container).eq(0) - .attr('title', errorMessage); - } - } -}; - -/** - * Triggers a validation error event - * @param {Node} node - * @param {string|array} error - * @param {*} value - * @fires QueryBuilder.validationError - * @private - */ -QueryBuilder.prototype.triggerValidationError = function(node, error, value) { - if (!$.isArray(error)) { - error = [error]; - } - - /** - * Fired when a validation error occurred, can be prevented - * @event validationError - * @memberof QueryBuilder - * @param {Node} node - * @param {string} error - * @param {*} value - */ - var e = this.trigger('validationError', node, error, value); - if (!e.isDefaultPrevented()) { - node.error = error; - } -}; - - -/** - * Destroys the builder - * @fires QueryBuilder.beforeDestroy - */ -QueryBuilder.prototype.destroy = function() { - /** - * Before the {@link QueryBuilder#destroy} method - * @event beforeDestroy - * @memberof QueryBuilder - */ - this.trigger('beforeDestroy'); - - if (this.status.generated_id) { - this.$el.removeAttr('id'); - } - - this.clear(); - this.model = null; - - this.$el - .off('.queryBuilder') - .removeClass('query-builder') - .removeData('queryBuilder'); - - delete this.$el[0].queryBuilder; -}; - -/** - * Clear all rules and resets the root group - * @fires QueryBuilder.beforeReset - * @fires QueryBuilder.afterReset - */ -QueryBuilder.prototype.reset = function() { - /** - * Before the {@link QueryBuilder#reset} method, can be prevented - * @event beforeReset - * @memberof QueryBuilder - */ - var e = this.trigger('beforeReset'); - if (e.isDefaultPrevented()) { - return; - } - - this.status.group_id = 1; - this.status.rule_id = 0; - - this.model.root.empty(); - - this.model.root.data = undefined; - this.model.root.flags = $.extend({}, this.settings.default_group_flags); - this.model.root.condition = this.settings.default_condition; - - this.addRule(this.model.root); - - /** - * After the {@link QueryBuilder#reset} method - * @event afterReset - * @memberof QueryBuilder - */ - this.trigger('afterReset'); - - this.trigger('rulesChanged'); -}; - -/** - * Clears all rules and removes the root group - * @fires QueryBuilder.beforeClear - * @fires QueryBuilder.afterClear - */ -QueryBuilder.prototype.clear = function() { - /** - * Before the {@link QueryBuilder#clear} method, can be prevented - * @event beforeClear - * @memberof QueryBuilder - */ - var e = this.trigger('beforeClear'); - if (e.isDefaultPrevented()) { - return; - } - - this.status.group_id = 0; - this.status.rule_id = 0; - - if (this.model.root) { - this.model.root.drop(); - this.model.root = null; - } - - /** - * After the {@link QueryBuilder#clear} method - * @event afterClear - * @memberof QueryBuilder - */ - this.trigger('afterClear'); - - this.trigger('rulesChanged'); -}; - -/** - * Modifies the builder configuration.
- * Only options defined in QueryBuilder.modifiable_options are modifiable - * @param {object} options - */ -QueryBuilder.prototype.setOptions = function(options) { - $.each(options, function(opt, value) { - if (QueryBuilder.modifiable_options.indexOf(opt) !== -1) { - this.settings[opt] = value; - } - }.bind(this)); -}; - -/** - * Returns the model associated to a DOM object, or the root model - * @param {jQuery} [target] - * @returns {Node} - */ -QueryBuilder.prototype.getModel = function(target) { - if (!target) { - return this.model.root; - } - else if (target instanceof Node) { - return target; - } - else { - return $(target).data('queryBuilderModel'); - } -}; - -/** - * Validates the whole builder - * @param {object} [options] - * @param {boolean} [options.skip_empty=false] - skips validating rules that have no filter selected - * @returns {boolean} - * @fires QueryBuilder.changer:validate - */ -QueryBuilder.prototype.validate = function(options) { - options = $.extend({ - skip_empty: false - }, options); - - this.clearErrors(); - - var self = this; - - var valid = (function parse(group) { - var done = 0; - var errors = 0; - - group.each(function(rule) { - if (!rule.filter && options.skip_empty) { - return; - } - - if (!rule.filter) { - self.triggerValidationError(rule, 'no_filter', null); - errors++; - return; - } - - if (!rule.operator) { - self.triggerValidationError(rule, 'no_operator', null); - errors++; - return; - } - - if (rule.operator.nb_inputs !== 0) { - var valid = self.validateValue(rule, rule.value); - - if (valid !== true) { - self.triggerValidationError(rule, valid, rule.value); - errors++; - return; - } - } - - done++; - - }, function(group) { - var res = parse(group); - if (res === true) { - done++; - } - else if (res === false) { - errors++; - } - }); - - if (errors > 0) { - return false; - } - else if (done === 0 && !group.isRoot() && options.skip_empty) { - return null; - } - else if (done === 0 && (!self.settings.allow_empty || !group.isRoot())) { - self.triggerValidationError(group, 'empty_group', null); - return false; - } - - return true; - - }(this.model.root)); - - /** - * Modifies the result of the {@link QueryBuilder#validate} method - * @event changer:validate - * @memberof QueryBuilder - * @param {boolean} valid - * @returns {boolean} - */ - return this.change('validate', valid); -}; - -/** - * Gets an object representing current rules - * @param {object} [options] - * @param {boolean|string} [options.get_flags=false] - export flags, true: only changes from default flags or 'all' - * @param {boolean} [options.allow_invalid=false] - returns rules even if they are invalid - * @param {boolean} [options.skip_empty=false] - remove rules that have no filter selected - * @returns {object} - * @fires QueryBuilder.changer:ruleToJson - * @fires QueryBuilder.changer:groupToJson - * @fires QueryBuilder.changer:getRules - */ -QueryBuilder.prototype.getRules = function(options) { - options = $.extend({ - get_flags: false, - allow_invalid: false, - skip_empty: false - }, options); - - var valid = this.validate(options); - if (!valid && !options.allow_invalid) { - return null; - } - - var self = this; - - var out = (function parse(group) { - var groupData = { - condition: group.condition, - rules: [] - }; - - if (group.data) { - groupData.data = $.extendext(true, 'replace', {}, group.data); - } - - if (options.get_flags) { - var flags = self.getGroupFlags(group.flags, options.get_flags === 'all'); - if (!$.isEmptyObject(flags)) { - groupData.flags = flags; - } - } - - group.each(function(rule) { - if (!rule.filter && options.skip_empty) { - return; - } - - var value = null; - if (!rule.operator || rule.operator.nb_inputs !== 0) { - value = rule.value; - } - - var ruleData = { - id: rule.filter ? rule.filter.id : null, - field: rule.filter ? rule.filter.field : null, - type: rule.filter ? rule.filter.type : null, - input: rule.filter ? rule.filter.input : null, - operator: rule.operator ? rule.operator.type : null, - value: value - }; - - if (rule.filter && rule.filter.data || rule.data) { - ruleData.data = $.extendext(true, 'replace', {}, rule.filter.data, rule.data); - } - - if (options.get_flags) { - var flags = self.getRuleFlags(rule.flags, options.get_flags === 'all'); - if (!$.isEmptyObject(flags)) { - ruleData.flags = flags; - } - } - - /** - * Modifies the JSON generated from a Rule object - * @event changer:ruleToJson - * @memberof QueryBuilder - * @param {object} json - * @param {Rule} rule - * @returns {object} - */ - groupData.rules.push(self.change('ruleToJson', ruleData, rule)); - - }, function(model) { - var data = parse(model); - if (data.rules.length !== 0 || !options.skip_empty) { - groupData.rules.push(data); - } - }, this); - - /** - * Modifies the JSON generated from a Group object - * @event changer:groupToJson - * @memberof QueryBuilder - * @param {object} json - * @param {Group} group - * @returns {object} - */ - return self.change('groupToJson', groupData, group); - - }(this.model.root)); - - out.valid = valid; - - /** - * Modifies the result of the {@link QueryBuilder#getRules} method - * @event changer:getRules - * @memberof QueryBuilder - * @param {object} json - * @returns {object} - */ - return this.change('getRules', out); -}; - -/** - * Sets rules from object - * @param {object} data - * @param {object} [options] - * @param {boolean} [options.allow_invalid=false] - silent-fail if the data are invalid - * @throws RulesError, UndefinedConditionError - * @fires QueryBuilder.changer:setRules - * @fires QueryBuilder.changer:jsonToRule - * @fires QueryBuilder.changer:jsonToGroup - * @fires QueryBuilder.afterSetRules - */ -QueryBuilder.prototype.setRules = function(data, options) { - options = $.extend({ - allow_invalid: false - }, options); - - if ($.isArray(data)) { - data = { - condition: this.settings.default_condition, - rules: data - }; - } - - if (!data || !data.rules || (data.rules.length === 0 && !this.settings.allow_empty)) { - Utils.error('RulesParse', 'Incorrect data object passed'); - } - - this.clear(); - this.setRoot(false, data.data, this.parseGroupFlags(data)); - - /** - * Modifies data before the {@link QueryBuilder#setRules} method - * @event changer:setRules - * @memberof QueryBuilder - * @param {object} json - * @param {object} options - * @returns {object} - */ - data = this.change('setRules', data, options); - - var self = this; - - (function add(data, group) { - if (group === null) { - return; - } - - if (data.condition === undefined) { - data.condition = self.settings.default_condition; - } - else if (self.settings.conditions.indexOf(data.condition) == -1) { - Utils.error(!options.allow_invalid, 'UndefinedCondition', 'Invalid condition "{0}"', data.condition); - data.condition = self.settings.default_condition; - } - - group.condition = data.condition; - - data.rules.forEach(function(item) { - var model; - - if (item.rules !== undefined) { - if (self.settings.allow_groups !== -1 && self.settings.allow_groups < group.level) { - Utils.error(!options.allow_invalid, 'RulesParse', 'No more than {0} groups are allowed', self.settings.allow_groups); - self.reset(); - } - else { - model = self.addGroup(group, false, item.data, self.parseGroupFlags(item)); - if (model === null) { - return; - } - - add(item, model); - } - } - else { - if (!item.empty) { - if (item.id === undefined) { - Utils.error(!options.allow_invalid, 'RulesParse', 'Missing rule field id'); - item.empty = true; - } - if (item.operator === undefined) { - item.operator = 'equal'; - } - } - - model = self.addRule(group, item.data, self.parseRuleFlags(item)); - if (model === null) { - return; - } - - if (!item.empty) { - model.filter = self.getFilterById(item.id, !options.allow_invalid); - } - - if (model.filter) { - model.operator = self.getOperatorByType(item.operator, !options.allow_invalid); - - if (!model.operator) { - model.operator = self.getOperators(model.filter)[0]; - } - } - - if (model.operator && model.operator.nb_inputs !== 0) { - if (item.value !== undefined) { - model.value = item.value; - } - else if (model.filter.default_value !== undefined) { - model.value = model.filter.default_value; - } - } - - /** - * Modifies the Rule object generated from the JSON - * @event changer:jsonToRule - * @memberof QueryBuilder - * @param {Rule} rule - * @param {object} json - * @returns {Rule} the same rule - */ - if (self.change('jsonToRule', model, item) != model) { - Utils.error('RulesParse', 'Plugin tried to change rule reference'); - } - } - }); - - /** - * Modifies the Group object generated from the JSON - * @event changer:jsonToGroup - * @memberof QueryBuilder - * @param {Group} group - * @param {object} json - * @returns {Group} the same group - */ - if (self.change('jsonToGroup', group, data) != group) { - Utils.error('RulesParse', 'Plugin tried to change group reference'); - } - - }(data, this.model.root)); - - /** - * After the {@link QueryBuilder#setRules} method - * @event afterSetRules - * @memberof QueryBuilder - */ - this.trigger('afterSetRules'); -}; - - -/** - * Performs value validation - * @param {Rule} rule - * @param {string|string[]} value - * @returns {array|boolean} true or error array - * @fires QueryBuilder.changer:validateValue - */ -QueryBuilder.prototype.validateValue = function(rule, value) { - var validation = rule.filter.validation || {}; - var result = true; - - if (validation.callback) { - result = validation.callback.call(this, value, rule); - } - else { - result = this._validateValue(rule, value); - } - - /** - * Modifies the result of the rule validation method - * @event changer:validateValue - * @memberof QueryBuilder - * @param {array|boolean} result - true or an error array - * @param {*} value - * @param {Rule} rule - * @returns {array|boolean} - */ - return this.change('validateValue', result, value, rule); -}; - -/** - * Default validation function - * @param {Rule} rule - * @param {string|string[]} value - * @returns {array|boolean} true or error array - * @throws ConfigError - * @private - */ -QueryBuilder.prototype._validateValue = function(rule, value) { - var filter = rule.filter; - var operator = rule.operator; - var validation = filter.validation || {}; - var result = true; - var tmp, tempValue; - - if (rule.operator.nb_inputs === 1) { - value = [value]; - } - - for (var i = 0; i < operator.nb_inputs; i++) { - if (!operator.multiple && $.isArray(value[i]) && value[i].length > 1) { - result = ['operator_not_multiple', operator.type, this.translate('operators', operator.type)]; - break; - } - - switch (filter.input) { - case 'radio': - if (value[i] === undefined || value[i].length === 0) { - if (!validation.allow_empty_value) { - result = ['radio_empty']; - } - break; - } - break; - - case 'checkbox': - if (value[i] === undefined || value[i].length === 0) { - if (!validation.allow_empty_value) { - result = ['checkbox_empty']; - } - break; - } - break; - - case 'select': - if (value[i] === undefined || value[i].length === 0 || (filter.placeholder && value[i] == filter.placeholder_value)) { - if (!validation.allow_empty_value) { - result = ['select_empty']; - } - break; - } - break; - - default: - tempValue = $.isArray(value[i]) ? value[i] : [value[i]]; - - for (var j = 0; j < tempValue.length; j++) { - switch (QueryBuilder.types[filter.type]) { - case 'string': - if (tempValue[j] === undefined || tempValue[j].length === 0) { - if (!validation.allow_empty_value) { - result = ['string_empty']; - } - break; - } - if (validation.min !== undefined) { - if (tempValue[j].length < parseInt(validation.min)) { - result = [this.getValidationMessage(validation, 'min', 'string_exceed_min_length'), validation.min]; - break; - } - } - if (validation.max !== undefined) { - if (tempValue[j].length > parseInt(validation.max)) { - result = [this.getValidationMessage(validation, 'max', 'string_exceed_max_length'), validation.max]; - break; - } - } - if (validation.format) { - if (typeof validation.format == 'string') { - validation.format = new RegExp(validation.format); - } - if (!validation.format.test(tempValue[j])) { - result = [this.getValidationMessage(validation, 'format', 'string_invalid_format'), validation.format]; - break; - } - } - break; - - case 'number': - if (tempValue[j] === undefined || tempValue[j].length === 0) { - if (!validation.allow_empty_value) { - result = ['number_nan']; - } - break; - } - if (isNaN(tempValue[j])) { - result = ['number_nan']; - break; - } - if (filter.type == 'integer') { - if (parseInt(tempValue[j]) != tempValue[j]) { - result = ['number_not_integer']; - break; - } - } - else { - if (parseFloat(tempValue[j]) != tempValue[j]) { - result = ['number_not_double']; - break; - } - } - if (validation.min !== undefined) { - if (tempValue[j] < parseFloat(validation.min)) { - result = [this.getValidationMessage(validation, 'min', 'number_exceed_min'), validation.min]; - break; - } - } - if (validation.max !== undefined) { - if (tempValue[j] > parseFloat(validation.max)) { - result = [this.getValidationMessage(validation, 'max', 'number_exceed_max'), validation.max]; - break; - } - } - if (validation.step !== undefined && validation.step !== 'any') { - var v = (tempValue[j] / validation.step).toPrecision(14); - if (parseInt(v) != v) { - result = [this.getValidationMessage(validation, 'step', 'number_wrong_step'), validation.step]; - break; - } - } - break; - - case 'datetime': - if (tempValue[j] === undefined || tempValue[j].length === 0) { - if (!validation.allow_empty_value) { - result = ['datetime_empty']; - } - break; - } - - // we need MomentJS - if (validation.format) { - if (!('moment' in window)) { - Utils.error('MissingLibrary', 'MomentJS is required for Date/Time validation. Get it here http://momentjs.com'); - } - - var datetime = moment(tempValue[j], validation.format); - if (!datetime.isValid()) { - result = [this.getValidationMessage(validation, 'format', 'datetime_invalid'), validation.format]; - break; - } - else { - if (validation.min) { - if (datetime < moment(validation.min, validation.format)) { - result = [this.getValidationMessage(validation, 'min', 'datetime_exceed_min'), validation.min]; - break; - } - } - if (validation.max) { - if (datetime > moment(validation.max, validation.format)) { - result = [this.getValidationMessage(validation, 'max', 'datetime_exceed_max'), validation.max]; - break; - } - } - } - } - break; - - case 'boolean': - if (tempValue[j] === undefined || tempValue[j].length === 0) { - if (!validation.allow_empty_value) { - result = ['boolean_not_valid']; - } - break; - } - tmp = ('' + tempValue[j]).trim().toLowerCase(); - if (tmp !== 'true' && tmp !== 'false' && tmp !== '1' && tmp !== '0' && tempValue[j] !== 1 && tempValue[j] !== 0) { - result = ['boolean_not_valid']; - break; - } - } - - if (result !== true) { - break; - } - } - } - - if (result !== true) { - break; - } - } - - if ((rule.operator.type === 'between' || rule.operator.type === 'not_between') && value.length === 2) { - switch (QueryBuilder.types[filter.type]) { - case 'number': - if (value[0] > value[1]) { - result = ['number_between_invalid', value[0], value[1]]; - } - break; - - case 'datetime': - // we need MomentJS - if (validation.format) { - if (!('moment' in window)) { - Utils.error('MissingLibrary', 'MomentJS is required for Date/Time validation. Get it here http://momentjs.com'); - } - - if (moment(value[0], validation.format).isAfter(moment(value[1], validation.format))) { - result = ['datetime_between_invalid', value[0], value[1]]; - } - } - break; - } - } - - return result; -}; - -/** - * Returns an incremented group ID - * @returns {string} - * @private - */ -QueryBuilder.prototype.nextGroupId = function() { - return this.status.id + '_group_' + (this.status.group_id++); -}; - -/** - * Returns an incremented rule ID - * @returns {string} - * @private - */ -QueryBuilder.prototype.nextRuleId = function() { - return this.status.id + '_rule_' + (this.status.rule_id++); -}; - -/** - * Returns the operators for a filter - * @param {string|object} filter - filter id or filter object - * @returns {object[]} - * @fires QueryBuilder.changer:getOperators - * @private - */ -QueryBuilder.prototype.getOperators = function(filter) { - if (typeof filter == 'string') { - filter = this.getFilterById(filter); - } - - var result = []; - - for (var i = 0, l = this.operators.length; i < l; i++) { - // filter operators check - if (filter.operators) { - if (filter.operators.indexOf(this.operators[i].type) == -1) { - continue; - } - } - // type check - else if (this.operators[i].apply_to.indexOf(QueryBuilder.types[filter.type]) == -1) { - continue; - } - - result.push(this.operators[i]); - } - - // keep sort order defined for the filter - if (filter.operators) { - result.sort(function(a, b) { - return filter.operators.indexOf(a.type) - filter.operators.indexOf(b.type); - }); - } - - /** - * Modifies the operators available for a filter - * @event changer:getOperators - * @memberof QueryBuilder - * @param {QueryBuilder.Operator[]} operators - * @param {QueryBuilder.Filter} filter - * @returns {QueryBuilder.Operator[]} - */ - return this.change('getOperators', result, filter); -}; - -/** - * Returns a particular filter by its id - * @param {string} id - * @param {boolean} [doThrow=true] - * @returns {object|null} - * @throws UndefinedFilterError - * @private - */ -QueryBuilder.prototype.getFilterById = function(id, doThrow) { - if (id == '-1') { - return null; - } - - for (var i = 0, l = this.filters.length; i < l; i++) { - if (this.filters[i].id == id) { - return this.filters[i]; - } - } - - Utils.error(doThrow !== false, 'UndefinedFilter', 'Undefined filter "{0}"', id); - - return null; -}; - -/** - * Returns a particular operator by its type - * @param {string} type - * @param {boolean} [doThrow=true] - * @returns {object|null} - * @throws UndefinedOperatorError - * @private - */ -QueryBuilder.prototype.getOperatorByType = function(type, doThrow) { - if (type == '-1') { - return null; - } - - for (var i = 0, l = this.operators.length; i < l; i++) { - if (this.operators[i].type == type) { - return this.operators[i]; - } - } - - Utils.error(doThrow !== false, 'UndefinedOperator', 'Undefined operator "{0}"', type); - - return null; -}; - -/** - * Returns rule's current input value - * @param {Rule} rule - * @returns {*} - * @fires QueryBuilder.changer:getRuleValue - * @private - */ -QueryBuilder.prototype.getRuleInputValue = function(rule) { - var filter = rule.filter; - var operator = rule.operator; - var value = []; - - if (filter.valueGetter) { - value = filter.valueGetter.call(this, rule); - } - else { - var $value = rule.$el.find(QueryBuilder.selectors.value_container); - - for (var i = 0; i < operator.nb_inputs; i++) { - var name = Utils.escapeElementId(rule.id + '_value_' + i); - var tmp; - - switch (filter.input) { - case 'radio': - value.push($value.find('[name=' + name + ']:checked').val()); - break; - - case 'checkbox': - tmp = []; - // jshint loopfunc:true - $value.find('[name=' + name + ']:checked').each(function() { - tmp.push($(this).val()); - }); - // jshint loopfunc:false - value.push(tmp); - break; - - case 'select': - if (filter.multiple) { - tmp = []; - // jshint loopfunc:true - $value.find('[name=' + name + '] option:selected').each(function() { - tmp.push($(this).val()); - }); - // jshint loopfunc:false - value.push(tmp); - } - else { - value.push($value.find('[name=' + name + '] option:selected').val()); - } - break; - - default: - value.push($value.find('[name=' + name + ']').val()); - } - } - - value = value.map(function(val) { - if (operator.multiple && filter.value_separator && typeof val == 'string') { - val = val.split(filter.value_separator); - } - - if ($.isArray(val)) { - return val.map(function(subval) { - return Utils.changeType(subval, filter.type); - }); - } - else { - return Utils.changeType(val, filter.type); - } - }); - - if (operator.nb_inputs === 1) { - value = value[0]; - } - - // @deprecated - if (filter.valueParser) { - value = filter.valueParser.call(this, rule, value); - } - } - - /** - * Modifies the rule's value grabbed from the DOM - * @event changer:getRuleValue - * @memberof QueryBuilder - * @param {*} value - * @param {Rule} rule - * @returns {*} - */ - return this.change('getRuleValue', value, rule); -}; - -/** - * Sets the value of a rule's input - * @param {Rule} rule - * @param {*} value - * @private - */ -QueryBuilder.prototype.setRuleInputValue = function(rule, value) { - var filter = rule.filter; - var operator = rule.operator; - - if (!filter || !operator) { - return; - } - - rule._updating_input = true; - - if (filter.valueSetter) { - filter.valueSetter.call(this, rule, value); - } - else { - var $value = rule.$el.find(QueryBuilder.selectors.value_container); - - if (operator.nb_inputs == 1) { - value = [value]; - } - - for (var i = 0; i < operator.nb_inputs; i++) { - var name = Utils.escapeElementId(rule.id + '_value_' + i); - - switch (filter.input) { - case 'radio': - $value.find('[name=' + name + '][value="' + value[i] + '"]').prop('checked', true).trigger('change'); - break; - - case 'checkbox': - if (!$.isArray(value[i])) { - value[i] = [value[i]]; - } - // jshint loopfunc:true - value[i].forEach(function(value) { - $value.find('[name=' + name + '][value="' + value + '"]').prop('checked', true).trigger('change'); - }); - // jshint loopfunc:false - break; - - default: - if (operator.multiple && filter.value_separator && $.isArray(value[i])) { - value[i] = value[i].join(filter.value_separator); - } - $value.find('[name=' + name + ']').val(value[i]).trigger('change'); - break; - } - } - } - - rule._updating_input = false; -}; - -/** - * Parses rule flags - * @param {object} rule - * @returns {object} - * @fires QueryBuilder.changer:parseRuleFlags - * @private - */ -QueryBuilder.prototype.parseRuleFlags = function(rule) { - var flags = $.extend({}, this.settings.default_rule_flags); - - if (rule.readonly) { - $.extend(flags, { - filter_readonly: true, - operator_readonly: true, - value_readonly: true, - no_delete: true - }); - } - - if (rule.flags) { - $.extend(flags, rule.flags); - } - - /** - * Modifies the consolidated rule's flags - * @event changer:parseRuleFlags - * @memberof QueryBuilder - * @param {object} flags - * @param {object} rule - not a Rule object - * @returns {object} - */ - return this.change('parseRuleFlags', flags, rule); -}; - -/** - * Gets a copy of flags of a rule - * @param {object} flags - * @param {boolean} [all=false] - return all flags or only changes from default flags - * @returns {object} - * @private - */ -QueryBuilder.prototype.getRuleFlags = function(flags, all) { - if (all) { - return $.extend({}, flags); - } - else { - var ret = {}; - $.each(this.settings.default_rule_flags, function(key, value) { - if (flags[key] !== value) { - ret[key] = flags[key]; - } - }); - return ret; - } -}; - -/** - * Parses group flags - * @param {object} group - * @returns {object} - * @fires QueryBuilder.changer:parseGroupFlags - * @private - */ -QueryBuilder.prototype.parseGroupFlags = function(group) { - var flags = $.extend({}, this.settings.default_group_flags); - - if (group.readonly) { - $.extend(flags, { - condition_readonly: true, - no_add_rule: true, - no_add_group: true, - no_delete: true - }); - } - - if (group.flags) { - $.extend(flags, group.flags); - } - - /** - * Modifies the consolidated group's flags - * @event changer:parseGroupFlags - * @memberof QueryBuilder - * @param {object} flags - * @param {object} group - not a Group object - * @returns {object} - */ - return this.change('parseGroupFlags', flags, group); -}; - -/** - * Gets a copy of flags of a group - * @param {object} flags - * @param {boolean} [all=false] - return all flags or only changes from default flags - * @returns {object} - * @private - */ -QueryBuilder.prototype.getGroupFlags = function(flags, all) { - if (all) { - return $.extend({}, flags); - } - else { - var ret = {}; - $.each(this.settings.default_group_flags, function(key, value) { - if (flags[key] !== value) { - ret[key] = flags[key]; - } - }); - return ret; - } -}; - -/** - * Translate a label either by looking in the `lang` object or in itself if it's an object where keys are language codes - * @param {string} [category] - * @param {string|object} key - * @returns {string} - * @fires QueryBuilder.changer:translate - */ -QueryBuilder.prototype.translate = function(category, key) { - if (!key) { - key = category; - category = undefined; - } - - var translation; - if (typeof key === 'object') { - translation = key[this.settings.lang_code] || key['en']; - } - else { - translation = (category ? this.lang[category] : this.lang)[key] || key; - } - - /** - * Modifies the translated label - * @event changer:translate - * @memberof QueryBuilder - * @param {string} translation - * @param {string|object} key - * @param {string} [category] - * @returns {string} - */ - return this.change('translate', translation, key, category); -}; - -/** - * Returns a validation message - * @param {object} validation - * @param {string} type - * @param {string} def - * @returns {string} - * @private - */ -QueryBuilder.prototype.getValidationMessage = function(validation, type, def) { - return validation.messages && validation.messages[type] || def; -}; - - -QueryBuilder.templates.group = '\ -
\ -
\ -
\ - \ - {{? it.settings.allow_groups===-1 || it.settings.allow_groups>=it.level }} \ - \ - {{?}} \ - {{? it.level>1 }} \ - \ - {{?}} \ -
\ -
\ - {{~ it.conditions: condition }} \ - \ - {{~}} \ -
\ - {{? it.settings.display_errors }} \ -
\ - {{?}} \ -
\ -
\ -
\ -
\ -
'; - -QueryBuilder.templates.rule = '\ -
\ -
\ -
\ - \ -
\ -
\ - {{? it.settings.display_errors }} \ -
\ - {{?}} \ -
\ -
\ -
\ -
'; - -QueryBuilder.templates.filterSelect = '\ -{{ var optgroup = null; }} \ -'; - -QueryBuilder.templates.operatorSelect = '\ -{{? it.operators.length === 1 }} \ - \ -{{= it.translate("operators", it.operators[0].type) }} \ - \ -{{?}} \ -{{ var optgroup = null; }} \ -'; - -QueryBuilder.templates.ruleValueSelect = '\ -{{ var optgroup = null; }} \ -'; - -/** - * Returns group's HTML - * @param {string} group_id - * @param {int} level - * @returns {string} - * @fires QueryBuilder.changer:getGroupTemplate - * @private - */ -QueryBuilder.prototype.getGroupTemplate = function(group_id, level) { - var h = this.templates.group({ - builder: this, - group_id: group_id, - level: level, - conditions: this.settings.conditions, - icons: this.icons, - settings: this.settings, - translate: this.translate.bind(this) - }); - - /** - * Modifies the raw HTML of a group - * @event changer:getGroupTemplate - * @memberof QueryBuilder - * @param {string} html - * @param {int} level - * @returns {string} - */ - return this.change('getGroupTemplate', h, level); -}; - -/** - * Returns rule's HTML - * @param {string} rule_id - * @returns {string} - * @fires QueryBuilder.changer:getRuleTemplate - * @private - */ -QueryBuilder.prototype.getRuleTemplate = function(rule_id) { - var h = this.templates.rule({ - builder: this, - rule_id: rule_id, - icons: this.icons, - settings: this.settings, - translate: this.translate.bind(this) - }); - - /** - * Modifies the raw HTML of a rule - * @event changer:getRuleTemplate - * @memberof QueryBuilder - * @param {string} html - * @returns {string} - */ - return this.change('getRuleTemplate', h); -}; - -/** - * Returns rule's filter HTML - * @param {Rule} rule - * @param {object[]} filters - * @returns {string} - * @fires QueryBuilder.changer:getRuleFilterTemplate - * @private - */ -QueryBuilder.prototype.getRuleFilterSelect = function(rule, filters) { - var h = this.templates.filterSelect({ - builder: this, - rule: rule, - filters: filters, - icons: this.icons, - settings: this.settings, - translate: this.translate.bind(this) - }); - - /** - * Modifies the raw HTML of the rule's filter dropdown - * @event changer:getRuleFilterSelect - * @memberof QueryBuilder - * @param {string} html - * @param {Rule} rule - * @param {QueryBuilder.Filter[]} filters - * @returns {string} - */ - return this.change('getRuleFilterSelect', h, rule, filters); -}; - -/** - * Returns rule's operator HTML - * @param {Rule} rule - * @param {object[]} operators - * @returns {string} - * @fires QueryBuilder.changer:getRuleOperatorTemplate - * @private - */ -QueryBuilder.prototype.getRuleOperatorSelect = function(rule, operators) { - var h = this.templates.operatorSelect({ - builder: this, - rule: rule, - operators: operators, - icons: this.icons, - settings: this.settings, - translate: this.translate.bind(this) - }); - - /** - * Modifies the raw HTML of the rule's operator dropdown - * @event changer:getRuleOperatorSelect - * @memberof QueryBuilder - * @param {string} html - * @param {Rule} rule - * @param {QueryBuilder.Operator[]} operators - * @returns {string} - */ - return this.change('getRuleOperatorSelect', h, rule, operators); -}; - -/** - * Returns the rule's value select HTML - * @param {string} name - * @param {Rule} rule - * @returns {string} - * @fires QueryBuilder.changer:getRuleValueSelect - * @private - */ -QueryBuilder.prototype.getRuleValueSelect = function(name, rule) { - var h = this.templates.ruleValueSelect({ - builder: this, - name: name, - rule: rule, - icons: this.icons, - settings: this.settings, - translate: this.translate.bind(this) - }); - - /** - * Modifies the raw HTML of the rule's value dropdown (in case of a "select filter) - * @event changer:getRuleValueSelect - * @memberof QueryBuilder - * @param {string} html - * @param [string} name - * @param {Rule} rule - * @returns {string} - */ - return this.change('getRuleValueSelect', h, name, rule); -}; - -/** - * Returns the rule's value HTML - * @param {Rule} rule - * @param {int} value_id - * @returns {string} - * @fires QueryBuilder.changer:getRuleInput - * @private - */ -QueryBuilder.prototype.getRuleInput = function(rule, value_id) { - var filter = rule.filter; - var validation = rule.filter.validation || {}; - var name = rule.id + '_value_' + value_id; - var c = filter.vertical ? ' class=block' : ''; - var h = ''; - - if (typeof filter.input == 'function') { - h = filter.input.call(this, rule, name); - } - else { - switch (filter.input) { - case 'radio': - case 'checkbox': - Utils.iterateOptions(filter.values, function(key, val) { - h += ' ' + val + ' '; - }); - break; - - case 'select': - h = this.getRuleValueSelect(name, rule); - break; - - case 'textarea': - h += '";break;case"number":l+=' "})}})},{font:"glyphicons",color:"default"}),c.define("bt-selectpicker",function(r){$.fn.selectpicker&&$.fn.selectpicker.Constructor||h.error("MissingLibrary",'Bootstrap Select is required to use "bt-selectpicker" plugin. Get it here: http://silviomoreto.github.io/bootstrap-select');var i=c.selectors;this.on("afterCreateRuleFilters",function(e,t){t.$el.find(i.rule_filter).removeClass("form-control").selectpicker(r)}),this.on("afterCreateRuleOperators",function(e,t){t.$el.find(i.rule_operator).removeClass("form-control").selectpicker(r)}),this.on("afterUpdateRuleFilter",function(e,t){t.$el.find(i.rule_filter).selectpicker("render")}),this.on("afterUpdateRuleOperator",function(e,t){t.$el.find(i.rule_operator).selectpicker("render")}),this.on("beforeDeleteRule",function(e,t){t.$el.find(i.rule_filter).selectpicker("destroy"),t.$el.find(i.rule_operator).selectpicker("destroy")})},{container:"body",style:"btn-inverse btn-xs",width:"auto",showIcon:!1}),c.define("bt-tooltip-errors",function(i){$.fn.tooltip&&$.fn.tooltip.Constructor&&$.fn.tooltip.Constructor.prototype.fixTitle||h.error("MissingLibrary",'Bootstrap Tooltip is required to use "bt-tooltip-errors" plugin. Get it here: http://getbootstrap.com');var o=this;this.on("getRuleTemplate.filter getGroupTemplate.filter",function(e){var t=$(e.value);t.find(c.selectors.error_container).attr("data-toggle","tooltip"),e.value=t.prop("outerHTML")}),this.model.on("update",function(e,t,r){"error"==r&&o.settings.display_errors&&t.$el.find(c.selectors.error_container).eq(0).tooltip(i).tooltip("hide").tooltip("fixTitle")})},{placement:"right"}),c.extend({setFilters:function(e,t){var r=this;void 0===t&&(t=e,e=!1),t=this.checkFilters(t);var i=(t=this.change("setFilters",t)).map(function(e){return e.id});if(e||function e(t){t.each(function(e){e.filter&&-1===i.indexOf(e.filter.id)&&h.error("ChangeFilter",'A rule is using filter "{0}"',e.filter.id)},e)}(this.model.root),this.filters=t,function e(t){t.each(!0,function(e){e.filter&&-1===i.indexOf(e.filter.id)?(e.drop(),r.trigger("rulesChanged")):(r.createRuleFilters(e),e.$el.find(c.selectors.rule_filter).val(e.filter?e.filter.id:"-1"),r.trigger("afterUpdateRuleFilter",e))},e)}(this.model.root),this.settings.plugins&&(this.settings.plugins["unique-filter"]&&this.updateDisabledFilters(),this.settings.plugins["bt-selectpicker"]&&this.$el.find(c.selectors.rule_filter).selectpicker("render")),this.settings.default_filter)try{this.getFilterById(this.settings.default_filter)}catch(e){this.settings.default_filter=null}this.trigger("afterSetFilters",t)},addFilter:function(e,r){void 0===r||"#end"==r?r=this.filters.length:"#start"==r&&(r=0),$.isArray(e)||(e=[e]);var t=$.extend(!0,[],this.filters);parseInt(r)==r?Array.prototype.splice.apply(t,[r,0].concat(e)):this.filters.some(function(e,t){if(e.id==r)return r=t+1,!0})?Array.prototype.splice.apply(t,[r,0].concat(e)):Array.prototype.push.apply(t,e),this.setFilters(t)},removeFilter:function(t,e){var r=$.extend(!0,[],this.filters);"string"==typeof t&&(t=[t]),r=r.filter(function(e){return-1===t.indexOf(e.id)}),this.setFilters(e,r)}}),c.define("chosen-selectpicker",function(r){$.fn.chosen||h.error("MissingLibrary",'chosen is required to use "chosen-selectpicker" plugin. Get it here: https://github.com/harvesthq/chosen'),this.settings.plugins["bt-selectpicker"]&&h.error("Conflict","bt-selectpicker is already selected as the dropdown plugin. Please remove chosen-selectpicker from the plugin list");var i=c.selectors;this.on("afterCreateRuleFilters",function(e,t){t.$el.find(i.rule_filter).removeClass("form-control").chosen(r)}),this.on("afterCreateRuleOperators",function(e,t){t.$el.find(i.rule_operator).removeClass("form-control").chosen(r)}),this.on("afterUpdateRuleFilter",function(e,t){t.$el.find(i.rule_filter).trigger("chosen:updated")}),this.on("afterUpdateRuleOperator",function(e,t){t.$el.find(i.rule_operator).trigger("chosen:updated")}),this.on("beforeDeleteRule",function(e,t){t.$el.find(i.rule_filter).chosen("destroy"),t.$el.find(i.rule_operator).chosen("destroy")})}),c.define("filter-description",function(o){"inline"===o.mode?this.on("afterUpdateRuleFilter afterUpdateRuleOperator",function(e,t){var r=t.$el.find("p.filter-description"),i=e.builder.getFilterDescription(t.filter,t);i?(0===r.length?(r=$('

')).appendTo(t.$el):r.css("display",""),r.html(' '+i)):r.hide()}):"popover"===o.mode?($.fn.popover&&$.fn.popover.Constructor&&$.fn.popover.Constructor.prototype.fixTitle||h.error("MissingLibrary",'Bootstrap Popover is required to use "filter-description" plugin. Get it here: http://getbootstrap.com'),this.on("afterUpdateRuleFilter afterUpdateRuleOperator",function(e,t){var r=t.$el.find("button.filter-description"),i=e.builder.getFilterDescription(t.filter,t);i?(0===r.length?((r=$('')).prependTo(t.$el.find(c.selectors.rule_actions)),r.popover({placement:"left",container:"body",html:!0}),r.on("mouseout",function(){r.popover("hide")})):r.css("display",""),r.data("bs.popover").options.content=i,r.attr("aria-describedby")&&r.popover("show")):(r.hide(),r.data("bs.popover")&&r.popover("hide"))})):"bootbox"===o.mode&&("bootbox"in window||h.error("MissingLibrary",'Bootbox is required to use "filter-description" plugin. Get it here: http://bootboxjs.com'),this.on("afterUpdateRuleFilter afterUpdateRuleOperator",function(e,t){var r=t.$el.find("button.filter-description"),i=e.builder.getFilterDescription(t.filter,t);i?(0===r.length?((r=$('')).prependTo(t.$el.find(c.selectors.rule_actions)),r.on("click",function(){bootbox.alert(r.data("description"))})):r.css("display",""),r.data("description",i)):r.hide()}))},{icon:"glyphicon glyphicon-info-sign",mode:"popover"}),c.extend({getFilterDescription:function(e,t){return e?"function"==typeof e.description?e.description.call(this,t):e.description:void 0}}),c.define("invert",function(r){var i=this,o=c.selectors;this.on("afterInit",function(){i.$el.on("click.queryBuilder","[data-invert=group]",function(){var e=$(this).closest(o.group_container);i.invert(i.getModel(e),r)}),r.display_rules_button&&r.invert_rules&&i.$el.on("click.queryBuilder","[data-invert=rule]",function(){var e=$(this).closest(o.rule_container);i.invert(i.getModel(e),r)})}),r.disable_template||(this.on("getGroupTemplate.filter",function(e){var t=$(e.value);t.find(o.condition_container).after('"),e.value=t.prop("outerHTML")}),r.display_rules_button&&r.invert_rules&&this.on("getRuleTemplate.filter",function(e){var t=$(e.value);t.find(o.rule_actions).prepend('"),e.value=t.prop("outerHTML")}))},{icon:"glyphicon glyphicon-random",recursive:!0,invert_rules:!0,display_rules_button:!1,silent_fail:!1,disable_template:!1}),c.defaults({operatorOpposites:{equal:"not_equal",not_equal:"equal",in:"not_in",not_in:"in",less:"greater_or_equal",less_or_equal:"greater",greater:"less_or_equal",greater_or_equal:"less",between:"not_between",not_between:"between",begins_with:"not_begins_with",not_begins_with:"begins_with",contains:"not_contains",not_contains:"contains",ends_with:"not_ends_with",not_ends_with:"ends_with",is_empty:"is_not_empty",is_not_empty:"is_empty",is_null:"is_not_null",is_not_null:"is_null"},conditionOpposites:{AND:"OR",OR:"AND"}}),c.extend({invert:function(e,t){if(!(e instanceof o)){if(!this.model.root)return;t=e,e=this.model.root}if("object"!=typeof t&&(t={}),void 0===t.recursive&&(t.recursive=!0),void 0===t.invert_rules&&(t.invert_rules=!0),void 0===t.silent_fail&&(t.silent_fail=!1),void 0===t.trigger&&(t.trigger=!0),e instanceof a){if(this.settings.conditionOpposites[e.condition]?e.condition=this.settings.conditionOpposites[e.condition]:t.silent_fail||h.error("InvertCondition",'Unknown inverse of condition "{0}"',e.condition),t.recursive){var r=$.extend({},t,{trigger:!1});e.each(function(e){t.invert_rules&&this.invert(e,r)},function(e){this.invert(e,r)},this)}}else if(e instanceof l&&e.operator&&!e.filter.no_invert)if(this.settings.operatorOpposites[e.operator.type]){var i=this.settings.operatorOpposites[e.operator.type];e.filter.operators&&-1==e.filter.operators.indexOf(i)||(e.operator=this.getOperatorByType(i))}else t.silent_fail||h.error("InvertOperator",'Unknown inverse of operator "{0}"',e.operator.type);t.trigger&&(this.trigger("afterInvert",e,t),this.trigger("rulesChanged"))}}),c.defaults({mongoOperators:{equal:function(e){return e[0]},not_equal:function(e){return{$ne:e[0]}},in:function(e){return{$in:e}},not_in:function(e){return{$nin:e}},less:function(e){return{$lt:e[0]}},less_or_equal:function(e){return{$lte:e[0]}},greater:function(e){return{$gt:e[0]}},greater_or_equal:function(e){return{$gte:e[0]}},between:function(e){return{$gte:e[0],$lte:e[1]}},not_between:function(e){return{$lt:e[0],$gt:e[1]}},begins_with:function(e){return{$regex:"^"+h.escapeRegExp(e[0])}},not_begins_with:function(e){return{$regex:"^(?!"+h.escapeRegExp(e[0])+")"}},contains:function(e){return{$regex:h.escapeRegExp(e[0])}},not_contains:function(e){return{$regex:"^((?!"+h.escapeRegExp(e[0])+").)*$",$options:"s"}},ends_with:function(e){return{$regex:h.escapeRegExp(e[0])+"$"}},not_ends_with:function(e){return{$regex:"(? '+i.translate("NOT")+""),e.value=t.prop("outerHTML")}),this.on("groupToJson.filter",function(e,t){e.value.not=t.not}),this.on("jsonToGroup.filter",function(e,t){e.value.not=!!t.not}),this.on("groupToSQL.filter",function(e,t){t.not&&(e.value="NOT ( "+e.value+" )")}),this.on("parseSQLNode.filter",function(e){e.value.name&&"NOT"==e.value.name.toUpperCase()&&(e.value=e.value.arguments.value[0],-1===["AND","OR"].indexOf(e.value.operation.toUpperCase())&&(e.value=new SQLParser.nodes.Op(i.settings.default_condition,e.value,null)),e.value.not=!0)}),this.on("sqlGroupsDistinct.filter",function(e,t,r,i){r.not&&0"+c.selectors.group_not).toggleClass("active",e.not).find("i").attr("class",e.not?t.icon_checked:t.icon_unchecked),this.trigger("afterUpdateGroupNot",e),this.trigger("rulesChanged")}}),c.define("sortable",function(i){var o,n,l,s;"interact"in window||h.error("MissingLibrary",'interact.js is required to use "sortable" plugin. Get it here: http://interactjs.io'),void 0!==i.default_no_sortable&&(h.error(!1,"Config",'Sortable plugin : "default_no_sortable" options is deprecated, use standard "default_rule_flags" and "default_group_flags" instead'),this.settings.default_rule_flags.no_sortable=this.settings.default_group_flags.no_sortable=i.default_no_sortable),interact.dynamicDrop(!0),interact.pointerMoveTolerance(10),this.on("afterAddRule afterAddGroup",function(e,t){if(t!=o){var r=e.builder;i.inherit_no_sortable&&t.parent&&t.parent.flags.no_sortable&&(t.flags.no_sortable=!0),i.inherit_no_drop&&t.parent&&t.parent.flags.no_drop&&(t.flags.no_drop=!0),t.flags.no_sortable||interact(t.$el[0]).draggable({allowFrom:c.selectors.drag_handle,onstart:function(e){s=!1,l=r.getModel(e.target),n=l.$el.clone().appendTo(l.$el.parent()).width(l.$el.outerWidth()).addClass("dragging");var t=$('
 
').height(l.$el.outerHeight());o=l.parent.addRule(t,l.getPos()),l.$el.hide()},onmove:function(e){n[0].style.top=e.clientY-15+"px",n[0].style.left=e.clientX-15+"px"},onend:function(e){e.dropzone&&(u(l,$(e.relatedTarget),r),s=!0),n.remove(),n=void 0,o.drop(),o=void 0,l.$el.css("display",""),r.trigger("afterMove",l),r.trigger("rulesChanged")}}),t.flags.no_drop||(interact(t.$el[0]).dropzone({accept:c.selectors.rule_and_group_containers,ondragenter:function(e){u(o,$(e.target),r)},ondrop:function(e){s||u(l,$(e.target),r)}}),t instanceof a&&interact(t.$el.find(c.selectors.group_header)[0]).dropzone({accept:c.selectors.rule_and_group_containers,ondragenter:function(e){u(o,$(e.target),r)},ondrop:function(e){s||u(l,$(e.target),r)}}))}}),this.on("beforeDeleteRule beforeDeleteGroup",function(e,t){e.isDefaultPrevented()||(interact(t.$el[0]).unset(),t instanceof a&&interact(t.$el.find(c.selectors.group_header)[0]).unset())}),this.on("afterApplyRuleFlags afterApplyGroupFlags",function(e,t){t.flags.no_sortable&&t.$el.find(".drag-handle").remove()}),i.disable_template||(this.on("getGroupTemplate.filter",function(e,t){if(1'),e.value=r.prop("outerHTML")}}),this.on("getRuleTemplate.filter",function(e){var t=$(e.value);t.find(c.selectors.rule_header).after('
'),e.value=t.prop("outerHTML")}))},{inherit_no_sortable:!0,inherit_no_drop:!0,icon:"glyphicon glyphicon-sort",disable_template:!1}),c.selectors.rule_and_group_containers=c.selectors.rule_container+", "+c.selectors.group_container,c.selectors.drag_handle=".drag-handle",c.defaults({default_rule_flags:{no_sortable:!1,no_drop:!1},default_group_flags:{no_sortable:!1,no_drop:!1}}),c.define("sql-support",function(e){},{boolean_as_integer:!0}),c.defaults({sqlOperators:{equal:{op:"= ?"},not_equal:{op:"!= ?"},in:{op:"IN(?)",sep:", "},not_in:{op:"NOT IN(?)",sep:", "},less:{op:"< ?"},less_or_equal:{op:"<= ?"},greater:{op:"> ?"},greater_or_equal:{op:">= ?"},between:{op:"BETWEEN ?",sep:" AND "},not_between:{op:"NOT BETWEEN ?",sep:" AND "},begins_with:{op:"LIKE(?)",mod:"{0}%"},not_begins_with:{op:"NOT LIKE(?)",mod:"{0}%"},contains:{op:"LIKE(?)",mod:"%{0}%"},not_contains:{op:"NOT LIKE(?)",mod:"%{0}%"},ends_with:{op:"LIKE(?)",mod:"%{0}"},not_ends_with:{op:"NOT LIKE(?)",mod:"%{0}"},is_empty:{op:"= ''"},is_not_empty:{op:"!= ''"},is_null:{op:"IS NULL"},is_not_null:{op:"IS NOT NULL"}},sqlRuleOperator:{"=":function(e){return{val:e,op:""===e?"is_empty":"equal"}},"!=":function(e){return{val:e,op:""===e?"is_not_empty":"not_equal"}},LIKE:function(e){return"%"==e.slice(0,1)&&"%"==e.slice(-1)?{val:e.slice(1,-1),op:"contains"}:"%"==e.slice(0,1)?{val:e.slice(1),op:"ends_with"}:"%"==e.slice(-1)?{val:e.slice(0,-1),op:"begins_with"}:void h.error("SQLParse",'Invalid value for LIKE operator "{0}"',e)},"NOT LIKE":function(e){return"%"==e.slice(0,1)&&"%"==e.slice(-1)?{val:e.slice(1,-1),op:"not_contains"}:"%"==e.slice(0,1)?{val:e.slice(1),op:"not_ends_with"}:"%"==e.slice(-1)?{val:e.slice(0,-1),op:"not_begins_with"}:void h.error("SQLParse",'Invalid value for NOT LIKE operator "{0}"',e)},IN:function(e){return{val:e,op:"in"}},"NOT IN":function(e){return{val:e,op:"not_in"}},"<":function(e){return{val:e,op:"less"}},"<=":function(e){return{val:e,op:"less_or_equal"}},">":function(e){return{val:e,op:"greater"}},">=":function(e){return{val:e,op:"greater_or_equal"}},BETWEEN:function(e){return{val:e,op:"between"}},"NOT BETWEEN":function(e){return{val:e,op:"not_between"}},IS:function(e){return null!==e&&h.error("SQLParse","Invalid value for IS operator"),{val:null,op:"is_null"}},"IS NOT":function(e){return null!==e&&h.error("SQLParse","Invalid value for IS operator"),{val:null,op:"is_not_null"}}},sqlStatements:{question_mark:function(){var r=[];return{add:function(e,t){return r.push(t),"?"},run:function(){return r}}},numbered:function(r){(!r||1"==l&&(l="!=");var s=f.settings.sqlRuleOperator[l];void 0===s&&h.error("UndefinedSQLOperator",'Invalid SQL operation "{0}".',t.operation);var a,u=s.call(this,n,t.operation);"values"in t.left?a=t.left.values.join("."):"value"in t.left?a=t.left.value:h.error("SQLParse","Cannot find field name in {0}",JSON.stringify(t.left));var p=f.getSQLFieldID(a,n),d=f.change("sqlToRule",{id:p,field:a,operator:u.op,value:u.val},t);g.rules.push(d)}}(i,0),o},setRulesFromSQL:function(e,t){this.setRules(this.getRulesFromSQL(e,t))},getSQLFieldID:function(t,e){var r=this.filters.filter(function(e){return e.field.toLowerCase()===t.toLowerCase()});return 1===r.length?r[0].id:this.change("getSQLFieldID",t,e)}}),c.define("unique-filter",function(){this.status.used_filters={},this.on("afterUpdateRuleFilter",this.updateDisabledFilters),this.on("afterDeleteRule",this.updateDisabledFilters),this.on("afterCreateRuleFilters",this.applyDisabledFilters),this.on("afterReset",this.clearDisabledFilters),this.on("afterClear",this.clearDisabledFilters),this.on("getDefaultFilter.filter",function(t,r){var i=t.builder;(i.updateDisabledFilters(),t.value.id in i.status.used_filters)&&(i.filters.some(function(e){if(!(e.id in i.status.used_filters)||0": ">", '"': """, "'": "'", "/": "/" }, - matchHTML = doNotSkipEncoded ? /[&<>"'\/]/g : /&(?!#?\w+;)|<|>|"|'|\//g; - return function(code) { - return code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : ""; - }; - }; - - _globals = (function(){ return this || (0,eval)("this"); }()); - - /* istanbul ignore else */ - if (typeof module !== "undefined" && module.exports) { - module.exports = doT; - } else if (typeof define === "function" && define.amd) { - define('doT', function(){return doT;}); - } else { - _globals.doT = doT; - } - - var startend = { - append: { start: "'+(", end: ")+'", startencode: "'+encodeHTML(" }, - split: { start: "';out+=(", end: ");out+='", startencode: "';out+=encodeHTML(" } - }, skip = /$^/; - - function resolveDefs(c, block, def) { - return ((typeof block === "string") ? block : block.toString()) - .replace(c.define || skip, function(m, code, assign, value) { - if (code.indexOf("def.") === 0) { - code = code.substring(4); - } - if (!(code in def)) { - if (assign === ":") { - if (c.defineParams) value.replace(c.defineParams, function(m, param, v) { - def[code] = {arg: param, text: v}; - }); - if (!(code in def)) def[code]= value; - } else { - new Function("def", "def['"+code+"']=" + value)(def); - } - } - return ""; - }) - .replace(c.use || skip, function(m, code) { - if (c.useParams) code = code.replace(c.useParams, function(m, s, d, param) { - if (def[d] && def[d].arg && param) { - var rw = (d+":"+param).replace(/'|\\/g, "_"); - def.__exp = def.__exp || {}; - def.__exp[rw] = def[d].text.replace(new RegExp("(^|[^\\w$])" + def[d].arg + "([^\\w$])", "g"), "$1" + param + "$2"); - return s + "def.__exp['"+rw+"']"; - } - }); - var v = new Function("def", "return " + code)(def); - return v ? resolveDefs(c, v, def) : v; - }); - } - - function unescape(code) { - return code.replace(/\\('|\\)/g, "$1").replace(/[\r\t\n]/g, " "); - } - - doT.template = function(tmpl, c, def) { - c = c || doT.templateSettings; - var cse = c.append ? startend.append : startend.split, needhtmlencode, sid = 0, indv, - str = (c.use || c.define) ? resolveDefs(c, tmpl, def || {}) : tmpl; - - str = ("var out='" + (c.strip ? str.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g," ") - .replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g,""): str) - .replace(/'|\\/g, "\\$&") - .replace(c.interpolate || skip, function(m, code) { - return cse.start + unescape(code) + cse.end; - }) - .replace(c.encode || skip, function(m, code) { - needhtmlencode = true; - return cse.startencode + unescape(code) + cse.end; - }) - .replace(c.conditional || skip, function(m, elsecase, code) { - return elsecase ? - (code ? "';}else if(" + unescape(code) + "){out+='" : "';}else{out+='") : - (code ? "';if(" + unescape(code) + "){out+='" : "';}out+='"); - }) - .replace(c.iterate || skip, function(m, iterate, vname, iname) { - if (!iterate) return "';} } out+='"; - sid+=1; indv=iname || "i"+sid; iterate=unescape(iterate); - return "';var arr"+sid+"="+iterate+";if(arr"+sid+"){var "+vname+","+indv+"=-1,l"+sid+"=arr"+sid+".length-1;while("+indv+"} - * @readonly - */ - this.icons = this.settings.icons; - - /** - * List of operators - * @member {QueryBuilder.Operator[]} - * @readonly - */ - this.operators = this.settings.operators; - - /** - * List of templates - * @member {object.} - * @readonly - */ - this.templates = this.settings.templates; - - /** - * Plugins configuration - * @member {object.} - * @readonly - */ - this.plugins = this.settings.plugins; - - /** - * Translations object - * @member {object} - * @readonly - */ - this.lang = null; - - // translations : english << 'lang_code' << custom - if (QueryBuilder.regional['en'] === undefined) { - Utils.error('Config', '"i18n/en.js" not loaded.'); - } - this.lang = $.extendext(true, 'replace', {}, QueryBuilder.regional['en'], QueryBuilder.regional[this.settings.lang_code], this.settings.lang); - - // "allow_groups" can be boolean or int - if (this.settings.allow_groups === false) { - this.settings.allow_groups = 0; - } - else if (this.settings.allow_groups === true) { - this.settings.allow_groups = -1; - } - - // init templates - Object.keys(this.templates).forEach(function(tpl) { - if (!this.templates[tpl]) { - this.templates[tpl] = QueryBuilder.templates[tpl]; - } - if (typeof this.templates[tpl] == 'string') { - this.templates[tpl] = doT.template(this.templates[tpl]); - } - }, this); - - // ensure we have a container id - if (!this.$el.attr('id')) { - this.$el.attr('id', 'qb_' + Math.floor(Math.random() * 99999)); - this.status.generated_id = true; - } - this.status.id = this.$el.attr('id'); - - // INIT - this.$el.addClass('query-builder form-inline'); - - this.filters = this.checkFilters(this.filters); - this.operators = this.checkOperators(this.operators); - this.bindEvents(); - this.initPlugins(); -}; - -$.extend(QueryBuilder.prototype, /** @lends QueryBuilder.prototype */ { - /** - * Triggers an event on the builder container - * @param {string} type - * @returns {$.Event} - */ - trigger: function(type) { - var event = new $.Event(this._tojQueryEvent(type), { - builder: this - }); - - this.$el.triggerHandler(event, Array.prototype.slice.call(arguments, 1)); - - return event; - }, - - /** - * Triggers an event on the builder container and returns the modified value - * @param {string} type - * @param {*} value - * @returns {*} - */ - change: function(type, value) { - var event = new $.Event(this._tojQueryEvent(type, true), { - builder: this, - value: value - }); - - this.$el.triggerHandler(event, Array.prototype.slice.call(arguments, 2)); - - return event.value; - }, - - /** - * Attaches an event listener on the builder container - * @param {string} type - * @param {function} cb - * @returns {QueryBuilder} - */ - on: function(type, cb) { - this.$el.on(this._tojQueryEvent(type), cb); - return this; - }, - - /** - * Removes an event listener from the builder container - * @param {string} type - * @param {function} [cb] - * @returns {QueryBuilder} - */ - off: function(type, cb) { - this.$el.off(this._tojQueryEvent(type), cb); - return this; - }, - - /** - * Attaches an event listener called once on the builder container - * @param {string} type - * @param {function} cb - * @returns {QueryBuilder} - */ - once: function(type, cb) { - this.$el.one(this._tojQueryEvent(type), cb); - return this; - }, - - /** - * Appends `.queryBuilder` and optionally `.filter` to the events names - * @param {string} name - * @param {boolean} [filter=false] - * @returns {string} - * @private - */ - _tojQueryEvent: function(name, filter) { - return name.split(' ').map(function(type) { - return type + '.queryBuilder' + (filter ? '.filter' : ''); - }).join(' '); - } -}); - - -/** - * Allowed types and their internal representation - * @type {object.} - * @readonly - * @private - */ -QueryBuilder.types = { - 'string': 'string', - 'integer': 'number', - 'double': 'number', - 'date': 'datetime', - 'time': 'datetime', - 'datetime': 'datetime', - 'boolean': 'boolean' -}; - -/** - * Allowed inputs - * @type {string[]} - * @readonly - * @private - */ -QueryBuilder.inputs = [ - 'text', - 'number', - 'textarea', - 'radio', - 'checkbox', - 'select' -]; - -/** - * Runtime modifiable options with `setOptions` method - * @type {string[]} - * @readonly - * @private - */ -QueryBuilder.modifiable_options = [ - 'display_errors', - 'allow_groups', - 'allow_empty', - 'default_condition', - 'default_filter' -]; - -/** - * CSS selectors for common components - * @type {object.} - * @readonly - */ -QueryBuilder.selectors = { - group_container: '.rules-group-container', - rule_container: '.rule-container', - filter_container: '.rule-filter-container', - operator_container: '.rule-operator-container', - value_container: '.rule-value-container', - error_container: '.error-container', - condition_container: '.rules-group-header .group-conditions', - - rule_header: '.rule-header', - group_header: '.rules-group-header', - group_actions: '.group-actions', - rule_actions: '.rule-actions', - - rules_list: '.rules-group-body>.rules-list', - - group_condition: '.rules-group-header [name$=_cond]', - rule_filter: '.rule-filter-container [name$=_filter]', - rule_operator: '.rule-operator-container [name$=_operator]', - rule_value: '.rule-value-container [name*=_value_]', - - add_rule: '[data-add=rule]', - delete_rule: '[data-delete=rule]', - add_group: '[data-add=group]', - delete_group: '[data-delete=group]' -}; - -/** - * Template strings (see template.js) - * @type {object.} - * @readonly - */ -QueryBuilder.templates = {}; - -/** - * Localized strings (see i18n/) - * @type {object.} - * @readonly - */ -QueryBuilder.regional = {}; - -/** - * Default operators - * @type {object.} - * @readonly - */ -QueryBuilder.OPERATORS = { - equal: { type: 'equal', nb_inputs: 1, multiple: false, apply_to: ['string', 'number', 'datetime', 'boolean'] }, - not_equal: { type: 'not_equal', nb_inputs: 1, multiple: false, apply_to: ['string', 'number', 'datetime', 'boolean'] }, - in: { type: 'in', nb_inputs: 1, multiple: true, apply_to: ['string', 'number', 'datetime'] }, - not_in: { type: 'not_in', nb_inputs: 1, multiple: true, apply_to: ['string', 'number', 'datetime'] }, - less: { type: 'less', nb_inputs: 1, multiple: false, apply_to: ['number', 'datetime'] }, - less_or_equal: { type: 'less_or_equal', nb_inputs: 1, multiple: false, apply_to: ['number', 'datetime'] }, - greater: { type: 'greater', nb_inputs: 1, multiple: false, apply_to: ['number', 'datetime'] }, - greater_or_equal: { type: 'greater_or_equal', nb_inputs: 1, multiple: false, apply_to: ['number', 'datetime'] }, - between: { type: 'between', nb_inputs: 2, multiple: false, apply_to: ['number', 'datetime'] }, - not_between: { type: 'not_between', nb_inputs: 2, multiple: false, apply_to: ['number', 'datetime'] }, - begins_with: { type: 'begins_with', nb_inputs: 1, multiple: false, apply_to: ['string'] }, - not_begins_with: { type: 'not_begins_with', nb_inputs: 1, multiple: false, apply_to: ['string'] }, - contains: { type: 'contains', nb_inputs: 1, multiple: false, apply_to: ['string'] }, - not_contains: { type: 'not_contains', nb_inputs: 1, multiple: false, apply_to: ['string'] }, - ends_with: { type: 'ends_with', nb_inputs: 1, multiple: false, apply_to: ['string'] }, - not_ends_with: { type: 'not_ends_with', nb_inputs: 1, multiple: false, apply_to: ['string'] }, - is_empty: { type: 'is_empty', nb_inputs: 0, multiple: false, apply_to: ['string'] }, - is_not_empty: { type: 'is_not_empty', nb_inputs: 0, multiple: false, apply_to: ['string'] }, - is_null: { type: 'is_null', nb_inputs: 0, multiple: false, apply_to: ['string', 'number', 'datetime', 'boolean'] }, - is_not_null: { type: 'is_not_null', nb_inputs: 0, multiple: false, apply_to: ['string', 'number', 'datetime', 'boolean'] } -}; - -/** - * Default configuration - * @type {object} - * @readonly - */ -QueryBuilder.DEFAULTS = { - filters: [], - plugins: [], - - sort_filters: false, - display_errors: true, - allow_groups: -1, - allow_empty: false, - conditions: ['AND', 'OR'], - default_condition: 'AND', - inputs_separator: ' , ', - select_placeholder: '------', - display_empty_filter: true, - default_filter: null, - optgroups: {}, - - default_rule_flags: { - filter_readonly: false, - operator_readonly: false, - value_readonly: false, - no_delete: false - }, - - default_group_flags: { - condition_readonly: false, - no_add_rule: false, - no_add_group: false, - no_delete: false - }, - - templates: { - group: null, - rule: null, - filterSelect: null, - operatorSelect: null, - ruleValueSelect: null - }, - - lang_code: 'en', - lang: {}, - - operators: [ - 'equal', - 'not_equal', - 'in', - 'not_in', - 'less', - 'less_or_equal', - 'greater', - 'greater_or_equal', - 'between', - 'not_between', - 'begins_with', - 'not_begins_with', - 'contains', - 'not_contains', - 'ends_with', - 'not_ends_with', - 'is_empty', - 'is_not_empty', - 'is_null', - 'is_not_null' - ], - - icons: { - add_group: 'glyphicon glyphicon-plus-sign', - add_rule: 'glyphicon glyphicon-plus', - remove_group: 'glyphicon glyphicon-remove', - remove_rule: 'glyphicon glyphicon-remove', - error: 'glyphicon glyphicon-warning-sign' - } -}; - - -/** - * @module plugins - */ - -/** - * Definition of available plugins - * @type {object.} - */ -QueryBuilder.plugins = {}; - -/** - * Gets or extends the default configuration - * @param {object} [options] - new configuration - * @returns {undefined|object} nothing or configuration object (copy) - */ -QueryBuilder.defaults = function(options) { - if (typeof options == 'object') { - $.extendext(true, 'replace', QueryBuilder.DEFAULTS, options); - } - else if (typeof options == 'string') { - if (typeof QueryBuilder.DEFAULTS[options] == 'object') { - return $.extend(true, {}, QueryBuilder.DEFAULTS[options]); - } - else { - return QueryBuilder.DEFAULTS[options]; - } - } - else { - return $.extend(true, {}, QueryBuilder.DEFAULTS); - } -}; - -/** - * Registers a new plugin - * @param {string} name - * @param {function} fct - init function - * @param {object} [def] - default options - */ -QueryBuilder.define = function(name, fct, def) { - QueryBuilder.plugins[name] = { - fct: fct, - def: def || {} - }; -}; - -/** - * Adds new methods to QueryBuilder prototype - * @param {object.} methods - */ -QueryBuilder.extend = function(methods) { - $.extend(QueryBuilder.prototype, methods); -}; - -/** - * Initializes plugins for an instance - * @throws ConfigError - * @private - */ -QueryBuilder.prototype.initPlugins = function() { - if (!this.plugins) { - return; - } - - if ($.isArray(this.plugins)) { - var tmp = {}; - this.plugins.forEach(function(plugin) { - tmp[plugin] = null; - }); - this.plugins = tmp; - } - - Object.keys(this.plugins).forEach(function(plugin) { - if (plugin in QueryBuilder.plugins) { - this.plugins[plugin] = $.extend(true, {}, - QueryBuilder.plugins[plugin].def, - this.plugins[plugin] || {} - ); - - QueryBuilder.plugins[plugin].fct.call(this, this.plugins[plugin]); - } - else { - Utils.error('Config', 'Unable to find plugin "{0}"', plugin); - } - }, this); -}; - -/** - * Returns the config of a plugin, if the plugin is not loaded, returns the default config. - * @param {string} name - * @param {string} [property] - * @throws ConfigError - * @returns {*} - */ -QueryBuilder.prototype.getPluginOptions = function(name, property) { - var plugin; - if (this.plugins && this.plugins[name]) { - plugin = this.plugins[name]; - } - else if (QueryBuilder.plugins[name]) { - plugin = QueryBuilder.plugins[name].def; - } - - if (plugin) { - if (property) { - return plugin[property]; - } - else { - return plugin; - } - } - else { - Utils.error('Config', 'Unable to find plugin "{0}"', name); - } -}; - - -/** - * Final initialisation of the builder - * @param {object} [rules] - * @fires QueryBuilder.afterInit - * @private - */ -QueryBuilder.prototype.init = function(rules) { - /** - * When the initilization is done, just before creating the root group - * @event afterInit - * @memberof QueryBuilder - */ - this.trigger('afterInit'); - - if (rules) { - this.setRules(rules); - delete this.settings.rules; - } - else { - this.setRoot(true); - } -}; - -/** - * Checks the configuration of each filter - * @param {QueryBuilder.Filter[]} filters - * @returns {QueryBuilder.Filter[]} - * @throws ConfigError - */ -QueryBuilder.prototype.checkFilters = function(filters) { - var definedFilters = []; - - if (!filters || filters.length === 0) { - Utils.error('Config', 'Missing filters list'); - } - - filters.forEach(function(filter, i) { - if (!filter.id) { - Utils.error('Config', 'Missing filter {0} id', i); - } - if (definedFilters.indexOf(filter.id) != -1) { - Utils.error('Config', 'Filter "{0}" already defined', filter.id); - } - definedFilters.push(filter.id); - - if (!filter.type) { - filter.type = 'string'; - } - else if (!QueryBuilder.types[filter.type]) { - Utils.error('Config', 'Invalid type "{0}"', filter.type); - } - - if (!filter.input) { - filter.input = QueryBuilder.types[filter.type] === 'number' ? 'number' : 'text'; - } - else if (typeof filter.input != 'function' && QueryBuilder.inputs.indexOf(filter.input) == -1) { - Utils.error('Config', 'Invalid input "{0}"', filter.input); - } - - if (filter.operators) { - filter.operators.forEach(function(operator) { - if (typeof operator != 'string') { - Utils.error('Config', 'Filter operators must be global operators types (string)'); - } - }); - } - - if (!filter.field) { - filter.field = filter.id; - } - if (!filter.label) { - filter.label = filter.field; - } - - if (!filter.optgroup) { - filter.optgroup = null; - } - else { - this.status.has_optgroup = true; - - // register optgroup if needed - if (!this.settings.optgroups[filter.optgroup]) { - this.settings.optgroups[filter.optgroup] = filter.optgroup; - } - } - - switch (filter.input) { - case 'radio': - case 'checkbox': - if (!filter.values || filter.values.length < 1) { - Utils.error('Config', 'Missing filter "{0}" values', filter.id); - } - break; - - case 'select': - var cleanValues = []; - filter.has_optgroup = false; - - Utils.iterateOptions(filter.values, function(value, label, optgroup) { - cleanValues.push({ - value: value, - label: label, - optgroup: optgroup || null - }); - - if (optgroup) { - filter.has_optgroup = true; - - // register optgroup if needed - if (!this.settings.optgroups[optgroup]) { - this.settings.optgroups[optgroup] = optgroup; - } - } - }.bind(this)); - - if (filter.has_optgroup) { - filter.values = Utils.groupSort(cleanValues, 'optgroup'); - } - else { - filter.values = cleanValues; - } - - if (filter.placeholder) { - if (filter.placeholder_value === undefined) { - filter.placeholder_value = -1; - } - - filter.values.forEach(function(entry) { - if (entry.value == filter.placeholder_value) { - Utils.error('Config', 'Placeholder of filter "{0}" overlaps with one of its values', filter.id); - } - }); - } - break; - } - }, this); - - if (this.settings.sort_filters) { - if (typeof this.settings.sort_filters == 'function') { - filters.sort(this.settings.sort_filters); - } - else { - var self = this; - filters.sort(function(a, b) { - return self.translate(a.label).localeCompare(self.translate(b.label)); - }); - } - } - - if (this.status.has_optgroup) { - filters = Utils.groupSort(filters, 'optgroup'); - } - - return filters; -}; - -/** - * Checks the configuration of each operator - * @param {QueryBuilder.Operator[]} operators - * @returns {QueryBuilder.Operator[]} - * @throws ConfigError - */ -QueryBuilder.prototype.checkOperators = function(operators) { - var definedOperators = []; - - operators.forEach(function(operator, i) { - if (typeof operator == 'string') { - if (!QueryBuilder.OPERATORS[operator]) { - Utils.error('Config', 'Unknown operator "{0}"', operator); - } - - operators[i] = operator = $.extendext(true, 'replace', {}, QueryBuilder.OPERATORS[operator]); - } - else { - if (!operator.type) { - Utils.error('Config', 'Missing "type" for operator {0}', i); - } - - if (QueryBuilder.OPERATORS[operator.type]) { - operators[i] = operator = $.extendext(true, 'replace', {}, QueryBuilder.OPERATORS[operator.type], operator); - } - - if (operator.nb_inputs === undefined || operator.apply_to === undefined) { - Utils.error('Config', 'Missing "nb_inputs" and/or "apply_to" for operator "{0}"', operator.type); - } - } - - if (definedOperators.indexOf(operator.type) != -1) { - Utils.error('Config', 'Operator "{0}" already defined', operator.type); - } - definedOperators.push(operator.type); - - if (!operator.optgroup) { - operator.optgroup = null; - } - else { - this.status.has_operator_optgroup = true; - - // register optgroup if needed - if (!this.settings.optgroups[operator.optgroup]) { - this.settings.optgroups[operator.optgroup] = operator.optgroup; - } - } - }, this); - - if (this.status.has_operator_optgroup) { - operators = Utils.groupSort(operators, 'optgroup'); - } - - return operators; -}; - -/** - * Adds all events listeners to the builder - * @private - */ -QueryBuilder.prototype.bindEvents = function() { - var self = this; - var Selectors = QueryBuilder.selectors; - - // group condition change - this.$el.on('change.queryBuilder', Selectors.group_condition, function() { - if ($(this).is(':checked')) { - var $group = $(this).closest(Selectors.group_container); - self.getModel($group).condition = $(this).val(); - } - }); - - // rule filter change - this.$el.on('change.queryBuilder', Selectors.rule_filter, function() { - var $rule = $(this).closest(Selectors.rule_container); - self.getModel($rule).filter = self.getFilterById($(this).val()); - }); - - // rule operator change - this.$el.on('change.queryBuilder', Selectors.rule_operator, function() { - var $rule = $(this).closest(Selectors.rule_container); - self.getModel($rule).operator = self.getOperatorByType($(this).val()); - }); - - // add rule button - this.$el.on('click.queryBuilder', Selectors.add_rule, function() { - var $group = $(this).closest(Selectors.group_container); - self.addRule(self.getModel($group)); - }); - - // delete rule button - this.$el.on('click.queryBuilder', Selectors.delete_rule, function() { - var $rule = $(this).closest(Selectors.rule_container); - self.deleteRule(self.getModel($rule)); - }); - - if (this.settings.allow_groups !== 0) { - // add group button - this.$el.on('click.queryBuilder', Selectors.add_group, function() { - var $group = $(this).closest(Selectors.group_container); - self.addGroup(self.getModel($group)); - }); - - // delete group button - this.$el.on('click.queryBuilder', Selectors.delete_group, function() { - var $group = $(this).closest(Selectors.group_container); - self.deleteGroup(self.getModel($group)); - }); - } - - // model events - this.model.on({ - 'drop': function(e, node) { - node.$el.remove(); - self.refreshGroupsConditions(); - }, - 'add': function(e, parent, node, index) { - if (index === 0) { - node.$el.prependTo(parent.$el.find('>' + QueryBuilder.selectors.rules_list)); - } - else { - node.$el.insertAfter(parent.rules[index - 1].$el); - } - self.refreshGroupsConditions(); - }, - 'move': function(e, node, group, index) { - node.$el.detach(); - - if (index === 0) { - node.$el.prependTo(group.$el.find('>' + QueryBuilder.selectors.rules_list)); - } - else { - node.$el.insertAfter(group.rules[index - 1].$el); - } - self.refreshGroupsConditions(); - }, - 'update': function(e, node, field, value, oldValue) { - if (node instanceof Rule) { - switch (field) { - case 'error': - self.updateError(node); - break; - - case 'flags': - self.applyRuleFlags(node); - break; - - case 'filter': - self.updateRuleFilter(node, oldValue); - break; - - case 'operator': - self.updateRuleOperator(node, oldValue); - break; - - case 'value': - self.updateRuleValue(node, oldValue); - break; - } - } - else { - switch (field) { - case 'error': - self.updateError(node); - break; - - case 'flags': - self.applyGroupFlags(node); - break; - - case 'condition': - self.updateGroupCondition(node, oldValue); - break; - } - } - } - }); -}; - -/** - * Creates the root group - * @param {boolean} [addRule=true] - adds a default empty rule - * @param {object} [data] - group custom data - * @param {object} [flags] - flags to apply to the group - * @returns {Group} root group - * @fires QueryBuilder.afterAddGroup - */ -QueryBuilder.prototype.setRoot = function(addRule, data, flags) { - addRule = (addRule === undefined || addRule === true); - - var group_id = this.nextGroupId(); - var $group = $(this.getGroupTemplate(group_id, 1)); - - this.$el.append($group); - this.model.root = new Group(null, $group); - this.model.root.model = this.model; - - this.model.root.data = data; - this.model.root.flags = $.extend({}, this.settings.default_group_flags, flags); - this.model.root.condition = this.settings.default_condition; - - this.trigger('afterAddGroup', this.model.root); - - if (addRule) { - this.addRule(this.model.root); - } - - return this.model.root; -}; - -/** - * Adds a new group - * @param {Group} parent - * @param {boolean} [addRule=true] - adds a default empty rule - * @param {object} [data] - group custom data - * @param {object} [flags] - flags to apply to the group - * @returns {Group} - * @fires QueryBuilder.beforeAddGroup - * @fires QueryBuilder.afterAddGroup - */ -QueryBuilder.prototype.addGroup = function(parent, addRule, data, flags) { - addRule = (addRule === undefined || addRule === true); - - var level = parent.level + 1; - - /** - * Just before adding a group, can be prevented. - * @event beforeAddGroup - * @memberof QueryBuilder - * @param {Group} parent - * @param {boolean} addRule - if an empty rule will be added in the group - * @param {int} level - nesting level of the group, 1 is the root group - */ - var e = this.trigger('beforeAddGroup', parent, addRule, level); - if (e.isDefaultPrevented()) { - return null; - } - - var group_id = this.nextGroupId(); - var $group = $(this.getGroupTemplate(group_id, level)); - var model = parent.addGroup($group); - - model.data = data; - model.flags = $.extend({}, this.settings.default_group_flags, flags); - model.condition = this.settings.default_condition; - - /** - * Just after adding a group - * @event afterAddGroup - * @memberof QueryBuilder - * @param {Group} group - */ - this.trigger('afterAddGroup', model); - - /** - * After any change in the rules - * @event rulesChanged - * @memberof QueryBuilder - */ - this.trigger('rulesChanged'); - - if (addRule) { - this.addRule(model); - } - - return model; -}; - -/** - * Tries to delete a group. The group is not deleted if at least one rule is flagged `no_delete`. - * @param {Group} group - * @returns {boolean} if the group has been deleted - * @fires QueryBuilder.beforeDeleteGroup - * @fires QueryBuilder.afterDeleteGroup - */ -QueryBuilder.prototype.deleteGroup = function(group) { - if (group.isRoot()) { - return false; - } - - /** - * Just before deleting a group, can be prevented - * @event beforeDeleteGroup - * @memberof QueryBuilder - * @param {Group} parent - */ - var e = this.trigger('beforeDeleteGroup', group); - if (e.isDefaultPrevented()) { - return false; - } - - var del = true; - - group.each('reverse', function(rule) { - del &= this.deleteRule(rule); - }, function(group) { - del &= this.deleteGroup(group); - }, this); - - if (del) { - group.drop(); - - /** - * Just after deleting a group - * @event afterDeleteGroup - * @memberof QueryBuilder - */ - this.trigger('afterDeleteGroup'); - - this.trigger('rulesChanged'); - } - - return del; -}; - -/** - * Performs actions when a group's condition changes - * @param {Group} group - * @param {object} previousCondition - * @fires QueryBuilder.afterUpdateGroupCondition - * @private - */ -QueryBuilder.prototype.updateGroupCondition = function(group, previousCondition) { - group.$el.find('>' + QueryBuilder.selectors.group_condition).each(function() { - var $this = $(this); - $this.prop('checked', $this.val() === group.condition); - $this.parent().toggleClass('active', $this.val() === group.condition); - }); - - /** - * After the group condition has been modified - * @event afterUpdateGroupCondition - * @memberof QueryBuilder - * @param {Group} group - * @param {object} previousCondition - */ - this.trigger('afterUpdateGroupCondition', group, previousCondition); - - this.trigger('rulesChanged'); -}; - -/** - * Updates the visibility of conditions based on number of rules inside each group - * @private - */ -QueryBuilder.prototype.refreshGroupsConditions = function() { - (function walk(group) { - if (!group.flags || (group.flags && !group.flags.condition_readonly)) { - group.$el.find('>' + QueryBuilder.selectors.group_condition).prop('disabled', group.rules.length <= 1) - .parent().toggleClass('disabled', group.rules.length <= 1); - } - - group.each(null, function(group) { - walk(group); - }, this); - }(this.model.root)); -}; - -/** - * Adds a new rule - * @param {Group} parent - * @param {object} [data] - rule custom data - * @param {object} [flags] - flags to apply to the rule - * @returns {Rule} - * @fires QueryBuilder.beforeAddRule - * @fires QueryBuilder.afterAddRule - * @fires QueryBuilder.changer:getDefaultFilter - */ -QueryBuilder.prototype.addRule = function(parent, data, flags) { - /** - * Just before adding a rule, can be prevented - * @event beforeAddRule - * @memberof QueryBuilder - * @param {Group} parent - */ - var e = this.trigger('beforeAddRule', parent); - if (e.isDefaultPrevented()) { - return null; - } - - var rule_id = this.nextRuleId(); - var $rule = $(this.getRuleTemplate(rule_id)); - var model = parent.addRule($rule); - - model.data = data; - model.flags = $.extend({}, this.settings.default_rule_flags, flags); - - /** - * Just after adding a rule - * @event afterAddRule - * @memberof QueryBuilder - * @param {Rule} rule - */ - this.trigger('afterAddRule', model); - - this.trigger('rulesChanged'); - - this.createRuleFilters(model); - - if (this.settings.default_filter || !this.settings.display_empty_filter) { - /** - * Modifies the default filter for a rule - * @event changer:getDefaultFilter - * @memberof QueryBuilder - * @param {QueryBuilder.Filter} filter - * @param {Rule} rule - * @returns {QueryBuilder.Filter} - */ - model.filter = this.change('getDefaultFilter', - this.getFilterById(this.settings.default_filter || this.filters[0].id), - model - ); - } - - return model; -}; - -/** - * Tries to delete a rule - * @param {Rule} rule - * @returns {boolean} if the rule has been deleted - * @fires QueryBuilder.beforeDeleteRule - * @fires QueryBuilder.afterDeleteRule - */ -QueryBuilder.prototype.deleteRule = function(rule) { - if (rule.flags.no_delete) { - return false; - } - - /** - * Just before deleting a rule, can be prevented - * @event beforeDeleteRule - * @memberof QueryBuilder - * @param {Rule} rule - */ - var e = this.trigger('beforeDeleteRule', rule); - if (e.isDefaultPrevented()) { - return false; - } - - rule.drop(); - - /** - * Just after deleting a rule - * @event afterDeleteRule - * @memberof QueryBuilder - */ - this.trigger('afterDeleteRule'); - - this.trigger('rulesChanged'); - - return true; -}; - -/** - * Creates the filters for a rule - * @param {Rule} rule - * @fires QueryBuilder.changer:getRuleFilters - * @fires QueryBuilder.afterCreateRuleFilters - * @private - */ -QueryBuilder.prototype.createRuleFilters = function(rule) { - /** - * Modifies the list a filters available for a rule - * @event changer:getRuleFilters - * @memberof QueryBuilder - * @param {QueryBuilder.Filter[]} filters - * @param {Rule} rule - * @returns {QueryBuilder.Filter[]} - */ - var filters = this.change('getRuleFilters', this.filters, rule); - var $filterSelect = $(this.getRuleFilterSelect(rule, filters)); - - rule.$el.find(QueryBuilder.selectors.filter_container).html($filterSelect); - - /** - * After creating the dropdown for filters - * @event afterCreateRuleFilters - * @memberof QueryBuilder - * @param {Rule} rule - */ - this.trigger('afterCreateRuleFilters', rule); - - this.applyRuleFlags(rule); -}; - -/** - * Creates the operators for a rule and init the rule operator - * @param {Rule} rule - * @fires QueryBuilder.afterCreateRuleOperators - * @private - */ -QueryBuilder.prototype.createRuleOperators = function(rule) { - var $operatorContainer = rule.$el.find(QueryBuilder.selectors.operator_container).empty(); - - if (!rule.filter) { - return; - } - - var operators = this.getOperators(rule.filter); - var $operatorSelect = $(this.getRuleOperatorSelect(rule, operators)); - - $operatorContainer.html($operatorSelect); - - // set the operator without triggering update event - if (rule.filter.default_operator) { - rule.__.operator = this.getOperatorByType(rule.filter.default_operator); - } - else { - rule.__.operator = operators[0]; - } - - rule.$el.find(QueryBuilder.selectors.rule_operator).val(rule.operator.type); - - /** - * After creating the dropdown for operators - * @event afterCreateRuleOperators - * @memberof QueryBuilder - * @param {Rule} rule - * @param {QueryBuilder.Operator[]} operators - allowed operators for this rule - */ - this.trigger('afterCreateRuleOperators', rule, operators); - - this.applyRuleFlags(rule); -}; - -/** - * Creates the main input for a rule - * @param {Rule} rule - * @fires QueryBuilder.afterCreateRuleInput - * @private - */ -QueryBuilder.prototype.createRuleInput = function(rule) { - var $valueContainer = rule.$el.find(QueryBuilder.selectors.value_container).empty(); - - rule.__.value = undefined; - - if (!rule.filter || !rule.operator || rule.operator.nb_inputs === 0) { - return; - } - - var self = this; - var $inputs = $(); - var filter = rule.filter; - - for (var i = 0; i < rule.operator.nb_inputs; i++) { - var $ruleInput = $(this.getRuleInput(rule, i)); - if (i > 0) $valueContainer.append(this.settings.inputs_separator); - $valueContainer.append($ruleInput); - $inputs = $inputs.add($ruleInput); - } - - $valueContainer.css('display', ''); - - $inputs.on('change ' + (filter.input_event || ''), function() { - if (!rule._updating_input) { - rule._updating_value = true; - rule.value = self.getRuleInputValue(rule); - rule._updating_value = false; - } - }); - - if (filter.plugin) { - $inputs[filter.plugin](filter.plugin_config || {}); - } - - /** - * After creating the input for a rule and initializing optional plugin - * @event afterCreateRuleInput - * @memberof QueryBuilder - * @param {Rule} rule - */ - this.trigger('afterCreateRuleInput', rule); - - if (filter.default_value !== undefined) { - rule.value = filter.default_value; - } - else { - rule._updating_value = true; - rule.value = self.getRuleInputValue(rule); - rule._updating_value = false; - } - - this.applyRuleFlags(rule); -}; - -/** - * Performs action when a rule's filter changes - * @param {Rule} rule - * @param {object} previousFilter - * @fires QueryBuilder.afterUpdateRuleFilter - * @private - */ -QueryBuilder.prototype.updateRuleFilter = function(rule, previousFilter) { - this.createRuleOperators(rule); - this.createRuleInput(rule); - - rule.$el.find(QueryBuilder.selectors.rule_filter).val(rule.filter ? rule.filter.id : '-1'); - - // clear rule data if the filter changed - if (previousFilter && rule.filter && previousFilter.id !== rule.filter.id) { - rule.data = undefined; - } - - /** - * After the filter has been updated and the operators and input re-created - * @event afterUpdateRuleFilter - * @memberof QueryBuilder - * @param {Rule} rule - * @param {object} previousFilter - */ - this.trigger('afterUpdateRuleFilter', rule, previousFilter); - - this.trigger('rulesChanged'); -}; - -/** - * Performs actions when a rule's operator changes - * @param {Rule} rule - * @param {object} previousOperator - * @fires QueryBuilder.afterUpdateRuleOperator - * @private - */ -QueryBuilder.prototype.updateRuleOperator = function(rule, previousOperator) { - var $valueContainer = rule.$el.find(QueryBuilder.selectors.value_container); - - if (!rule.operator || rule.operator.nb_inputs === 0) { - $valueContainer.hide(); - - rule.__.value = undefined; - } - else { - $valueContainer.css('display', ''); - - if ($valueContainer.is(':empty') || !previousOperator || - rule.operator.nb_inputs !== previousOperator.nb_inputs || - rule.operator.optgroup !== previousOperator.optgroup - ) { - this.createRuleInput(rule); - } - } - - if (rule.operator) { - rule.$el.find(QueryBuilder.selectors.rule_operator).val(rule.operator.type); - - // refresh value if the format changed for this operator - rule.__.value = this.getRuleInputValue(rule); - } - - /** - * After the operator has been updated and the input optionally re-created - * @event afterUpdateRuleOperator - * @memberof QueryBuilder - * @param {Rule} rule - * @param {object} previousOperator - */ - this.trigger('afterUpdateRuleOperator', rule, previousOperator); - - this.trigger('rulesChanged'); -}; - -/** - * Performs actions when rule's value changes - * @param {Rule} rule - * @param {object} previousValue - * @fires QueryBuilder.afterUpdateRuleValue - * @private - */ -QueryBuilder.prototype.updateRuleValue = function(rule, previousValue) { - if (!rule._updating_value) { - this.setRuleInputValue(rule, rule.value); - } - - /** - * After the rule value has been modified - * @event afterUpdateRuleValue - * @memberof QueryBuilder - * @param {Rule} rule - * @param {*} previousValue - */ - this.trigger('afterUpdateRuleValue', rule, previousValue); - - this.trigger('rulesChanged'); -}; - -/** - * Changes a rule's properties depending on its flags - * @param {Rule} rule - * @fires QueryBuilder.afterApplyRuleFlags - * @private - */ -QueryBuilder.prototype.applyRuleFlags = function(rule) { - var flags = rule.flags; - var Selectors = QueryBuilder.selectors; - - rule.$el.find(Selectors.rule_filter).prop('disabled', flags.filter_readonly); - rule.$el.find(Selectors.rule_operator).prop('disabled', flags.operator_readonly); - rule.$el.find(Selectors.rule_value).prop('disabled', flags.value_readonly); - - if (flags.no_delete) { - rule.$el.find(Selectors.delete_rule).remove(); - } - - /** - * After rule's flags has been applied - * @event afterApplyRuleFlags - * @memberof QueryBuilder - * @param {Rule} rule - */ - this.trigger('afterApplyRuleFlags', rule); -}; - -/** - * Changes group's properties depending on its flags - * @param {Group} group - * @fires QueryBuilder.afterApplyGroupFlags - * @private - */ -QueryBuilder.prototype.applyGroupFlags = function(group) { - var flags = group.flags; - var Selectors = QueryBuilder.selectors; - - group.$el.find('>' + Selectors.group_condition).prop('disabled', flags.condition_readonly) - .parent().toggleClass('readonly', flags.condition_readonly); - - if (flags.no_add_rule) { - group.$el.find(Selectors.add_rule).remove(); - } - if (flags.no_add_group) { - group.$el.find(Selectors.add_group).remove(); - } - if (flags.no_delete) { - group.$el.find(Selectors.delete_group).remove(); - } - - /** - * After group's flags has been applied - * @event afterApplyGroupFlags - * @memberof QueryBuilder - * @param {Group} group - */ - this.trigger('afterApplyGroupFlags', group); -}; - -/** - * Clears all errors markers - * @param {Node} [node] default is root Group - */ -QueryBuilder.prototype.clearErrors = function(node) { - node = node || this.model.root; - - if (!node) { - return; - } - - node.error = null; - - if (node instanceof Group) { - node.each(function(rule) { - rule.error = null; - }, function(group) { - this.clearErrors(group); - }, this); - } -}; - -/** - * Adds/Removes error on a Rule or Group - * @param {Node} node - * @fires QueryBuilder.changer:displayError - * @private - */ -QueryBuilder.prototype.updateError = function(node) { - if (this.settings.display_errors) { - if (node.error === null) { - node.$el.removeClass('has-error'); - } - else { - var errorMessage = this.translate('errors', node.error[0]); - errorMessage = Utils.fmt(errorMessage, node.error.slice(1)); - - /** - * Modifies an error message before display - * @event changer:displayError - * @memberof QueryBuilder - * @param {string} errorMessage - the error message (translated and formatted) - * @param {array} error - the raw error array (error code and optional arguments) - * @param {Node} node - * @returns {string} - */ - errorMessage = this.change('displayError', errorMessage, node.error, node); - - node.$el.addClass('has-error') - .find(QueryBuilder.selectors.error_container).eq(0) - .attr('title', errorMessage); - } - } -}; - -/** - * Triggers a validation error event - * @param {Node} node - * @param {string|array} error - * @param {*} value - * @fires QueryBuilder.validationError - * @private - */ -QueryBuilder.prototype.triggerValidationError = function(node, error, value) { - if (!$.isArray(error)) { - error = [error]; - } - - /** - * Fired when a validation error occurred, can be prevented - * @event validationError - * @memberof QueryBuilder - * @param {Node} node - * @param {string} error - * @param {*} value - */ - var e = this.trigger('validationError', node, error, value); - if (!e.isDefaultPrevented()) { - node.error = error; - } -}; - - -/** - * Destroys the builder - * @fires QueryBuilder.beforeDestroy - */ -QueryBuilder.prototype.destroy = function() { - /** - * Before the {@link QueryBuilder#destroy} method - * @event beforeDestroy - * @memberof QueryBuilder - */ - this.trigger('beforeDestroy'); - - if (this.status.generated_id) { - this.$el.removeAttr('id'); - } - - this.clear(); - this.model = null; - - this.$el - .off('.queryBuilder') - .removeClass('query-builder') - .removeData('queryBuilder'); - - delete this.$el[0].queryBuilder; -}; - -/** - * Clear all rules and resets the root group - * @fires QueryBuilder.beforeReset - * @fires QueryBuilder.afterReset - */ -QueryBuilder.prototype.reset = function() { - /** - * Before the {@link QueryBuilder#reset} method, can be prevented - * @event beforeReset - * @memberof QueryBuilder - */ - var e = this.trigger('beforeReset'); - if (e.isDefaultPrevented()) { - return; - } - - this.status.group_id = 1; - this.status.rule_id = 0; - - this.model.root.empty(); - - this.model.root.data = undefined; - this.model.root.flags = $.extend({}, this.settings.default_group_flags); - this.model.root.condition = this.settings.default_condition; - - this.addRule(this.model.root); - - /** - * After the {@link QueryBuilder#reset} method - * @event afterReset - * @memberof QueryBuilder - */ - this.trigger('afterReset'); - - this.trigger('rulesChanged'); -}; - -/** - * Clears all rules and removes the root group - * @fires QueryBuilder.beforeClear - * @fires QueryBuilder.afterClear - */ -QueryBuilder.prototype.clear = function() { - /** - * Before the {@link QueryBuilder#clear} method, can be prevented - * @event beforeClear - * @memberof QueryBuilder - */ - var e = this.trigger('beforeClear'); - if (e.isDefaultPrevented()) { - return; - } - - this.status.group_id = 0; - this.status.rule_id = 0; - - if (this.model.root) { - this.model.root.drop(); - this.model.root = null; - } - - /** - * After the {@link QueryBuilder#clear} method - * @event afterClear - * @memberof QueryBuilder - */ - this.trigger('afterClear'); - - this.trigger('rulesChanged'); -}; - -/** - * Modifies the builder configuration.
- * Only options defined in QueryBuilder.modifiable_options are modifiable - * @param {object} options - */ -QueryBuilder.prototype.setOptions = function(options) { - $.each(options, function(opt, value) { - if (QueryBuilder.modifiable_options.indexOf(opt) !== -1) { - this.settings[opt] = value; - } - }.bind(this)); -}; - -/** - * Returns the model associated to a DOM object, or the root model - * @param {jQuery} [target] - * @returns {Node} - */ -QueryBuilder.prototype.getModel = function(target) { - if (!target) { - return this.model.root; - } - else if (target instanceof Node) { - return target; - } - else { - return $(target).data('queryBuilderModel'); - } -}; - -/** - * Validates the whole builder - * @param {object} [options] - * @param {boolean} [options.skip_empty=false] - skips validating rules that have no filter selected - * @returns {boolean} - * @fires QueryBuilder.changer:validate - */ -QueryBuilder.prototype.validate = function(options) { - options = $.extend({ - skip_empty: false - }, options); - - this.clearErrors(); - - var self = this; - - var valid = (function parse(group) { - var done = 0; - var errors = 0; - - group.each(function(rule) { - if (!rule.filter && options.skip_empty) { - return; - } - - if (!rule.filter) { - self.triggerValidationError(rule, 'no_filter', null); - errors++; - return; - } - - if (!rule.operator) { - self.triggerValidationError(rule, 'no_operator', null); - errors++; - return; - } - - if (rule.operator.nb_inputs !== 0) { - var valid = self.validateValue(rule, rule.value); - - if (valid !== true) { - self.triggerValidationError(rule, valid, rule.value); - errors++; - return; - } - } - - done++; - - }, function(group) { - var res = parse(group); - if (res === true) { - done++; - } - else if (res === false) { - errors++; - } - }); - - if (errors > 0) { - return false; - } - else if (done === 0 && !group.isRoot() && options.skip_empty) { - return null; - } - else if (done === 0 && (!self.settings.allow_empty || !group.isRoot())) { - self.triggerValidationError(group, 'empty_group', null); - return false; - } - - return true; - - }(this.model.root)); - - /** - * Modifies the result of the {@link QueryBuilder#validate} method - * @event changer:validate - * @memberof QueryBuilder - * @param {boolean} valid - * @returns {boolean} - */ - return this.change('validate', valid); -}; - -/** - * Gets an object representing current rules - * @param {object} [options] - * @param {boolean|string} [options.get_flags=false] - export flags, true: only changes from default flags or 'all' - * @param {boolean} [options.allow_invalid=false] - returns rules even if they are invalid - * @param {boolean} [options.skip_empty=false] - remove rules that have no filter selected - * @returns {object} - * @fires QueryBuilder.changer:ruleToJson - * @fires QueryBuilder.changer:groupToJson - * @fires QueryBuilder.changer:getRules - */ -QueryBuilder.prototype.getRules = function(options) { - options = $.extend({ - get_flags: false, - allow_invalid: false, - skip_empty: false - }, options); - - var valid = this.validate(options); - if (!valid && !options.allow_invalid) { - return null; - } - - var self = this; - - var out = (function parse(group) { - var groupData = { - condition: group.condition, - rules: [] - }; - - if (group.data) { - groupData.data = $.extendext(true, 'replace', {}, group.data); - } - - if (options.get_flags) { - var flags = self.getGroupFlags(group.flags, options.get_flags === 'all'); - if (!$.isEmptyObject(flags)) { - groupData.flags = flags; - } - } - - group.each(function(rule) { - if (!rule.filter && options.skip_empty) { - return; - } - - var value = null; - if (!rule.operator || rule.operator.nb_inputs !== 0) { - value = rule.value; - } - - var ruleData = { - id: rule.filter ? rule.filter.id : null, - field: rule.filter ? rule.filter.field : null, - type: rule.filter ? rule.filter.type : null, - input: rule.filter ? rule.filter.input : null, - operator: rule.operator ? rule.operator.type : null, - value: value - }; - - if (rule.filter && rule.filter.data || rule.data) { - ruleData.data = $.extendext(true, 'replace', {}, rule.filter.data, rule.data); - } - - if (options.get_flags) { - var flags = self.getRuleFlags(rule.flags, options.get_flags === 'all'); - if (!$.isEmptyObject(flags)) { - ruleData.flags = flags; - } - } - - /** - * Modifies the JSON generated from a Rule object - * @event changer:ruleToJson - * @memberof QueryBuilder - * @param {object} json - * @param {Rule} rule - * @returns {object} - */ - groupData.rules.push(self.change('ruleToJson', ruleData, rule)); - - }, function(model) { - var data = parse(model); - if (data.rules.length !== 0 || !options.skip_empty) { - groupData.rules.push(data); - } - }, this); - - /** - * Modifies the JSON generated from a Group object - * @event changer:groupToJson - * @memberof QueryBuilder - * @param {object} json - * @param {Group} group - * @returns {object} - */ - return self.change('groupToJson', groupData, group); - - }(this.model.root)); - - out.valid = valid; - - /** - * Modifies the result of the {@link QueryBuilder#getRules} method - * @event changer:getRules - * @memberof QueryBuilder - * @param {object} json - * @returns {object} - */ - return this.change('getRules', out); -}; - -/** - * Sets rules from object - * @param {object} data - * @param {object} [options] - * @param {boolean} [options.allow_invalid=false] - silent-fail if the data are invalid - * @throws RulesError, UndefinedConditionError - * @fires QueryBuilder.changer:setRules - * @fires QueryBuilder.changer:jsonToRule - * @fires QueryBuilder.changer:jsonToGroup - * @fires QueryBuilder.afterSetRules - */ -QueryBuilder.prototype.setRules = function(data, options) { - options = $.extend({ - allow_invalid: false - }, options); - - if ($.isArray(data)) { - data = { - condition: this.settings.default_condition, - rules: data - }; - } - - if (!data || !data.rules || (data.rules.length === 0 && !this.settings.allow_empty)) { - Utils.error('RulesParse', 'Incorrect data object passed'); - } - - this.clear(); - this.setRoot(false, data.data, this.parseGroupFlags(data)); - - /** - * Modifies data before the {@link QueryBuilder#setRules} method - * @event changer:setRules - * @memberof QueryBuilder - * @param {object} json - * @param {object} options - * @returns {object} - */ - data = this.change('setRules', data, options); - - var self = this; - - (function add(data, group) { - if (group === null) { - return; - } - - if (data.condition === undefined) { - data.condition = self.settings.default_condition; - } - else if (self.settings.conditions.indexOf(data.condition) == -1) { - Utils.error(!options.allow_invalid, 'UndefinedCondition', 'Invalid condition "{0}"', data.condition); - data.condition = self.settings.default_condition; - } - - group.condition = data.condition; - - data.rules.forEach(function(item) { - var model; - - if (item.rules !== undefined) { - if (self.settings.allow_groups !== -1 && self.settings.allow_groups < group.level) { - Utils.error(!options.allow_invalid, 'RulesParse', 'No more than {0} groups are allowed', self.settings.allow_groups); - self.reset(); - } - else { - model = self.addGroup(group, false, item.data, self.parseGroupFlags(item)); - if (model === null) { - return; - } - - add(item, model); - } - } - else { - if (!item.empty) { - if (item.id === undefined) { - Utils.error(!options.allow_invalid, 'RulesParse', 'Missing rule field id'); - item.empty = true; - } - if (item.operator === undefined) { - item.operator = 'equal'; - } - } - - model = self.addRule(group, item.data, self.parseRuleFlags(item)); - if (model === null) { - return; - } - - if (!item.empty) { - model.filter = self.getFilterById(item.id, !options.allow_invalid); - } - - if (model.filter) { - model.operator = self.getOperatorByType(item.operator, !options.allow_invalid); - - if (!model.operator) { - model.operator = self.getOperators(model.filter)[0]; - } - } - - if (model.operator && model.operator.nb_inputs !== 0) { - if (item.value !== undefined) { - model.value = item.value; - } - else if (model.filter.default_value !== undefined) { - model.value = model.filter.default_value; - } - } - - /** - * Modifies the Rule object generated from the JSON - * @event changer:jsonToRule - * @memberof QueryBuilder - * @param {Rule} rule - * @param {object} json - * @returns {Rule} the same rule - */ - if (self.change('jsonToRule', model, item) != model) { - Utils.error('RulesParse', 'Plugin tried to change rule reference'); - } - } - }); - - /** - * Modifies the Group object generated from the JSON - * @event changer:jsonToGroup - * @memberof QueryBuilder - * @param {Group} group - * @param {object} json - * @returns {Group} the same group - */ - if (self.change('jsonToGroup', group, data) != group) { - Utils.error('RulesParse', 'Plugin tried to change group reference'); - } - - }(data, this.model.root)); - - /** - * After the {@link QueryBuilder#setRules} method - * @event afterSetRules - * @memberof QueryBuilder - */ - this.trigger('afterSetRules'); -}; - - -/** - * Performs value validation - * @param {Rule} rule - * @param {string|string[]} value - * @returns {array|boolean} true or error array - * @fires QueryBuilder.changer:validateValue - */ -QueryBuilder.prototype.validateValue = function(rule, value) { - var validation = rule.filter.validation || {}; - var result = true; - - if (validation.callback) { - result = validation.callback.call(this, value, rule); - } - else { - result = this._validateValue(rule, value); - } - - /** - * Modifies the result of the rule validation method - * @event changer:validateValue - * @memberof QueryBuilder - * @param {array|boolean} result - true or an error array - * @param {*} value - * @param {Rule} rule - * @returns {array|boolean} - */ - return this.change('validateValue', result, value, rule); -}; - -/** - * Default validation function - * @param {Rule} rule - * @param {string|string[]} value - * @returns {array|boolean} true or error array - * @throws ConfigError - * @private - */ -QueryBuilder.prototype._validateValue = function(rule, value) { - var filter = rule.filter; - var operator = rule.operator; - var validation = filter.validation || {}; - var result = true; - var tmp, tempValue; - - if (rule.operator.nb_inputs === 1) { - value = [value]; - } - - for (var i = 0; i < operator.nb_inputs; i++) { - if (!operator.multiple && $.isArray(value[i]) && value[i].length > 1) { - result = ['operator_not_multiple', operator.type, this.translate('operators', operator.type)]; - break; - } - - switch (filter.input) { - case 'radio': - if (value[i] === undefined || value[i].length === 0) { - if (!validation.allow_empty_value) { - result = ['radio_empty']; - } - break; - } - break; - - case 'checkbox': - if (value[i] === undefined || value[i].length === 0) { - if (!validation.allow_empty_value) { - result = ['checkbox_empty']; - } - break; - } - break; - - case 'select': - if (value[i] === undefined || value[i].length === 0 || (filter.placeholder && value[i] == filter.placeholder_value)) { - if (!validation.allow_empty_value) { - result = ['select_empty']; - } - break; - } - break; - - default: - tempValue = $.isArray(value[i]) ? value[i] : [value[i]]; - - for (var j = 0; j < tempValue.length; j++) { - switch (QueryBuilder.types[filter.type]) { - case 'string': - if (tempValue[j] === undefined || tempValue[j].length === 0) { - if (!validation.allow_empty_value) { - result = ['string_empty']; - } - break; - } - if (validation.min !== undefined) { - if (tempValue[j].length < parseInt(validation.min)) { - result = [this.getValidationMessage(validation, 'min', 'string_exceed_min_length'), validation.min]; - break; - } - } - if (validation.max !== undefined) { - if (tempValue[j].length > parseInt(validation.max)) { - result = [this.getValidationMessage(validation, 'max', 'string_exceed_max_length'), validation.max]; - break; - } - } - if (validation.format) { - if (typeof validation.format == 'string') { - validation.format = new RegExp(validation.format); - } - if (!validation.format.test(tempValue[j])) { - result = [this.getValidationMessage(validation, 'format', 'string_invalid_format'), validation.format]; - break; - } - } - break; - - case 'number': - if (tempValue[j] === undefined || tempValue[j].length === 0) { - if (!validation.allow_empty_value) { - result = ['number_nan']; - } - break; - } - if (isNaN(tempValue[j])) { - result = ['number_nan']; - break; - } - if (filter.type == 'integer') { - if (parseInt(tempValue[j]) != tempValue[j]) { - result = ['number_not_integer']; - break; - } - } - else { - if (parseFloat(tempValue[j]) != tempValue[j]) { - result = ['number_not_double']; - break; - } - } - if (validation.min !== undefined) { - if (tempValue[j] < parseFloat(validation.min)) { - result = [this.getValidationMessage(validation, 'min', 'number_exceed_min'), validation.min]; - break; - } - } - if (validation.max !== undefined) { - if (tempValue[j] > parseFloat(validation.max)) { - result = [this.getValidationMessage(validation, 'max', 'number_exceed_max'), validation.max]; - break; - } - } - if (validation.step !== undefined && validation.step !== 'any') { - var v = (tempValue[j] / validation.step).toPrecision(14); - if (parseInt(v) != v) { - result = [this.getValidationMessage(validation, 'step', 'number_wrong_step'), validation.step]; - break; - } - } - break; - - case 'datetime': - if (tempValue[j] === undefined || tempValue[j].length === 0) { - if (!validation.allow_empty_value) { - result = ['datetime_empty']; - } - break; - } - - // we need MomentJS - if (validation.format) { - if (!('moment' in window)) { - Utils.error('MissingLibrary', 'MomentJS is required for Date/Time validation. Get it here http://momentjs.com'); - } - - var datetime = moment(tempValue[j], validation.format); - if (!datetime.isValid()) { - result = [this.getValidationMessage(validation, 'format', 'datetime_invalid'), validation.format]; - break; - } - else { - if (validation.min) { - if (datetime < moment(validation.min, validation.format)) { - result = [this.getValidationMessage(validation, 'min', 'datetime_exceed_min'), validation.min]; - break; - } - } - if (validation.max) { - if (datetime > moment(validation.max, validation.format)) { - result = [this.getValidationMessage(validation, 'max', 'datetime_exceed_max'), validation.max]; - break; - } - } - } - } - break; - - case 'boolean': - if (tempValue[j] === undefined || tempValue[j].length === 0) { - if (!validation.allow_empty_value) { - result = ['boolean_not_valid']; - } - break; - } - tmp = ('' + tempValue[j]).trim().toLowerCase(); - if (tmp !== 'true' && tmp !== 'false' && tmp !== '1' && tmp !== '0' && tempValue[j] !== 1 && tempValue[j] !== 0) { - result = ['boolean_not_valid']; - break; - } - } - - if (result !== true) { - break; - } - } - } - - if (result !== true) { - break; - } - } - - if ((rule.operator.type === 'between' || rule.operator.type === 'not_between') && value.length === 2) { - switch (QueryBuilder.types[filter.type]) { - case 'number': - if (value[0] > value[1]) { - result = ['number_between_invalid', value[0], value[1]]; - } - break; - - case 'datetime': - // we need MomentJS - if (validation.format) { - if (!('moment' in window)) { - Utils.error('MissingLibrary', 'MomentJS is required for Date/Time validation. Get it here http://momentjs.com'); - } - - if (moment(value[0], validation.format).isAfter(moment(value[1], validation.format))) { - result = ['datetime_between_invalid', value[0], value[1]]; - } - } - break; - } - } - - return result; -}; - -/** - * Returns an incremented group ID - * @returns {string} - * @private - */ -QueryBuilder.prototype.nextGroupId = function() { - return this.status.id + '_group_' + (this.status.group_id++); -}; - -/** - * Returns an incremented rule ID - * @returns {string} - * @private - */ -QueryBuilder.prototype.nextRuleId = function() { - return this.status.id + '_rule_' + (this.status.rule_id++); -}; - -/** - * Returns the operators for a filter - * @param {string|object} filter - filter id or filter object - * @returns {object[]} - * @fires QueryBuilder.changer:getOperators - * @private - */ -QueryBuilder.prototype.getOperators = function(filter) { - if (typeof filter == 'string') { - filter = this.getFilterById(filter); - } - - var result = []; - - for (var i = 0, l = this.operators.length; i < l; i++) { - // filter operators check - if (filter.operators) { - if (filter.operators.indexOf(this.operators[i].type) == -1) { - continue; - } - } - // type check - else if (this.operators[i].apply_to.indexOf(QueryBuilder.types[filter.type]) == -1) { - continue; - } - - result.push(this.operators[i]); - } - - // keep sort order defined for the filter - if (filter.operators) { - result.sort(function(a, b) { - return filter.operators.indexOf(a.type) - filter.operators.indexOf(b.type); - }); - } - - /** - * Modifies the operators available for a filter - * @event changer:getOperators - * @memberof QueryBuilder - * @param {QueryBuilder.Operator[]} operators - * @param {QueryBuilder.Filter} filter - * @returns {QueryBuilder.Operator[]} - */ - return this.change('getOperators', result, filter); -}; - -/** - * Returns a particular filter by its id - * @param {string} id - * @param {boolean} [doThrow=true] - * @returns {object|null} - * @throws UndefinedFilterError - * @private - */ -QueryBuilder.prototype.getFilterById = function(id, doThrow) { - if (id == '-1') { - return null; - } - - for (var i = 0, l = this.filters.length; i < l; i++) { - if (this.filters[i].id == id) { - return this.filters[i]; - } - } - - Utils.error(doThrow !== false, 'UndefinedFilter', 'Undefined filter "{0}"', id); - - return null; -}; - -/** - * Returns a particular operator by its type - * @param {string} type - * @param {boolean} [doThrow=true] - * @returns {object|null} - * @throws UndefinedOperatorError - * @private - */ -QueryBuilder.prototype.getOperatorByType = function(type, doThrow) { - if (type == '-1') { - return null; - } - - for (var i = 0, l = this.operators.length; i < l; i++) { - if (this.operators[i].type == type) { - return this.operators[i]; - } - } - - Utils.error(doThrow !== false, 'UndefinedOperator', 'Undefined operator "{0}"', type); - - return null; -}; - -/** - * Returns rule's current input value - * @param {Rule} rule - * @returns {*} - * @fires QueryBuilder.changer:getRuleValue - * @private - */ -QueryBuilder.prototype.getRuleInputValue = function(rule) { - var filter = rule.filter; - var operator = rule.operator; - var value = []; - - if (filter.valueGetter) { - value = filter.valueGetter.call(this, rule); - } - else { - var $value = rule.$el.find(QueryBuilder.selectors.value_container); - - for (var i = 0; i < operator.nb_inputs; i++) { - var name = Utils.escapeElementId(rule.id + '_value_' + i); - var tmp; - - switch (filter.input) { - case 'radio': - value.push($value.find('[name=' + name + ']:checked').val()); - break; - - case 'checkbox': - tmp = []; - // jshint loopfunc:true - $value.find('[name=' + name + ']:checked').each(function() { - tmp.push($(this).val()); - }); - // jshint loopfunc:false - value.push(tmp); - break; - - case 'select': - if (filter.multiple) { - tmp = []; - // jshint loopfunc:true - $value.find('[name=' + name + '] option:selected').each(function() { - tmp.push($(this).val()); - }); - // jshint loopfunc:false - value.push(tmp); - } - else { - value.push($value.find('[name=' + name + '] option:selected').val()); - } - break; - - default: - value.push($value.find('[name=' + name + ']').val()); - } - } - - value = value.map(function(val) { - if (operator.multiple && filter.value_separator && typeof val == 'string') { - val = val.split(filter.value_separator); - } - - if ($.isArray(val)) { - return val.map(function(subval) { - return Utils.changeType(subval, filter.type); - }); - } - else { - return Utils.changeType(val, filter.type); - } - }); - - if (operator.nb_inputs === 1) { - value = value[0]; - } - - // @deprecated - if (filter.valueParser) { - value = filter.valueParser.call(this, rule, value); - } - } - - /** - * Modifies the rule's value grabbed from the DOM - * @event changer:getRuleValue - * @memberof QueryBuilder - * @param {*} value - * @param {Rule} rule - * @returns {*} - */ - return this.change('getRuleValue', value, rule); -}; - -/** - * Sets the value of a rule's input - * @param {Rule} rule - * @param {*} value - * @private - */ -QueryBuilder.prototype.setRuleInputValue = function(rule, value) { - var filter = rule.filter; - var operator = rule.operator; - - if (!filter || !operator) { - return; - } - - rule._updating_input = true; - - if (filter.valueSetter) { - filter.valueSetter.call(this, rule, value); - } - else { - var $value = rule.$el.find(QueryBuilder.selectors.value_container); - - if (operator.nb_inputs == 1) { - value = [value]; - } - - for (var i = 0; i < operator.nb_inputs; i++) { - var name = Utils.escapeElementId(rule.id + '_value_' + i); - - switch (filter.input) { - case 'radio': - $value.find('[name=' + name + '][value="' + value[i] + '"]').prop('checked', true).trigger('change'); - break; - - case 'checkbox': - if (!$.isArray(value[i])) { - value[i] = [value[i]]; - } - // jshint loopfunc:true - value[i].forEach(function(value) { - $value.find('[name=' + name + '][value="' + value + '"]').prop('checked', true).trigger('change'); - }); - // jshint loopfunc:false - break; - - default: - if (operator.multiple && filter.value_separator && $.isArray(value[i])) { - value[i] = value[i].join(filter.value_separator); - } - $value.find('[name=' + name + ']').val(value[i]).trigger('change'); - break; - } - } - } - - rule._updating_input = false; -}; - -/** - * Parses rule flags - * @param {object} rule - * @returns {object} - * @fires QueryBuilder.changer:parseRuleFlags - * @private - */ -QueryBuilder.prototype.parseRuleFlags = function(rule) { - var flags = $.extend({}, this.settings.default_rule_flags); - - if (rule.readonly) { - $.extend(flags, { - filter_readonly: true, - operator_readonly: true, - value_readonly: true, - no_delete: true - }); - } - - if (rule.flags) { - $.extend(flags, rule.flags); - } - - /** - * Modifies the consolidated rule's flags - * @event changer:parseRuleFlags - * @memberof QueryBuilder - * @param {object} flags - * @param {object} rule - not a Rule object - * @returns {object} - */ - return this.change('parseRuleFlags', flags, rule); -}; - -/** - * Gets a copy of flags of a rule - * @param {object} flags - * @param {boolean} [all=false] - return all flags or only changes from default flags - * @returns {object} - * @private - */ -QueryBuilder.prototype.getRuleFlags = function(flags, all) { - if (all) { - return $.extend({}, flags); - } - else { - var ret = {}; - $.each(this.settings.default_rule_flags, function(key, value) { - if (flags[key] !== value) { - ret[key] = flags[key]; - } - }); - return ret; - } -}; - -/** - * Parses group flags - * @param {object} group - * @returns {object} - * @fires QueryBuilder.changer:parseGroupFlags - * @private - */ -QueryBuilder.prototype.parseGroupFlags = function(group) { - var flags = $.extend({}, this.settings.default_group_flags); - - if (group.readonly) { - $.extend(flags, { - condition_readonly: true, - no_add_rule: true, - no_add_group: true, - no_delete: true - }); - } - - if (group.flags) { - $.extend(flags, group.flags); - } - - /** - * Modifies the consolidated group's flags - * @event changer:parseGroupFlags - * @memberof QueryBuilder - * @param {object} flags - * @param {object} group - not a Group object - * @returns {object} - */ - return this.change('parseGroupFlags', flags, group); -}; - -/** - * Gets a copy of flags of a group - * @param {object} flags - * @param {boolean} [all=false] - return all flags or only changes from default flags - * @returns {object} - * @private - */ -QueryBuilder.prototype.getGroupFlags = function(flags, all) { - if (all) { - return $.extend({}, flags); - } - else { - var ret = {}; - $.each(this.settings.default_group_flags, function(key, value) { - if (flags[key] !== value) { - ret[key] = flags[key]; - } - }); - return ret; - } -}; - -/** - * Translate a label either by looking in the `lang` object or in itself if it's an object where keys are language codes - * @param {string} [category] - * @param {string|object} key - * @returns {string} - * @fires QueryBuilder.changer:translate - */ -QueryBuilder.prototype.translate = function(category, key) { - if (!key) { - key = category; - category = undefined; - } - - var translation; - if (typeof key === 'object') { - translation = key[this.settings.lang_code] || key['en']; - } - else { - translation = (category ? this.lang[category] : this.lang)[key] || key; - } - - /** - * Modifies the translated label - * @event changer:translate - * @memberof QueryBuilder - * @param {string} translation - * @param {string|object} key - * @param {string} [category] - * @returns {string} - */ - return this.change('translate', translation, key, category); -}; - -/** - * Returns a validation message - * @param {object} validation - * @param {string} type - * @param {string} def - * @returns {string} - * @private - */ -QueryBuilder.prototype.getValidationMessage = function(validation, type, def) { - return validation.messages && validation.messages[type] || def; -}; - - -QueryBuilder.templates.group = '\ -
\ -
\ -
\ - \ - {{? it.settings.allow_groups===-1 || it.settings.allow_groups>=it.level }} \ - \ - {{?}} \ - {{? it.level>1 }} \ - \ - {{?}} \ -
\ -
\ - {{~ it.conditions: condition }} \ - \ - {{~}} \ -
\ - {{? it.settings.display_errors }} \ -
\ - {{?}} \ -
\ -
\ -
\ -
\ -
'; - -QueryBuilder.templates.rule = '\ -
\ -
\ -
\ - \ -
\ -
\ - {{? it.settings.display_errors }} \ -
\ - {{?}} \ -
\ -
\ -
\ -
'; - -QueryBuilder.templates.filterSelect = '\ -{{ var optgroup = null; }} \ -'; - -QueryBuilder.templates.operatorSelect = '\ -{{? it.operators.length === 1 }} \ - \ -{{= it.translate("operators", it.operators[0].type) }} \ - \ -{{?}} \ -{{ var optgroup = null; }} \ -'; - -QueryBuilder.templates.ruleValueSelect = '\ -{{ var optgroup = null; }} \ -'; - -/** - * Returns group's HTML - * @param {string} group_id - * @param {int} level - * @returns {string} - * @fires QueryBuilder.changer:getGroupTemplate - * @private - */ -QueryBuilder.prototype.getGroupTemplate = function(group_id, level) { - var h = this.templates.group({ - builder: this, - group_id: group_id, - level: level, - conditions: this.settings.conditions, - icons: this.icons, - settings: this.settings, - translate: this.translate.bind(this) - }); - - /** - * Modifies the raw HTML of a group - * @event changer:getGroupTemplate - * @memberof QueryBuilder - * @param {string} html - * @param {int} level - * @returns {string} - */ - return this.change('getGroupTemplate', h, level); -}; - -/** - * Returns rule's HTML - * @param {string} rule_id - * @returns {string} - * @fires QueryBuilder.changer:getRuleTemplate - * @private - */ -QueryBuilder.prototype.getRuleTemplate = function(rule_id) { - var h = this.templates.rule({ - builder: this, - rule_id: rule_id, - icons: this.icons, - settings: this.settings, - translate: this.translate.bind(this) - }); - - /** - * Modifies the raw HTML of a rule - * @event changer:getRuleTemplate - * @memberof QueryBuilder - * @param {string} html - * @returns {string} - */ - return this.change('getRuleTemplate', h); -}; - -/** - * Returns rule's filter HTML - * @param {Rule} rule - * @param {object[]} filters - * @returns {string} - * @fires QueryBuilder.changer:getRuleFilterTemplate - * @private - */ -QueryBuilder.prototype.getRuleFilterSelect = function(rule, filters) { - var h = this.templates.filterSelect({ - builder: this, - rule: rule, - filters: filters, - icons: this.icons, - settings: this.settings, - translate: this.translate.bind(this) - }); - - /** - * Modifies the raw HTML of the rule's filter dropdown - * @event changer:getRuleFilterSelect - * @memberof QueryBuilder - * @param {string} html - * @param {Rule} rule - * @param {QueryBuilder.Filter[]} filters - * @returns {string} - */ - return this.change('getRuleFilterSelect', h, rule, filters); -}; - -/** - * Returns rule's operator HTML - * @param {Rule} rule - * @param {object[]} operators - * @returns {string} - * @fires QueryBuilder.changer:getRuleOperatorTemplate - * @private - */ -QueryBuilder.prototype.getRuleOperatorSelect = function(rule, operators) { - var h = this.templates.operatorSelect({ - builder: this, - rule: rule, - operators: operators, - icons: this.icons, - settings: this.settings, - translate: this.translate.bind(this) - }); - - /** - * Modifies the raw HTML of the rule's operator dropdown - * @event changer:getRuleOperatorSelect - * @memberof QueryBuilder - * @param {string} html - * @param {Rule} rule - * @param {QueryBuilder.Operator[]} operators - * @returns {string} - */ - return this.change('getRuleOperatorSelect', h, rule, operators); -}; - -/** - * Returns the rule's value select HTML - * @param {string} name - * @param {Rule} rule - * @returns {string} - * @fires QueryBuilder.changer:getRuleValueSelect - * @private - */ -QueryBuilder.prototype.getRuleValueSelect = function(name, rule) { - var h = this.templates.ruleValueSelect({ - builder: this, - name: name, - rule: rule, - icons: this.icons, - settings: this.settings, - translate: this.translate.bind(this) - }); - - /** - * Modifies the raw HTML of the rule's value dropdown (in case of a "select filter) - * @event changer:getRuleValueSelect - * @memberof QueryBuilder - * @param {string} html - * @param [string} name - * @param {Rule} rule - * @returns {string} - */ - return this.change('getRuleValueSelect', h, name, rule); -}; - -/** - * Returns the rule's value HTML - * @param {Rule} rule - * @param {int} value_id - * @returns {string} - * @fires QueryBuilder.changer:getRuleInput - * @private - */ -QueryBuilder.prototype.getRuleInput = function(rule, value_id) { - var filter = rule.filter; - var validation = rule.filter.validation || {}; - var name = rule.id + '_value_' + value_id; - var c = filter.vertical ? ' class=block' : ''; - var h = ''; - - if (typeof filter.input == 'function') { - h = filter.input.call(this, rule, name); - } - else { - switch (filter.input) { - case 'radio': - case 'checkbox': - Utils.iterateOptions(filter.values, function(key, val) { - h += ' ' + val + ' '; - }); - break; - - case 'select': - h = this.getRuleValueSelect(name, rule); - break; - - case 'textarea': - h += ' + @@ -148,17 +150,14 @@
-
+
+ -
-
-
-
-
-
+ +
diff --git a/application/views/simplefle/options.php b/application/views/simplefle/options.php new file mode 100644 index 000000000..28ceef350 --- /dev/null +++ b/application/views/simplefle/options.php @@ -0,0 +1,18 @@ + + + + + + + + + + + + + +
OptionValue
Auto Callbook Lookup +
+ > +
+
\ No newline at end of file diff --git a/assets/js/sections/simplefle.js b/assets/js/sections/simplefle.js index 810b75038..9b35ff640 100644 --- a/assets/js/sections/simplefle.js +++ b/assets/js/sections/simplefle.js @@ -88,6 +88,63 @@ ssb }); }); +$("#js-options").click(function (event) { + $("#js-options").prop("disabled", false); + $.ajax({ + url: base_url + "index.php/simplefle/displayOptions", + type: "post", + success: function (html) { + BootstrapDialog.show({ + title: "

" + lang_qso_simplefle_options + "

", + nl2br: false, + message: html, + buttons: [ + { + label: lang_admin_save, + cssClass: 'btn-primary btn-sm', + id: 'saveButton', + action: function (dialogItself) { + $('#optionButton').prop("disabled", false); + $('#closeButton').prop("disabled", true); + saveOptions(); + dialogItself.close(); + location.reload(); + } + }, + { + label: lang_admin_close, + cssClass: 'btn-sm', + id: 'closeButton', + action: function (dialogItself) { + $('#optionButton').prop("disabled", false); + dialogItself.close(); + } + }, + ], + }); + }, + }); +}); + +function saveOptions() { + $('#saveButton').prop("disabled", true); + $('#closeButton').prop("disabled", true); + $.ajax({ + url: base_url + 'index.php/simplefle/saveOptions', + type: 'post', + data: { + callbook_lookup: $('input[name="callbook_lookup"]').is(':checked') ? true : false, + }, + success: function(data) { + $('#saveButton').prop("disabled", false); + $('#closeButton').prop("disabled", false); + }, + error: function() { + $('#saveButton').prop("disabled", false); + }, + }); +} + function updateUTCTime() { const utcTimeElement = document.getElementById("utc-time"); const now = new Date(); From e16fc97753536caa9ee2c1f0439cf7146c35d1bf Mon Sep 17 00:00:00 2001 From: HB9HIL Date: Tue, 28 May 2024 13:36:24 +0200 Subject: [PATCH 088/154] simplefle language --- application/language/bulgarian/qso_lang.php | 2 ++ application/language/chinese_simplified/qso_lang.php | 4 +++- application/language/czech/qso_lang.php | 4 +++- application/language/dutch/qso_lang.php | 4 +++- application/language/english/qso_lang.php | 2 ++ application/language/finnish/qso_lang.php | 2 ++ application/language/french/qso_lang.php | 2 ++ application/language/german/qso_lang.php | 2 ++ application/language/greek/qso_lang.php | 2 ++ application/language/italian/qso_lang.php | 2 ++ application/language/polish/qso_lang.php | 2 ++ application/language/russian/qso_lang.php | 2 ++ application/language/spanish/qso_lang.php | 2 ++ application/language/swedish/qso_lang.php | 2 ++ application/language/turkish/qso_lang.php | 2 ++ 15 files changed, 33 insertions(+), 3 deletions(-) diff --git a/application/language/bulgarian/qso_lang.php b/application/language/bulgarian/qso_lang.php index dd4aa9789..070c6daec 100644 --- a/application/language/bulgarian/qso_lang.php +++ b/application/language/bulgarian/qso_lang.php @@ -98,3 +98,5 @@ $lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the se $lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD."; $lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in
this article of our Wiki."; +$lang['qso_simplefle_options'] = 'Options'; + diff --git a/application/language/chinese_simplified/qso_lang.php b/application/language/chinese_simplified/qso_lang.php index f38c1a20a..e4e67dab8 100644 --- a/application/language/chinese_simplified/qso_lang.php +++ b/application/language/chinese_simplified/qso_lang.php @@ -97,4 +97,6 @@ $lang['qso_simplefle_syntax_help_ln6'] = "我们的下一个 QSO 是在 2021 年 $lang['qso_simplefle_syntax_help_ln7'] = "A full summary of all commands and the necessary syntax can be found in this article of our Wiki."; $lang['qso_simplefle_syntax_help_ln8'] = ""; $lang['qso_simplefle_syntax_help_ln9'] = ""; - + +$lang['qso_simplefle_options'] = 'Options'; + diff --git a/application/language/czech/qso_lang.php b/application/language/czech/qso_lang.php index 0117139a0..93ebee375 100644 --- a/application/language/czech/qso_lang.php +++ b/application/language/czech/qso_lang.php @@ -97,4 +97,6 @@ $lang['qso_simplefle_syntax_help_ln6'] = "If you don't provide any RST informati $lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the second one 2 minutes later at 21:36. We write down 6 because this is the only data that changed here. The information about band and mode didn't change, so this data is omitted."; $lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD."; $lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in this article of our Wiki."; - + +$lang['qso_simplefle_options'] = 'Options'; + diff --git a/application/language/dutch/qso_lang.php b/application/language/dutch/qso_lang.php index e2e30f317..ef484c85d 100644 --- a/application/language/dutch/qso_lang.php +++ b/application/language/dutch/qso_lang.php @@ -97,4 +97,6 @@ $lang['qso_simplefle_syntax_help_ln6'] = "If you don't provide any RST informati $lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the second one 2 minutes later at 21:36. We write down 6 because this is the only data that changed here. The information about band and mode didn't change, so this data is omitted."; $lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD."; $lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in this article of our Wiki."; - + +$lang['qso_simplefle_options'] = 'Options'; + diff --git a/application/language/english/qso_lang.php b/application/language/english/qso_lang.php index e97395515..704d78512 100644 --- a/application/language/english/qso_lang.php +++ b/application/language/english/qso_lang.php @@ -98,3 +98,5 @@ $lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the se $lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD."; $lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in this article of our Wiki."; +$lang['qso_simplefle_options'] = 'Options'; + diff --git a/application/language/finnish/qso_lang.php b/application/language/finnish/qso_lang.php index bfdb7906c..e08952437 100644 --- a/application/language/finnish/qso_lang.php +++ b/application/language/finnish/qso_lang.php @@ -98,3 +98,5 @@ $lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the se $lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD."; $lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in this article of our Wiki."; +$lang['qso_simplefle_options'] = 'Options'; + diff --git a/application/language/french/qso_lang.php b/application/language/french/qso_lang.php index e70249a11..e19e305ec 100644 --- a/application/language/french/qso_lang.php +++ b/application/language/french/qso_lang.php @@ -98,3 +98,5 @@ $lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the se $lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD."; $lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in this article of our Wiki."; +$lang['qso_simplefle_options'] = 'Options'; + diff --git a/application/language/german/qso_lang.php b/application/language/german/qso_lang.php index c1218251c..86e1f1e85 100644 --- a/application/language/german/qso_lang.php +++ b/application/language/german/qso_lang.php @@ -98,3 +98,5 @@ $lang['qso_simplefle_syntax_help_ln7'] = "Das erste QSO war um 21:34 Uhr, und da $lang['qso_simplefle_syntax_help_ln8'] = "Für unser nächstes QSO um 21:40 Uhr am 14.05.2021 haben wir das Band auf 40m geändert, sind aber immer noch auf SSB. Wenn keine RST-Informationen angegeben sind, verwendet die Syntax bei jedem neuen QSO 59. Daher können wir ein weiteres QSO hinzufügen welches um die exakt selbe Zeit zwei Tage später stattfand. Das Datum muss im Format YYYY-MM-DD eingegeben werden."; $lang['qso_simplefle_syntax_help_ln9'] = "Eine vollständige Übersicht aller Befehle und der notwendigen Syntax findest du in diesem Artikel in unserem Wiki."; +$lang['qso_simplefle_options'] = 'Optionen'; + diff --git a/application/language/greek/qso_lang.php b/application/language/greek/qso_lang.php index 3533ae37c..3e4dfc4c5 100644 --- a/application/language/greek/qso_lang.php +++ b/application/language/greek/qso_lang.php @@ -98,3 +98,5 @@ $lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the se $lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD."; $lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in this article of our Wiki."; +$lang['qso_simplefle_options'] = 'Options'; + diff --git a/application/language/italian/qso_lang.php b/application/language/italian/qso_lang.php index ebf0f9d09..83bf1d1bf 100644 --- a/application/language/italian/qso_lang.php +++ b/application/language/italian/qso_lang.php @@ -98,3 +98,5 @@ $lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the se $lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD."; $lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in this article of our Wiki."; +$lang['qso_simplefle_options'] = 'Options'; + diff --git a/application/language/polish/qso_lang.php b/application/language/polish/qso_lang.php index c27eab374..d0be43f11 100644 --- a/application/language/polish/qso_lang.php +++ b/application/language/polish/qso_lang.php @@ -98,3 +98,5 @@ $lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the se $lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD."; $lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in this article of our Wiki."; +$lang['qso_simplefle_options'] = 'Options'; + diff --git a/application/language/russian/qso_lang.php b/application/language/russian/qso_lang.php index b17557542..29b95be5f 100644 --- a/application/language/russian/qso_lang.php +++ b/application/language/russian/qso_lang.php @@ -98,3 +98,5 @@ $lang['qso_simplefle_syntax_help_ln7'] = "Первое QSO состоялось $lang['qso_simplefle_syntax_help_ln8'] = "Для следующего QSO в 21:40 14 мая 2021 года мы сменили диапазон на 40 м, но по-прежнему на SSB. Если информация о RST не указана, то синтаксис будет использовать 59 для каждого нового QSO. Поэтому мы можем добавить еще одно QSO, состоявшееся точно в это же время двумя днями позже. Дата должна быть в формате YYYY-MM-DD."; $lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in this article of our Wiki."; +$lang['qso_simplefle_options'] = 'Options'; + diff --git a/application/language/spanish/qso_lang.php b/application/language/spanish/qso_lang.php index bff79b9c8..8e66a62e3 100644 --- a/application/language/spanish/qso_lang.php +++ b/application/language/spanish/qso_lang.php @@ -98,3 +98,5 @@ $lang['qso_simplefle_syntax_help_ln7'] = "El primer QSL fue a las 21:34, y el se $lang['qso_simplefle_syntax_help_ln8'] = "Para nuestro siguiente QSO a las 21:40 el 14 de mayo de 2021, cambiamos la banda a 40m pero seguimos en SSB. Si no se ingresa datos de RST, la sintaxis usará 59 para cada nuevo QSO. Por lo tanto podemos añadir un nuevo QSO que ocurrió a la misma hora dos días después. La fecha debe estar en el formato YYYY-MM-DD."; $lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in this article of our Wiki."; +$lang['qso_simplefle_options'] = 'Options'; + diff --git a/application/language/swedish/qso_lang.php b/application/language/swedish/qso_lang.php index d751d3c43..2fa60407c 100644 --- a/application/language/swedish/qso_lang.php +++ b/application/language/swedish/qso_lang.php @@ -98,3 +98,5 @@ $lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the se $lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD."; $lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in this article of our Wiki."; +$lang['qso_simplefle_options'] = 'Options'; + diff --git a/application/language/turkish/qso_lang.php b/application/language/turkish/qso_lang.php index 38f110e5f..223f43620 100644 --- a/application/language/turkish/qso_lang.php +++ b/application/language/turkish/qso_lang.php @@ -98,3 +98,5 @@ $lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the se $lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD."; $lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in this article of our Wiki."; +$lang['qso_simplefle_options'] = 'Options'; + From 4c5379704796cb709ebad0ec56a254032f4a1c28 Mon Sep 17 00:00:00 2001 From: HB9HIL Date: Tue, 28 May 2024 13:47:06 +0200 Subject: [PATCH 089/154] standarize textarea in js --- application/views/simplefle/index.php | 2 +- assets/js/sections/simplefle.js | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/application/views/simplefle/index.php b/application/views/simplefle/index.php index 765c50a87..31b0b11c2 100644 --- a/application/views/simplefle/index.php +++ b/application/views/simplefle/index.php @@ -111,7 +111,7 @@

- +
diff --git a/assets/js/sections/simplefle.js b/assets/js/sections/simplefle.js index 9b35ff640..83cc498d1 100644 --- a/assets/js/sections/simplefle.js +++ b/assets/js/sections/simplefle.js @@ -1,4 +1,4 @@ -var $textarea = $("textarea"); +var textarea = $("#sfle_textarea"); var qsodate = ""; var qsotime = ""; var band = ""; @@ -67,7 +67,7 @@ ssb 33 ok1xxx 4 3 `; - $textarea.val(logData.trim()); + textarea.val(logData.trim()); handleInput(); BootstrapDialog.closeAll(); } @@ -175,7 +175,7 @@ function handleInput() { qsoList = []; $("#qsoTable tbody").empty(); - var text = $textarea.val().trim(); + var text = textarea.val().trim(); lines = text.split("\n"); lines.forEach((row) => { var rst_s = null; @@ -400,23 +400,23 @@ function checkMainFieldsErrors() { $("#operator").css("border", ""); $("#warningOperatorField").hide(); } - if ($("textarea").val() === "") { - $("#textarea").css("border", "2px solid rgb(217, 83, 79)"); + if (textarea.val() === "") { + textarea.css("border", "2px solid rgb(217, 83, 79)"); setTimeout(function () { - $("#textarea").css("border", ""); + textarea.css("border", ""); }, 2000); } else { - $("#textarea").css("border", ""); + textarea.css("border", ""); } } -$textarea.keydown(function (event) { +textarea.keydown(function (event) { if (event.which == 13) { handleInput(); } }); -$textarea.focus(function () { +textarea.focus(function () { errors = []; checkMainFieldsErrors(); showErrors(); @@ -807,10 +807,10 @@ $(document).ready(function () { }); $(".js-save-to-log").click(function () { - if ($("textarea").val() === "") { - $("#textarea").css("border", "2px solid rgb(217, 83, 79)"); + if (textarea.val() === "") { + textarea.css("border", "2px solid rgb(217, 83, 79)"); setTimeout(function () { - $("#textarea").css("border", ""); + textarea.css("border", ""); }, 2000); return false; } From c0bfe3cf298c2596bb16cec1b983753c20b48b68 Mon Sep 17 00:00:00 2001 From: HB9HIL Date: Tue, 28 May 2024 21:36:56 +0200 Subject: [PATCH 090/154] use more of the screen --- application/views/simplefle/index.php | 4 +- assets/css/general.css | 57 +++++++++++++++++---------- assets/js/sections/simplefle.js | 43 ++++++++++++++++++++ 3 files changed, 81 insertions(+), 23 deletions(-) diff --git a/application/views/simplefle/index.php b/application/views/simplefle/index.php index 31b0b11c2..a091e3ac6 100644 --- a/application/views/simplefle/index.php +++ b/application/views/simplefle/index.php @@ -122,7 +122,7 @@
- +
@@ -144,7 +144,7 @@
-
+
diff --git a/assets/css/general.css b/assets/css/general.css index c0e24a07b..a14ff3175 100644 --- a/assets/css/general.css +++ b/assets/css/general.css @@ -716,31 +716,46 @@ div#station_logbooks_linked_table_paginate { margin-right: 30px; } -.sfletable { - height: 470px; +@media (min-width: 768px) { + + .sfletable.table { + width: 100%; + } + + .sfletable.table thead, + .sfletable.table tbody tr { + display: block; + width: 100%; + table-layout: fixed; + display: inline-table; + } + + .sfletable.table tbody { + width: 95%; + overflow-y: scroll; + position: absolute; + } + + .simplefle { + --bs-card-bg: none; + } + + #sfle_textarea { + width: 100%; + box-sizing: border-box; + } } -.sfletable.table { - width: 100%; -} +@media (max-width: 767px) { -.sfletable.table thead, -.sfletable.table tbody tr { - display: block; - width: 100%; - table-layout: fixed; - display: inline-table; -} + .sfletable.table { + overflow-x: auto; + font-size: 0.8em; + } -.sfletable.table tbody { - width: 95%; - overflow-y: scroll; - max-height: 440px; - position: absolute; -} - -.simplefle { - --bs-card-bg: none; + #refs_hint { + font-size: 0.8em; + } } .red { diff --git a/assets/js/sections/simplefle.js b/assets/js/sections/simplefle.js index 83cc498d1..fa4c77000 100644 --- a/assets/js/sections/simplefle.js +++ b/assets/js/sections/simplefle.js @@ -804,8 +804,51 @@ $(document).ready(function () { $("#qsoTable").html(tabledata); handleInput(); } + + $(window).on('resize', resizeElements); + $(document).ready(resizeElements); + }); +function resizeElements() { + var textarea = $('#sfle_textarea'); + var textareaOffset = 40; + + var tableFrame = $('.sfletable.table'); + var tableFrameOffset = 140; + + var table = $('#qsoTableBody'); + var tableoOffset = 160; + + if ($(window).width() >= 768) { + var newHeight = $(window).height() - textarea.offset().top - textareaOffset; + textarea.css('height', newHeight + 'px'); + + var newHeight = $(window).height() - tableFrame.offset().top - tableFrameOffset; + tableFrame.css('height', newHeight + 'px'); + + var newHeight = $(window).height() - table.offset().top - tableoOffset; + table.css('height', newHeight + 'px'); + + $('.js-reload-qso').removeClass('btn-sm'); + $('.js-save-to-log').removeClass('btn-sm'); + $('.js-empty-qso').removeClass('btn-sm'); + $('#js-syntax').removeClass('btn-sm'); + $('#js-options').removeClass('btn-sm'); + + } else { + textarea.css('height', 'auto'); + tableFrame.css('height', '530px'); + table.css('height', '400px'); + + $('.js-reload-qso').addClass('btn-sm'); + $('.js-save-to-log').addClass('btn-sm'); + $('.js-empty-qso').addClass('btn-sm'); + $('#js-syntax').addClass('btn-sm'); + $('#js-options').addClass('btn-sm'); + } +} + $(".js-save-to-log").click(function () { if (textarea.val() === "") { textarea.css("border", "2px solid rgb(217, 83, 79)"); From 78cc99d5b9ea26fa077681ac07bd76fb53f8e874 Mon Sep 17 00:00:00 2001 From: HB9HIL Date: Tue, 28 May 2024 21:39:22 +0200 Subject: [PATCH 091/154] move document.ready function to the top so it's easier to find --- assets/js/sections/simplefle.js | 100 ++++++++++++++++---------------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/assets/js/sections/simplefle.js b/assets/js/sections/simplefle.js index fa4c77000..0463d9693 100644 --- a/assets/js/sections/simplefle.js +++ b/assets/js/sections/simplefle.js @@ -9,6 +9,56 @@ var errors = []; var qsoList = []; var modes_regex = modes_regex(Modes); +$(document).ready(function () { + setInterval(updateUTCTime, 1000); + updateUTCTime(); + var tabledata = localStorage.getItem(`user_${user_id}_tabledata`); + var mycall = localStorage.getItem(`user_${user_id}_my-call`); + var operator = localStorage.getItem(`user_${user_id}_operator`); + var mysotawwff = localStorage.getItem(`user_${user_id}_my-sota-wwff`); + var qsoarea = localStorage.getItem(`user_${user_id}_qso-area`); + var qsodate = localStorage.getItem(`user_${user_id}_qsodate`); + var myPower = localStorage.getItem(`user_${user_id}_my-power`); + var myGrid = localStorage.getItem(`user_${user_id}_my-grid`); + + if (mycall != null) { + $("#station-call").val(mycall); + } + + if (operator != null) { + $("#operator").val(operator); + } + + if (mysotawwff != null) { + $("#my-sota-wwff").val(mysotawwff); + } + + if (qsoarea != null) { + $(".qso-area").val(qsoarea); + } + + if (qsodate != null) { + $("#qsodate").val(qsodate); + } + + if (myPower != null) { + $("#my-power").val(myPower); + } + + if (myGrid != null) { + $("#my-grid").val(myGrid); + } + + if (tabledata != null) { + $("#qsoTable").html(tabledata); + handleInput(); + } + + $(window).on('resize', resizeElements); + $(document).ready(resizeElements); + +}); + $("#simpleFleInfoButton").click(function (event) { var awardInfoLines = [ lang_qso_simplefle_info_ln2, @@ -760,56 +810,6 @@ function isWWFF(value) { return false; } -$(document).ready(function () { - setInterval(updateUTCTime, 1000); - updateUTCTime(); - var tabledata = localStorage.getItem(`user_${user_id}_tabledata`); - var mycall = localStorage.getItem(`user_${user_id}_my-call`); - var operator = localStorage.getItem(`user_${user_id}_operator`); - var mysotawwff = localStorage.getItem(`user_${user_id}_my-sota-wwff`); - var qsoarea = localStorage.getItem(`user_${user_id}_qso-area`); - var qsodate = localStorage.getItem(`user_${user_id}_qsodate`); - var myPower = localStorage.getItem(`user_${user_id}_my-power`); - var myGrid = localStorage.getItem(`user_${user_id}_my-grid`); - - if (mycall != null) { - $("#station-call").val(mycall); - } - - if (operator != null) { - $("#operator").val(operator); - } - - if (mysotawwff != null) { - $("#my-sota-wwff").val(mysotawwff); - } - - if (qsoarea != null) { - $(".qso-area").val(qsoarea); - } - - if (qsodate != null) { - $("#qsodate").val(qsodate); - } - - if (myPower != null) { - $("#my-power").val(myPower); - } - - if (myGrid != null) { - $("#my-grid").val(myGrid); - } - - if (tabledata != null) { - $("#qsoTable").html(tabledata); - handleInput(); - } - - $(window).on('resize', resizeElements); - $(document).ready(resizeElements); - -}); - function resizeElements() { var textarea = $('#sfle_textarea'); var textareaOffset = 40; From 2dd366f9b934d384bc6895aa4f844ae35592cd29 Mon Sep 17 00:00:00 2001 From: HB9HIL Date: Tue, 28 May 2024 23:27:06 +0200 Subject: [PATCH 092/154] gridsquare support --- application/views/simplefle/index.php | 2 +- assets/js/sections/simplefle.js | 46 +++++++++++++++++---------- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/application/views/simplefle/index.php b/application/views/simplefle/index.php index a091e3ac6..603b07143 100644 --- a/application/views/simplefle/index.php +++ b/application/views/simplefle/index.php @@ -132,7 +132,7 @@ - + diff --git a/assets/js/sections/simplefle.js b/assets/js/sections/simplefle.js index 0463d9693..232156c0e 100644 --- a/assets/js/sections/simplefle.js +++ b/assets/js/sections/simplefle.js @@ -5,6 +5,7 @@ var band = ""; var mode = ""; var freq = ""; var callsign = ""; +var gridsquare = ""; var errors = []; var qsoList = []; var modes_regex = modes_regex(Modes); @@ -221,6 +222,7 @@ function handleInput() { var mode = ""; var freq = ""; var callsign = ""; + var gridsquare = ""; var sotaWwff = ""; qsoList = []; $("#qsoTable tbody").empty(); @@ -230,8 +232,10 @@ function handleInput() { lines.forEach((row) => { var rst_s = null; var rst_r = null; + var gridsquare = ""; items = row.startsWith("day ") ? [row] : row.split(" "); var itemNumber = 0; + var call_rec = false; items.forEach((item) => { if (item === "") { @@ -286,9 +290,14 @@ function handleInput() { } else if ( item.match( /([a-zA-Z0-9]{1,3}[0-9][a-zA-Z0-9]{0,3}[a-zA-Z])|.*\/([a-zA-Z0-9]{1,3}[0-9][a-zA-Z0-9]{0,3}[a-zA-Z])|([a-zA-Z0-9]{1,3}[0-9][a-zA-Z0-9]{0,3}[a-zA-Z])\/.*/ - ) + ) && call_rec !== true ) { callsign = item.toUpperCase(); + call_rec = true; + } else if ( + item.match(/^[A-R]{2}[0-9]{2}([A-X]{2}([0-9]{2}([A-X]{2})?)?)?$/i) + ) { + gridsquare = item.toUpperCase(); } else if (itemNumber > 0 && item.match(/^[-+]\d{1,2}|\d{1,3}$|\d{1,3}[-+]d{1,2}$/)) { if (rst_s === null) { rst_s = item; @@ -337,6 +346,7 @@ function handleInput() { freq, band, mode, + gridsquare, rst_s, rst_r, sotaWwff, @@ -362,7 +372,7 @@ function handleInput() { - + `); @@ -703,11 +713,11 @@ function isTimeEntered() { } function isExampleDataEntered() { - let isExampleData = false; - if (textarea.value.startsWith("*example-data*")) { - isExampleData = true; - } - return isExampleData; + let isExampleData = false; + if (textarea.val().startsWith("*example-data*")) { + isExampleData = true; + } + return isExampleData; } function getAdifTag(tagName, value) { @@ -911,8 +921,9 @@ $(".js-save-to-log").click(function () { qsoList.forEach((item) => { var callsign = item[2]; + var gridsquare = item[6]; var rst_rcvd = item[7].replace(/dB$/, ''); // we don't want 'dB' in the database - var rst_sent = item[6].replace(/dB$/, ''); // * + var rst_sent = item[8].replace(/dB$/, ''); // * var start_date = item[0]; var start_time = item[1][0] + @@ -928,14 +939,14 @@ $(".js-save-to-log").click(function () { var iota_ref = ""; var pota_ref = ""; var wwff_ref = ""; - if (isSOTA(item[8])) { - sota_ref = item[8]; - } else if (isIOTA(item[8])) { - iota_ref = item[8]; - } else if (isPOTA(item[8])) { - pota_ref = item[8]; - } else if (isWWFF(item[8])) { - wwff_ref = item[8]; + if (isSOTA(item[9])) { + sota_ref = item[9]; + } else if (isIOTA(item[9])) { + iota_ref = item[9]; + } else if (isPOTA(item[9])) { + pota_ref = item[9]; + } else if (isWWFF(item[9])) { + wwff_ref = item[9]; } $.ajax({ @@ -943,6 +954,7 @@ $(".js-save-to-log").click(function () { type: "post", data: { callsign: callsign, + locator: gridsquare, rst_rcvd: rst_rcvd, rst_sent: rst_sent, start_date: start_date, @@ -970,4 +982,4 @@ $(".js-save-to-log").click(function () { }, }); } -}); +}); \ No newline at end of file From 9ab2d196a2895e2b07d9bbf939837a3882f6ed9e Mon Sep 17 00:00:00 2001 From: int2001 Date: Wed, 29 May 2024 04:22:19 +0000 Subject: [PATCH 093/154] Fix last_seen (Compare Timestamp instead of seconds after full minute) --- application/models/User_model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/models/User_model.php b/application/models/User_model.php index d10c76c7e..3738dbf77 100644 --- a/application/models/User_model.php +++ b/application/models/User_model.php @@ -538,7 +538,7 @@ class User_Model extends CI_Model { if(($this->validate_session($u)) && ($u->row()->user_type >= $level) || $this->config->item('use_auth') == FALSE || $level == 0) { $ls=new DateTime($u->row()->last_seen ?? '1971-01-01'); $n=new DateTime("now"); - if ($ls->diff($n)->format('%s') > 60) { // Reduce load of the Spy-Function. shouldn't be called at anytimne. 60seconds diff is enough + if ($n->getTimestamp()-$ls->getTimestamp() > 60) { // Reduce load of the Spy-Function. shouldn't be called at anytimne. 60seconds diff is enough $this->set_last_seen($u->row()->user_id); } return 1; From 0ea765127fcac23b679f039097d7d2d5b59b03f5 Mon Sep 17 00:00:00 2001 From: int2001 Date: Wed, 29 May 2024 04:51:15 +0000 Subject: [PATCH 094/154] JS-Part --- assets/js/sections/qso.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/sections/qso.js b/assets/js/sections/qso.js index a5e166cb6..ed18061b4 100644 --- a/assets/js/sections/qso.js +++ b/assets/js/sections/qso.js @@ -765,7 +765,7 @@ $( document ).ready(function() { find_callsign=find_callsign.replace('Ø', '0'); // Replace / in a callsign with - to stop urls breaking - $.getJSON(base_url + 'index.php/logbook/json/' + find_callsign + '/' + json_band + '/' + json_mode + '/' + $('#stationProfile').val(), async function(result) + $.getJSON(base_url + 'index.php/logbook/json/' + find_callsign + '/' + json_band + '/' + json_mode + '/' + $('#stationProfile').val() + '/' + $('#start_date').val(), async function(result) { // Make sure the typed callsign and json result match From c6a30f4d1538dea55ced41d7209048744b160cf7 Mon Sep 17 00:00:00 2001 From: int2001 Date: Wed, 29 May 2024 04:51:28 +0000 Subject: [PATCH 095/154] Fix DXCC-Lookup for Post-QSO --- application/controllers/Logbook.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/application/controllers/Logbook.php b/application/controllers/Logbook.php index ed98af65f..e551c6477 100644 --- a/application/controllers/Logbook.php +++ b/application/controllers/Logbook.php @@ -84,13 +84,17 @@ class Logbook extends CI_Controller { echo json_encode($return, JSON_PRETTY_PRINT); } - function json($tempcallsign, $tempband, $tempmode, $tempstation_id = null) { + function json($tempcallsign, $tempband, $tempmode, $tempstation_id = null, $date = "") { session_write_close(); + if (($date ?? '') != '') { + $date=date("Y-m-d",strtotime($date)); + } // Cleaning for security purposes $callsign = $this->security->xss_clean($tempcallsign); $band = $this->security->xss_clean($tempband); $mode = $this->security->xss_clean($tempmode); $station_id = $this->security->xss_clean($tempstation_id); + $date = $this->security->xss_clean($date); $this->load->model('user_model'); if(!$this->user_model->authorize($this->config->item('auth_mode'))) { return; } @@ -129,7 +133,7 @@ class Logbook extends CI_Controller { "image" => "", ]; - $return['dxcc'] = $this->dxcheck($callsign); + $return['dxcc'] = $this->dxcheck($callsign,$date); $lookupcall=$this->get_plaincall($callsign); From 0fad103825eb8b881615979e149e6d07024fc1df Mon Sep 17 00:00:00 2001 From: HB9HIL Date: Wed, 29 May 2024 07:12:04 +0200 Subject: [PATCH 096/154] better comparison --- application/models/User_model.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/application/models/User_model.php b/application/models/User_model.php index d10c76c7e..54040e620 100644 --- a/application/models/User_model.php +++ b/application/models/User_model.php @@ -536,9 +536,9 @@ class User_Model extends CI_Model { $level = $this->config->item('auth_mode'); } if(($this->validate_session($u)) && ($u->row()->user_type >= $level) || $this->config->item('use_auth') == FALSE || $level == 0) { - $ls=new DateTime($u->row()->last_seen ?? '1971-01-01'); - $n=new DateTime("now"); - if ($ls->diff($n)->format('%s') > 60) { // Reduce load of the Spy-Function. shouldn't be called at anytimne. 60seconds diff is enough + $ls = strtotime($u->row()->last_seen ?? '1971-01-01'); + $n = time(); + if (($n - $ls) > 60) { // Reduce load. 'set_last_seen()' Shouldn't be called at anytime. 60 seconds diff is enough. $this->set_last_seen($u->row()->user_id); } return 1; From 0ad7e73cb470d05b644783599beed1353c9e46d3 Mon Sep 17 00:00:00 2001 From: HB9HIL Date: Wed, 29 May 2024 10:10:58 +0200 Subject: [PATCH 097/154] removed "Callsign:" from location dropdown --- application/views/simplefle/index.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/application/views/simplefle/index.php b/application/views/simplefle/index.php index 0dae91312..5c8b3d12e 100644 --- a/application/views/simplefle/index.php +++ b/application/views/simplefle/index.php @@ -81,12 +81,11 @@ From 7592744620155bce666b1e9038479cc9e3b8a05e Mon Sep 17 00:00:00 2001 From: phl0 Date: Wed, 29 May 2024 13:24:35 +0200 Subject: [PATCH 098/154] We should use 1970 here (Unix time stimp 0) --- application/models/User_model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/models/User_model.php b/application/models/User_model.php index 7d8f4d28d..7ef0e36cb 100644 --- a/application/models/User_model.php +++ b/application/models/User_model.php @@ -536,7 +536,7 @@ class User_Model extends CI_Model { $level = $this->config->item('auth_mode'); } if(($this->validate_session($u)) && ($u->row()->user_type >= $level) || $this->config->item('use_auth') == FALSE || $level == 0) { - $ls = strtotime($u->row()->last_seen ?? '1971-01-01'); + $ls = strtotime($u->row()->last_seen ?? '1970-01-01'); $n = time(); if (($n - $ls) > 60) { // Reduce load. 'set_last_seen()' Shouldn't be called at anytime. 60 seconds diff is enough. From 4547fe79154fe6aa743e5566f053f3474241e035 Mon Sep 17 00:00:00 2001 From: phl0 Date: Wed, 29 May 2024 13:34:31 +0200 Subject: [PATCH 099/154] Check LoTW upload/fail correctly --- application/views/lotw_views/index.php | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/application/views/lotw_views/index.php b/application/views/lotw_views/index.php index 9c4e38b7a..acfee20d0 100644 --- a/application/views/lotw_views/index.php +++ b/application/views/lotw_views/index.php @@ -97,13 +97,11 @@
*
${mode} ${rst_s} ${rst_r}${operator}${gridsquare} ${sotaWwffText}
last_upload) { - $last_upload = date($this->config->item('qso_date_format').' H:i:s', strtotime( $row->last_upload )); - if ($row->last_upload_fail) { - $last_upload_fail = date($this->config->item('qso_date_format').' H:i:s', strtotime( $row->last_upload_fail )); - } else { - $last_upload_fail = null; - } - if ($last_upload_fail > $last_upload) { ?> + $last_upload_ts = strtotime($row->last_upload ?? '1970-01-01'); + $last_upload = date($this->config->item('qso_date_format').' H:i:s', $last_upload_ts); + $last_upload_fail_ts = strtotime($row->last_upload_fail ?? '1970-01-01'); + $last_upload_fail = date($this->config->item('qso_date_format').' H:i:s', $last_upload_fail_ts); + if ($last_upload_fail_ts > $last_upload_ts) { ?> last_upload_status) { ?> From 785187e2423bec7f386ee0255c8b74585534a82f Mon Sep 17 00:00:00 2001 From: phl0 Date: Wed, 29 May 2024 22:23:55 +0200 Subject: [PATCH 100/154] Hide hint and button if number of workable passes matches number of all passes --- assets/js/sections/hamsat.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/assets/js/sections/hamsat.js b/assets/js/sections/hamsat.js index e45c1607f..8be780ede 100644 --- a/assets/js/sections/hamsat.js +++ b/assets/js/sections/hamsat.js @@ -135,6 +135,11 @@ function loadActivationsTable(rows, show_workable_only) { table.rows(createdRow).nodes().to$().data('activationID', activation.id); table.row(createdRow).node().id = 'activationID-' + activation.id; } + if (workable_rows == rows.length) { + console.log("TEST: "+rows.length+"-"+workable_rows); + $('#toggle_workable').hide(); + $('#workable_hint').hide(); + } if (workable_only == '1') { if (rows.length > workable_rows) { $('#toggle_workable').html('Show all passes ('+rows.length+')'); From a126056c148b9ead2d41736b8289089d32a541a0 Mon Sep 17 00:00:00 2001 From: phl0 Date: Wed, 29 May 2024 22:25:31 +0200 Subject: [PATCH 101/154] Remove debug output --- assets/js/sections/hamsat.js | 1 - 1 file changed, 1 deletion(-) diff --git a/assets/js/sections/hamsat.js b/assets/js/sections/hamsat.js index 8be780ede..1c2cf4928 100644 --- a/assets/js/sections/hamsat.js +++ b/assets/js/sections/hamsat.js @@ -136,7 +136,6 @@ function loadActivationsTable(rows, show_workable_only) { table.row(createdRow).node().id = 'activationID-' + activation.id; } if (workable_rows == rows.length) { - console.log("TEST: "+rows.length+"-"+workable_rows); $('#toggle_workable').hide(); $('#workable_hint').hide(); } From 6e6a74b96770addf433cf7df0e44a1ec9891e7ad Mon Sep 17 00:00:00 2001 From: HB9HIL Date: Wed, 29 May 2024 23:20:56 +0200 Subject: [PATCH 102/154] temporary disable options button --- application/views/simplefle/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/views/simplefle/index.php b/application/views/simplefle/index.php index 603b07143..fb46c26ac 100644 --- a/application/views/simplefle/index.php +++ b/application/views/simplefle/index.php @@ -156,7 +156,7 @@ - + From 4a4537a74d3b5d88764d74ff2e82eaa1ddbf9764 Mon Sep 17 00:00:00 2001 From: HB9HIL Date: Wed, 29 May 2024 23:37:46 +0200 Subject: [PATCH 103/154] some adjustments --- application/controllers/Simplefle.php | 8 ++++++-- application/views/simplefle/index.php | 2 +- application/views/simplefle/options.php | 6 ++++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/application/controllers/Simplefle.php b/application/controllers/Simplefle.php index 6927c4706..8864d2c32 100644 --- a/application/controllers/Simplefle.php +++ b/application/controllers/Simplefle.php @@ -40,7 +40,7 @@ class SimpleFLE extends CI_Controller { public function displayOptions() { - $data['callbook_lookup'] = $this->user_options_model->get_options('SimpleFLE',array('option_name'=>'callbook_lookup','option_key'=>'boolean'))->row()->option_value; + $data['callbook_lookup'] = $this->user_options_model->get_options('SimpleFLE',array('option_name'=>'callbook_lookup','option_key'=>'boolean'))->row()->option_value ?? 'true'; $this->load->view('simplefle/options', $data); @@ -48,7 +48,11 @@ class SimpleFLE extends CI_Controller { public function saveOptions() { - $this->user_options_model->set_option('SimpleFLE', 'callbook_lookup', array('boolean' => xss_clean($this->input->post('callbook_lookup')))); + if($this->input->post('callbook_lookup')) { + $this->user_options_model->set_option('SimpleFLE', 'callbook_lookup', array('boolean' => xss_clean($this->input->post('callbook_lookup')))); + } else { + log_message('debug', 'SimpleFLE, saveOptions(); No Options to save. No Post Data'); + } } diff --git a/application/views/simplefle/index.php b/application/views/simplefle/index.php index fb46c26ac..603b07143 100644 --- a/application/views/simplefle/index.php +++ b/application/views/simplefle/index.php @@ -156,7 +156,7 @@ - + diff --git a/application/views/simplefle/options.php b/application/views/simplefle/options.php index 28ceef350..9a0974f24 100644 --- a/application/views/simplefle/options.php +++ b/application/views/simplefle/options.php @@ -1,4 +1,4 @@ - + + +

No Options yet

\ No newline at end of file From 3511969c406d5d0b77e37192e20ee21063f4aed7 Mon Sep 17 00:00:00 2001 From: int2001 Date: Thu, 30 May 2024 06:18:11 +0000 Subject: [PATCH 104/154] Recheck QSOs in Logbook was broken / this fixes it (+ little tuning) --- application/models/Logbook_model.php | 56 ++++++++++++---------------- 1 file changed, 24 insertions(+), 32 deletions(-) diff --git a/application/models/Logbook_model.php b/application/models/Logbook_model.php index bf081c32b..744243de1 100755 --- a/application/models/Logbook_model.php +++ b/application/models/Logbook_model.php @@ -4540,41 +4540,33 @@ function lotw_last_qsl_date($user_id) { } - public function check_missing_dxcc_id($all){ - // get all records with no COL_DXCC - $this->db->select("COL_PRIMARY_KEY, COL_CALL, COL_TIME_ON, COL_TIME_OFF"); + public function check_missing_dxcc_id($all) { + ini_set('memory_limit', '-1'); // This consumes a much of Memory! + $this->db->trans_start(); // Transaction has to be started here, because otherwise we're trying to update rows which are locked by the select + $this->db->select("COL_PRIMARY_KEY, COL_CALL, COL_TIME_ON, COL_TIME_OFF"); // get all records with no COL_DXCC - // check which to update - records with no dxcc or all records - if (!$all){ - $this->db->where("COL_DXCC is NULL"); - } + if (!$all) { // check which to update - records with no dxcc or all records + $this->db->where("COL_DXCC is NULL"); + } - $r = $this->db->get($this->config->item('table_name')); + $r = $this->db->get($this->config->item('table_name')); - $count = 0; - $this->db->trans_start(); - //query dxcc_prefixes - if ($r->num_rows() > 0){ - foreach($r->result_array() as $row){ - $qso_date = $row['COL_TIME_OFF']=='' ? $row['COL_TIME_ON'] : $row['COL_TIME_OFF']; - $qso_date = date("Y-m-d", strtotime($qso_date)); - - // Manual call - $d = $this->check_dxcc_table($row['COL_CALL'], $qso_date); - - if ($d[0] != 'Not Found'){ - $sql = sprintf("update %s set COL_COUNTRY = '%s', COL_DXCC='%s' where COL_PRIMARY_KEY=%d", - $this->config->item('table_name'), addslashes(ucwords(strtolower($d[1]), "- (/")), $d[0], $row['COL_PRIMARY_KEY']); - $this->db->query($sql); - //print($sql."\n"); - // printf("Updating %s to %s and %s\n
", $row['COL_PRIMARY_KEY'], ucwords(strtolower($d[1]), "- (/"), $d[0]); - $count++; - } - } - } - $this->db->trans_complete(); - - print("$count updated\n"); + $count = 0; + if ($r->num_rows() > 0){ //query dxcc_prefixes + $sql = "update ".$this->config->item('table_name')." set COL_COUNTRY = ?, COL_DXCC=? where COL_PRIMARY_KEY=?"; + $q = $this->db->conn_id->prepare($sql); // PREPARE this statement. For DB this means: No parsing overhead, parse once use many (see execute query below) + foreach($r->result_array() as $row){ + $qso_date = $row['COL_TIME_OFF']=='' ? $row['COL_TIME_ON'] : $row['COL_TIME_OFF']; + $qso_date = date("Y-m-d", strtotime($qso_date)); + $d = $this->check_dxcc_table($row['COL_CALL'], $qso_date); + if ($d[0] != 'Not Found'){ + $q->execute(array(addslashes(ucwords(strtolower($d[1]), "- (/")), $d[0], $row['COL_PRIMARY_KEY'])); + $count++; + } + } + } + $this->db->trans_complete(); + print("$count updated\n"); } public function check_missing_continent(){ From 0260414af28b6687e67fb6b732cd4452be2a0077 Mon Sep 17 00:00:00 2001 From: HB9HIL Date: Thu, 30 May 2024 09:46:07 +0200 Subject: [PATCH 105/154] only overwrite freq if no radio is selected --- assets/js/sections/qso.js | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/assets/js/sections/qso.js b/assets/js/sections/qso.js index ed18061b4..f425679ec 100644 --- a/assets/js/sections/qso.js +++ b/assets/js/sections/qso.js @@ -1029,20 +1029,24 @@ $( document ).ready(function() { /* on mode change */ $('.mode').change(function() { - $.get(base_url + 'index.php/qso/band_to_freq/' + $('#band').val() + '/' + $('.mode').val(), function(result) { - $('#frequency').val(result); - $('#frequency_rx').val(""); - }); + if ($('#radio').val() == 0) { + $.get(base_url + 'index.php/qso/band_to_freq/' + $('#band').val() + '/' + $('.mode').val(), function(result) { + $('#frequency').val(result); + }); + } + $('#frequency_rx').val(""); }); /* Calculate Frequency */ /* on band change */ $('#band').change(function() { - $.get(base_url + 'index.php/qso/band_to_freq/' + $(this).val() + '/' + $('.mode').val(), function(result) { - $('#frequency').val(result); - $('#frequency_rx').val(""); - $('#band_rx').val(""); - }); + if ($('#radio').val() == 0) { + $.get(base_url + 'index.php/qso/band_to_freq/' + $(this).val() + '/' + $('.mode').val(), function(result) { + $('#frequency').val(result); + }); + } + $('#frequency_rx').val(""); + $('#band_rx').val(""); $("#selectPropagation").val(""); $("#sat_name").val(""); $("#sat_mode").val(""); From eb375540ce6d9dfa4c182af6912630440593f14d Mon Sep 17 00:00:00 2001 From: HB9HIL <80885850+HB9HIL@users.noreply.github.com> Date: Thu, 30 May 2024 14:25:03 +0200 Subject: [PATCH 106/154] stop leaking qso time --- application/views/widgets/qsos.php | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/application/views/widgets/qsos.php b/application/views/widgets/qsos.php index 0e08f75f7..6281cbdb7 100644 --- a/application/views/widgets/qsos.php +++ b/application/views/widgets/qsos.php @@ -11,11 +11,20 @@ +config->item('use_auth') && ($this->session->userdata('user_type') >= 2)) || $this->config->item('use_auth') === FALSE || ($this->config->item('show_time'))) { + $show_time = true; +} else { + $show_time = false; +} ?> + +
- + + + @@ -38,7 +47,9 @@ foreach ($last_five_qsos->result() as $row) { ?> '; ?> - + + + From be334a0f622100f9237b71ff09fdcda64bd92ce1 Mon Sep 17 00:00:00 2001 From: Karuru Date: Thu, 30 May 2024 21:52:25 +0800 Subject: [PATCH 107/154] Improve chinese_simplified localization --- .../chinese_simplified/account_lang.php | 4 +- .../language/chinese_simplified/adif_lang.php | 24 +++---- .../chinese_simplified/admin_lang.php | 14 ++-- .../chinese_simplified/awards_lang.php | 6 +- .../chinese_simplified/export_lang.php | 24 +++---- .../chinese_simplified/filter_lang.php | 18 ++--- .../chinese_simplified/general_words_lang.php | 72 +++++++++---------- .../language/chinese_simplified/lotw_lang.php | 2 +- .../language/chinese_simplified/menu_lang.php | 32 ++++----- .../chinese_simplified/station_lang.php | 12 ++-- 10 files changed, 104 insertions(+), 104 deletions(-) diff --git a/application/language/chinese_simplified/account_lang.php b/application/language/chinese_simplified/account_lang.php index 91056caad..fa05d4a39 100644 --- a/application/language/chinese_simplified/account_lang.php +++ b/application/language/chinese_simplified/account_lang.php @@ -7,7 +7,7 @@ $lang['account_column1_text'] = '第1列'; $lang['account_column2_text'] = '第2列'; $lang['account_column3_text'] = '第3列'; $lang['account_column4_text'] = '第4列'; -$lang['account_column5_text'] = '第5列(仅日志页面展示)'; +$lang['account_column5_text'] = '第5列(仅日志页面展示)'; $lang['account_create_user_account'] = '创建账户'; $lang['account_edit_account'] = '编辑账户'; @@ -72,7 +72,7 @@ $lang['account_please_set_your_qrzcom_hamqthcom_credentials_in_the_general_confi $lang['account_amsat_status_upload'] = '上传AMSAT'; $lang['account_upload_status_of_sat_qsos_to'] = '上传卫星状态到'; -$lang['account_logbook_of_the_world'] = 'Logbook of the World(LoTW)'; +$lang['account_logbook_of_the_world'] = 'Logbook of the World(LoTW)'; $lang['account_logbook_of_the_world_lotw_username'] = 'Logbook of The World (LoTW) 用户名'; $lang['account_logbook_of_the_world_lotw_password'] = 'Logbook of The World (LoTW) 密码'; diff --git a/application/language/chinese_simplified/adif_lang.php b/application/language/chinese_simplified/adif_lang.php index 515ad589c..0691a29f4 100644 --- a/application/language/chinese_simplified/adif_lang.php +++ b/application/language/chinese_simplified/adif_lang.php @@ -32,21 +32,21 @@ $lang['adif_select_stationlocation'] = "选择台站位置"; // The File Input is translated by the Browser $lang['adif_file_label'] = "ADIF 文件"; -$lang['adif_hint_no_info_in_file'] = "如果导入的ADIF文件不包含此信息,选择此项"; +$lang['adif_hint_no_info_in_file'] = "如果导入的 ADIF 文件不包含此信息,选择此项"; -$lang['adif_import_dup'] = "导入重复的QSO"; -$lang['adif_mark_imported_lotw'] = "标记导入的QSO为已上传至 LoTW"; -$lang['adif_mark_imported_hrdlog'] = "标记导入的QSO为已上传至 HRDLog Logbook"; -$lang['adif_mark_imported_qrz'] = "标记导入的QSO为已上传至 QRZ Logbook"; -$lang['adif_mark_imported_clublog'] = "标记导入的QSO为已上传至 Clublog Logbook"; +$lang['adif_import_dup'] = "导入重复的 QSO"; +$lang['adif_mark_imported_lotw'] = "标记导入的 QSO 为已上传至 LoTW"; +$lang['adif_mark_imported_hrdlog'] = "标记导入的 QSO 为已上传至 HRDLog Logbook"; +$lang['adif_mark_imported_qrz'] = "标记导入的 QSO 为已上传至 QRZ Logbook"; +$lang['adif_mark_imported_clublog'] = "标记导入的 QSO 为已上传至 Clublog Logbook"; -$lang['adif_dxcc_from_adif'] = "使用ADIF文件中的DXCC信息"; -$lang['adif_dxcc_from_adif_hint'] = "如果不选择,Wavelog将会自动判断QSO的DXCC"; +$lang['adif_dxcc_from_adif'] = "使用 ADIF 文件中的 DXCC 信息"; +$lang['adif_dxcc_from_adif_hint'] = "如果不选择,Wavelog 将会自动判断 QSO 的 DXCC"; $lang['adif_always_use_login_call_as_op'] = "总是在导入时使用登录的呼号作为操作者名称"; $lang['adif_ignore_station_call'] = "导入时忽略台站的呼号"; -$lang['adif_ignore_station_call_hint'] = "如果选择,Wavelog会尝试导入ADIF文件中的 所有 QSO,而不判断是否与所选台站位置匹配"; +$lang['adif_ignore_station_call_hint'] = "如果选择,Wavelog 会尝试导入 ADIF 文件中的 所有 QSO,而不判断是否与所选台站位置匹配"; $lang['adif_upload'] = "上传"; @@ -123,9 +123,9 @@ ________________________________________________________________________________ $lang['dcl_results'] = "DCL DOK 更新结果"; $lang['dcl_info_updated'] = "DOK 的 DCL 信息已更新。"; -$lang['dcl_qsos_updated'] = "已更新的QSO"; -$lang['dcl_qsos_ignored'] = "已忽略的QSO"; -$lang['dcl_qsos_unmatched'] = "无法匹配的QSO"; +$lang['dcl_qsos_updated'] = "已更新的 QSO"; +$lang['dcl_qsos_ignored'] = "已忽略的 QSO"; +$lang['dcl_qsos_unmatched'] = "无法匹配的 QSO"; $lang['dcl_no_qsos_updated'] = "未找到可以更新的 QSO。"; $lang['dcl_dok_errors'] = "DOK 错误"; $lang['dcl_dok_errors_details'] = "与 DCL 相比,日志中 DOK 的数据不同"; diff --git a/application/language/chinese_simplified/admin_lang.php b/application/language/chinese_simplified/admin_lang.php index cf1e0b567..c3300864d 100644 --- a/application/language/chinese_simplified/admin_lang.php +++ b/application/language/chinese_simplified/admin_lang.php @@ -12,14 +12,14 @@ $lang['admin_user_list'] = '用户列表'; $lang['admin_user'] = '用户名'; $lang['admin_email'] = '电子邮件'; $lang['admin_type'] = '用户类型'; -$lang['admin_last_seen'] = "Last seen"; -$lang['admin_last_qso'] = "Last QSO:"; -$lang['admin_no_qso_in_log'] = "No QSOs in Log"; -$lang['admin_refresh_list'] = "Refresh List"; +$lang['admin_last_seen'] = "上次出现"; +$lang['admin_last_qso'] = "上个 QSO:"; +$lang['admin_no_qso_in_log'] = "日志为空"; +$lang['admin_refresh_list'] = "刷新列表"; $lang['admin_options'] = '设置'; -$lang['admin_station_logbooks'] = 'Logbooks'; -$lang['admin_station_locations'] = 'Locations'; +$lang['admin_station_logbooks'] = '日志簿'; +$lang['admin_station_locations'] = '地点'; $lang['admin_create_user'] = '创建用户'; $lang['admin_delete'] = '删除用户'; @@ -38,7 +38,7 @@ $lang['admin_password_reset'] = "重置密码"; $lang['admin_email_settings_incorrect'] = "邮件设定出现错误"; $lang['admin_password_reset_processed'] = "密码重置邮件已发送"; -$lang['admin_confirm_pwd_reset'] = "Do you really want to send this user a password-reset link?"; +$lang['admin_confirm_pwd_reset'] = "确认发送重置密码链接?"; // Contest Menu diff --git a/application/language/chinese_simplified/awards_lang.php b/application/language/chinese_simplified/awards_lang.php index a475ab668..035374451 100644 --- a/application/language/chinese_simplified/awards_lang.php +++ b/application/language/chinese_simplified/awards_lang.php @@ -6,7 +6,7 @@ $lang['awards_info_button'] = "奖状详情"; $lang['awards_show_worked'] = "显示已通联"; $lang['awards_show_confirmed'] = "显示已确认"; $lang['awards_show_not_worked'] = "显示未通联"; -$lang['awards_qsl_type'] = "Show QSO with QSL Type"; +$lang['awards_qsl_type'] = "显示 QSL 分类下的 QSO"; $lang['awards_show_cq_map'] = "查看CQ分区地图"; $lang['awards_summary'] = "概览"; $lang['awards_total'] = "总计"; @@ -16,8 +16,8 @@ $lang['awards_total_confirmed'] = "共确认"; $lang['awards_cq_page_title'] = "CQ 杂志 WAZ 奖状"; $lang['awards_itu_page_title'] = "Awards - ITU Zones"; -$lang['awards_show_itu_map'] = "Show ITU Zone Map"; -$lang['awards_show_jcc_map'] = "Show JCC Map"; +$lang['awards_show_itu_map'] = "显示 ITU 分区地图"; +$lang['awards_show_jcc_map'] = "显示 JCC 地图"; /* ___________________________________________________________________________________________ diff --git a/application/language/chinese_simplified/export_lang.php b/application/language/chinese_simplified/export_lang.php index 235970df4..3aabba17b 100644 --- a/application/language/chinese_simplified/export_lang.php +++ b/application/language/chinese_simplified/export_lang.php @@ -48,19 +48,19 @@ $lang['export_cabrillo_select_year'] = "选择年份"; $lang['export_cabrillo_select_contest'] = "选择比赛"; $lang['export_cabrillo_select_date_range'] = "选择日期区间"; $lang['export_cabrillo_club'] = "俱乐部"; -$lang['export_cabrillo_cat_operator'] = "操作员类型(Operator)"; -$lang['export_cabrillo_cat_operator_single_op'] = "单操作员(Single Operator)"; -$lang['export_cabrillo_cat_operator_multi_op'] = "多操作员(Multi Operator)"; -$lang['export_cabrillo_cat_operator_checklog'] = "检查日志(Checklog)"; -$lang['export_cabrillo_cat_assisted'] = "辅助类型(Assisted)"; -$lang['export_cabrillo_cat_assisted_not_ass'] = "无辅助(Not Assisted)"; -$lang['export_cabrillo_cat_assisted_ass'] = "有辅助(Assisted)"; -$lang['export_cabrillo_cat_band'] = "波段类型(Band)"; +$lang['export_cabrillo_cat_operator'] = "操作员类型(Operator)"; +$lang['export_cabrillo_cat_operator_single_op'] = "单操作员(Single Operator)"; +$lang['export_cabrillo_cat_operator_multi_op'] = "多操作员(Multi Operator)"; +$lang['export_cabrillo_cat_operator_checklog'] = "检查日志(Checklog)"; +$lang['export_cabrillo_cat_assisted'] = "辅助类型(Assisted)"; +$lang['export_cabrillo_cat_assisted_not_ass'] = "无辅助(Not Assisted)"; +$lang['export_cabrillo_cat_assisted_ass'] = "有辅助(Assisted)"; +$lang['export_cabrillo_cat_band'] = "波段类型(Band)"; $lang['export_cabrillo_cat_band_arrl_vhf'] = "VHF-3-BAND 和 VHF-FM-ONLY (仅限 ARRL VHF 竞赛)"; -$lang['export_cabrillo_cat_mode'] = "模式类型(Mode)"; -$lang['export_cabrillo_cat_power'] = "功率类型(Power)"; -$lang['export_cabrillo_cat_station'] = "台站类型(Station)"; -$lang['export_cabrillo_cat_transmitter'] = "发射机类型(Transmitter)"; +$lang['export_cabrillo_cat_mode'] = "模式类型(Mode)"; +$lang['export_cabrillo_cat_power'] = "功率类型(Power)"; +$lang['export_cabrillo_cat_station'] = "台站类型(Station)"; +$lang['export_cabrillo_cat_transmitter'] = "发射机类型(Transmitter)"; $lang['export_cabrillo_cat_overlay'] = "Overlay类型"; $lang['export_cabrillo_operators'] = "操作员"; $lang['export_cabrillo_soapbox'] = "Soapbox(附加信息)"; diff --git a/application/language/chinese_simplified/filter_lang.php b/application/language/chinese_simplified/filter_lang.php index b196b1186..72645768a 100644 --- a/application/language/chinese_simplified/filter_lang.php +++ b/application/language/chinese_simplified/filter_lang.php @@ -32,7 +32,7 @@ $lang['filter_search_dxcc'] = '搜索 DXCC'; $lang['filter_search_state'] = '搜索 州/省'; $lang['filter_search_gridsquare'] = '搜索 网格'; $lang['filter_search_cq_zone'] = '搜索 CQ 分区'; -$lang['filter_search_itu_zone'] = 'Search ITU Zone'; +$lang['filter_search_itu_zone'] = '搜索 ITU 分区'; $lang['filter_search_mode'] = '搜索 模式'; $lang['filter_search_band'] = '搜索 频段'; $lang['filter_search_iota'] = '搜索 IOTA'; @@ -81,7 +81,7 @@ $lang['filter_general_to'] = '截止日期'; // $lang['gen_hamradio_de'] --> application/language/english/general_words_lang.php // $lang['gen_hamradio_dx'] --> application/language/english/general_words_lang.php // $lang['gen_hamradio_dxcc'] --> application/language/english/general_words_lang.php -$lang['filter_general_none'] = '- 无 - (例如 /MM, /AM)'; +$lang['filter_general_none'] = '- 无 -(例如 /MM, /AM)'; // $lang['gen_hamradio_state'] --> application/language/english/general_words_lang.php // $lang['gen_hamradio_gridsquare'] --> application/language/english/general_words_lang.php // $lang['gen_hamradio_mode'] --> application/language/english/general_words_lang.php @@ -105,21 +105,21 @@ $lang['filter_actions_update_f_callbook'] = '从 Callbook 更新'; $lang['filter_actions_queue_bureau'] = '卡片局队列'; $lang['filter_actions_queue_direct'] = '直邮卡片队列'; $lang['filter_actions_queue_electronic'] = '电子卡片队列'; -$lang['filter_actions_sent_bureau'] = '已发送 (卡片局)'; -$lang['filter_actions_sent_direct'] = '已发送 (直邮)'; -$lang['filter_actions_sent_electronic'] = '已发送 (电子)'; +$lang['filter_actions_sent_bureau'] = '已发送(卡片局)'; +$lang['filter_actions_sent_direct'] = '已发送(直邮)'; +$lang['filter_actions_sent_electronic'] = '已发送(电子)'; $lang['filter_actions_not_sent'] = '未发送'; $lang['filter_actions_qsl_n_required'] = '未获取 QSL'; -$lang['filter_actions_recv_bureau'] = '已接收 (卡片局)'; -$lang['filter_actions_recv_direct'] = '已接收 (直邮)'; -$lang['filter_actions_recv_electronic'] = '已接收 (电子)'; +$lang['filter_actions_recv_bureau'] = '已接收(卡片局)'; +$lang['filter_actions_recv_direct'] = '已接收(直邮)'; +$lang['filter_actions_recv_electronic'] = '已接收(电子)'; $lang['filter_actions_not_rcvd'] = "Not Received"; $lang['filter_actions_create_adif'] = '创建 ADIF'; $lang['filter_actions_print_label'] = '打印标签'; $lang['filter_actions_start_print_title'] = '打印标签'; $lang['filter_actions_print_include_via'] = "包含通过"; $lang['filter_actions_print_include_grid'] = '包含网格?'; -$lang['filter_actions_print_include_ref'] = "Include reference? (SIG, SOTA, POTA, IOTA, WWFF; If available in location)"; +$lang['filter_actions_print_include_ref'] = "Include reference?(SIG, SOTA, POTA, IOTA, WWFF; If available in location)"; $lang['filter_actions_start_print'] = '开始打印编号'; $lang['filter_actions_print'] = '打印'; $lang['filter_actions_qsl_slideshow'] = 'QSL 展示窗'; diff --git a/application/language/chinese_simplified/general_words_lang.php b/application/language/chinese_simplified/general_words_lang.php index 9521cdc70..9b1b20cf8 100644 --- a/application/language/chinese_simplified/general_words_lang.php +++ b/application/language/chinese_simplified/general_words_lang.php @@ -12,14 +12,14 @@ $lang['general_word_danger'] = '警告'; $lang['general_word_maintenance'] = '维护'; $lang['general_word_info'] = '消息'; $lang['general_word_choose_file'] = '选择文件'; -$lang['general_word_please_wait'] = "Please Wait ..."; +$lang['general_word_please_wait'] = "请稍等…"; $lang['general_word_next'] = '后一项'; $lang['general_word_previous'] = '前一项'; $lang['general_word_cancel'] = "取消"; $lang['general_word_ok'] = "确认"; -$lang['general_word_show'] = "Show"; +$lang['general_word_show'] = "显示"; $lang['general_word_attention'] = "注意"; -$lang['general_word_message'] = "Message"; +$lang['general_word_message'] = "消息"; $lang['general_word_enabled'] = "已启用"; $lang['general_word_disabled'] = "已禁用"; $lang['general_word_export'] = "导出"; @@ -29,8 +29,8 @@ $lang['general_word_filtering_on'] = "筛选打开"; $lang['general_word_not_display'] = "不显示"; $lang['general_word_icon'] = "图标"; $lang['general_word_never'] = "从不"; -$lang['general_word_active'] = "Active"; -$lang['general_word_inactive'] = "Inactive"; +$lang['general_word_active'] = "启用"; +$lang['general_word_inactive'] = "关闭"; $lang['general_word_date'] = '日期'; $lang['general_word_startdate'] = "开始时间"; @@ -57,9 +57,9 @@ $lang['general_word_year'] = '年'; $lang['general_word_month'] = '月'; $lang['general_word_day'] = "日"; $lang['general_word_days'] = "天"; -$lang['general_word_period'] = "Period"; -$lang['general_word_yearly'] = "Yearly"; -$lang['general_word_monthly'] = "Monthly"; +$lang['general_word_period'] = "周期"; +$lang['general_word_yearly'] = "每年"; +$lang['general_word_monthly'] = "每月"; $lang['general_word_colors'] = "颜色"; $lang['general_word_light'] = "浅色/高光"; @@ -67,7 +67,7 @@ $lang['general_word_worked'] = '已通联'; $lang['general_word_worked_not_confirmed'] = "已通联未确认"; $lang['general_word_not_worked'] = "未通联"; $lang['general_word_confirmed'] = '已确认'; -$lang['general_word_not_confirmed'] = "Not Confirmed"; +$lang['general_word_not_confirmed'] = "未确认"; $lang['general_word_confirmation'] = "确认"; $lang['general_word_needed'] = '待通联'; @@ -92,22 +92,22 @@ $lang['general_word_qslcard_manager'] = '管理员'; $lang['general_word_qslcard_via'] = '通过'; $lang['general_word_eqslcard'] = '电子 QSL 卡片'; $lang['general_word_eqslcards'] = 'eQSL 卡片'; -$lang['general_word_lotw'] = 'Logbook of the World(LoTW)'; +$lang['general_word_lotw'] = 'Logbook of the World(LoTW)'; $lang['general_word_lotw_short'] = 'LoTW'; $lang['general_word_details'] = '详细'; $lang['general_word_qso_data'] = 'QSO 数据'; $lang['general_edit_qso'] = '编辑 QSO'; -$lang['general_mark_qsl_rx_bureau'] = '标记 已收到的QSL (卡片局)'; -$lang['general_mark_qsl_rx_direct'] = '标记 已收到的QSL (直邮)'; -$lang['general_mark_qsl_rx_electronic'] = '标记 已收到的QSL (电子)'; -$lang['general_mark_qsl_tx_bureau'] = '标记 已发送的QSL (卡片局)'; -$lang['general_mark_qsl_tx_direct'] = '标记 已发送的QSL (直邮)'; -$lang['general_mark_qsl_requested'] = '标记 已请求 QSL Card'; -$lang['general_mark_qsl_requested_bureau'] = '标记 已请求 QSL Card (卡片局)'; -$lang['general_mark_qsl_requested_direct'] = '标记 已请求 QSL Card (直邮)'; -$lang['general_mark_qsl_not_required'] = '标记 不需要 QSL Card'; +$lang['general_mark_qsl_rx_bureau'] = '标记 已收到卡片(卡片局)'; +$lang['general_mark_qsl_rx_direct'] = '标记 已收到卡片(直邮)'; +$lang['general_mark_qsl_rx_electronic'] = '标记 已收到卡片(电子)'; +$lang['general_mark_qsl_tx_bureau'] = '标记 已收到卡片(卡片局)'; +$lang['general_mark_qsl_tx_direct'] = '标记 已收到卡片(直邮)'; +$lang['general_mark_qsl_requested'] = '标记 已请求卡片'; +$lang['general_mark_qsl_requested_bureau'] = '标记 已请求卡片(卡片局)'; +$lang['general_mark_qsl_requested_direct'] = '标记 已请求卡片(直邮)'; +$lang['general_mark_qsl_not_required'] = '标记 不需要卡片'; $lang['general_delete_qso'] = '删除 QSO'; $lang['general_more_qso'] = '更多 QSO'; @@ -133,31 +133,31 @@ $lang['gen_hamradio_callsign'] = '呼号'; $lang['gen_hamradio_prefix'] = "前缀"; $lang['gen_hamradio_suffix'] = "后缀"; $lang['gen_hamradio_mode'] = '模式'; -$lang['gen_hamradio_ant_az'] = 'Antenna Azimuth'; -$lang['gen_hamradio_ant_el'] = 'Antenna Elevation'; +$lang['gen_hamradio_ant_az'] = '天线方位'; +$lang['gen_hamradio_ant_el'] = '天线仰角'; $lang['gen_hamradio_de'] = '本台呼号(De)'; $lang['gen_hamradio_dx'] = '对方呼号(Dx)'; -$lang['gen_hamradio_rst_sent'] = 'Sent RST'; -$lang['gen_hamradio_rst_rcvd'] = 'Rcvd RST'; +$lang['gen_hamradio_rst_sent'] = '信号报告(发送)'; +$lang['gen_hamradio_rst_rcvd'] = '信号报告(接收)'; $lang['gen_hamradio_band'] = '频段'; $lang['gen_hamradio_bandgroup'] = "波段"; -$lang['gen_hamradio_band_rx'] = '频段 (RX)'; +$lang['gen_hamradio_band_rx'] = '频段(接收)'; $lang['gen_hamradio_frequency'] = '频率'; -$lang['gen_hamradio_frequency_rx'] = '频率 (RX)'; +$lang['gen_hamradio_frequency_rx'] = '频率(接收)'; $lang['gen_hamradio_radio'] = '电台'; -$lang['gen_hamradio_rsts'] = '信号报告 (发)'; -$lang['gen_hamradio_rstr'] = '信号报告 (收)'; +$lang['gen_hamradio_rsts'] = '信号报告(发)'; +$lang['gen_hamradio_rstr'] = '信号报告(收)'; $lang['gen_hamradio_refs'] = '对方网格'; $lang['gen_hamradio_myrefs'] = '电台网格'; -$lang['gen_hamradio_exchange_sent_short'] = '信号交换 (发)'; -$lang['gen_hamradio_exchange_rcvd_short'] = '信号交换 (收)'; +$lang['gen_hamradio_exchange_sent_short'] = '信号交换(发)'; +$lang['gen_hamradio_exchange_rcvd_short'] = '信号交换(收)'; $lang['gen_hamradio_qsl'] = 'QSL'; $lang['gen_hamradio_qsltype'] = "QSL 类型"; $lang['gen_hamradio_qslvia'] = 'QSL via'; $lang['gen_hamradio_qslmsg'] = 'QSL 信息'; $lang['gen_hamradio_locator'] = '定位地图'; -$lang['gen_hamradio_transmit_power'] = '发射功率 (W)'; -$lang['gen_hamradio_receive_power'] = 'RX Power (W)'; +$lang['gen_hamradio_transmit_power'] = '发射功率(W)'; +$lang['gen_hamradio_receive_power'] = 'RX Power(W)'; $lang['gen_hamradio_propagation_mode'] = '传播模式'; $lang['gen_hamradio_satellite_name'] = '卫星名称'; @@ -165,7 +165,7 @@ $lang['gen_hamradio_satellite_mode'] = '卫星模式'; $lang['gen_hamradio_logbook'] = '日志簿'; $lang['gen_hamradio_active_logbook'] = 'Active Logbook'; -$lang['gen_hamradio_active_logbook_hint'] = "Displaying all QSOs of station locations which are linked to this logbook"; +$lang['gen_hamradio_active_logbook_hint'] = "显示该日志本下全部 QSO"; $lang['gen_hamradio_award'] = "奖项"; $lang['gen_hamradio_zones'] = '分区'; @@ -174,8 +174,8 @@ $lang['gen_hamradio_itu_zone'] = 'ITU 分区'; $lang['gen_hamradio_dxcc'] = 'DXCC实体'; $lang['gen_hamradio_deleted_dxcc'] = '删除 DXCC 实体'; $lang['gen_hamradio_continent'] = '大陆'; -$lang['gen_hamradio_usa_state'] = '州(美国)'; -$lang['gen_hamradio_county_reference'] = '县(美国)'; +$lang['gen_hamradio_usa_state'] = '州(美国)'; +$lang['gen_hamradio_county_reference'] = '县(美国)'; $lang['gen_hamradio_iota_reference'] = 'IOTA 编号'; $lang['gen_hamradio_sota_reference'] = 'SOTA 编号'; $lang['gen_hamradio_wwff_reference'] = 'WWFF 编号'; @@ -237,6 +237,6 @@ $lang['dashboard_logbooks_warning'] = '你没有电台日志。 请前往 Date: Thu, 30 May 2024 23:07:36 +0200 Subject: [PATCH 108/154] Show not worked before instead of 0 times --- application/language/bulgarian/qso_lang.php | 1 + application/language/chinese_simplified/qso_lang.php | 1 + application/language/czech/qso_lang.php | 1 + application/language/dutch/qso_lang.php | 1 + application/language/english/qso_lang.php | 1 + application/language/finnish/qso_lang.php | 1 + application/language/french/qso_lang.php | 1 + application/language/german/qso_lang.php | 1 + application/language/greek/qso_lang.php | 1 + application/language/italian/qso_lang.php | 1 + application/language/polish/qso_lang.php | 1 + application/language/russian/qso_lang.php | 1 + application/language/spanish/qso_lang.php | 1 + application/language/swedish/qso_lang.php | 1 + application/language/turkish/qso_lang.php | 1 + application/views/qso/index.php | 1 + assets/js/sections/qso.js | 6 +++++- 17 files changed, 21 insertions(+), 1 deletion(-) diff --git a/application/language/bulgarian/qso_lang.php b/application/language/bulgarian/qso_lang.php index dd4aa9789..e3195d08b 100644 --- a/application/language/bulgarian/qso_lang.php +++ b/application/language/bulgarian/qso_lang.php @@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'Карта на QSO'; $lang['qso_title_suggestions'] = 'Предложения'; $lang['qso_title_previous_contacts'] = 'Предишни контакти'; $lang['qso_title_times_worked_before'] = "times worked before"; +$lang['qso_title_not_worked_before'] = "Not worked before"; $lang['qso_title_image'] = 'Profile Picture'; $lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown"; diff --git a/application/language/chinese_simplified/qso_lang.php b/application/language/chinese_simplified/qso_lang.php index f38c1a20a..112f3bb46 100644 --- a/application/language/chinese_simplified/qso_lang.php +++ b/application/language/chinese_simplified/qso_lang.php @@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'QSO 地图'; $lang['qso_title_suggestions'] = '建议'; $lang['qso_title_previous_contacts'] = '先前通联'; $lang['qso_title_times_worked_before'] = "先前通联的次数"; +$lang['qso_title_not_worked_before'] = "Not worked before"; $lang['qso_title_image'] = '操作员照片'; $lang['qso_previous_max_shown'] = "最多五次先前通联将会被显示"; diff --git a/application/language/czech/qso_lang.php b/application/language/czech/qso_lang.php index 0117139a0..83003cdce 100644 --- a/application/language/czech/qso_lang.php +++ b/application/language/czech/qso_lang.php @@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'Mapa spojení'; $lang['qso_title_suggestions'] = 'Návrhy'; $lang['qso_title_previous_contacts'] = 'Předchozí spojení'; $lang['qso_title_times_worked_before'] = "times worked before"; +$lang['qso_title_not_worked_before'] = "Not worked before"; $lang['qso_title_image'] = 'Profile Picture'; $lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown"; diff --git a/application/language/dutch/qso_lang.php b/application/language/dutch/qso_lang.php index e2e30f317..c7d5d2e8f 100644 --- a/application/language/dutch/qso_lang.php +++ b/application/language/dutch/qso_lang.php @@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'QSO Kaart'; $lang['qso_title_suggestions'] = 'Suggesties'; $lang['qso_title_previous_contacts'] = 'Eerdere verbindingen'; $lang['qso_title_times_worked_before'] = "times worked before"; +$lang['qso_title_not_worked_before'] = "Not worked before"; $lang['qso_title_image'] = 'Profile Picture'; $lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown"; diff --git a/application/language/english/qso_lang.php b/application/language/english/qso_lang.php index e97395515..4d0e8dd82 100644 --- a/application/language/english/qso_lang.php +++ b/application/language/english/qso_lang.php @@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'QSO Map'; $lang['qso_title_suggestions'] = 'Suggestions'; $lang['qso_title_previous_contacts'] = 'Previous Contacts'; $lang['qso_title_times_worked_before'] = "times worked before"; +$lang['qso_title_not_worked_before'] = "Not worked before"; $lang['qso_title_image'] = 'Profile Picture'; $lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown"; diff --git a/application/language/finnish/qso_lang.php b/application/language/finnish/qso_lang.php index bfdb7906c..8fe4ba3bd 100644 --- a/application/language/finnish/qso_lang.php +++ b/application/language/finnish/qso_lang.php @@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'Vasta-aseman sijainti kartalla'; $lang['qso_title_suggestions'] = 'Kutsumerkkiehdotukset'; $lang['qso_title_previous_contacts'] = 'Edelliset yhteydet'; $lang['qso_title_times_worked_before'] = "times worked before"; +$lang['qso_title_not_worked_before'] = "Not worked before"; $lang['qso_title_image'] = 'Profiilikuva'; $lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown"; diff --git a/application/language/french/qso_lang.php b/application/language/french/qso_lang.php index e70249a11..ebeaa9633 100644 --- a/application/language/french/qso_lang.php +++ b/application/language/french/qso_lang.php @@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'Carte QSO'; $lang['qso_title_suggestions'] = 'Suggestions'; $lang['qso_title_previous_contacts'] = 'Contacts précédents'; $lang['qso_title_times_worked_before'] = "times worked before"; +$lang['qso_title_not_worked_before'] = "Not worked before"; $lang['qso_title_image'] = 'Profile Picture'; $lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown"; diff --git a/application/language/german/qso_lang.php b/application/language/german/qso_lang.php index c1218251c..b6c32ff97 100644 --- a/application/language/german/qso_lang.php +++ b/application/language/german/qso_lang.php @@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'QSO-Karte'; $lang['qso_title_suggestions'] = 'Vorschläge'; $lang['qso_title_previous_contacts'] = 'Vorherige Kontakte'; $lang['qso_title_times_worked_before'] = "mal vorher gearbeitet"; +$lang['qso_title_not_worked_before'] = "Noch nicht gearbeitet"; $lang['qso_title_image'] = 'Profilbild'; $lang['qso_previous_max_shown'] = "Es werden maximal 5 Kontakte angezeigt."; diff --git a/application/language/greek/qso_lang.php b/application/language/greek/qso_lang.php index 3533ae37c..bb81df94b 100644 --- a/application/language/greek/qso_lang.php +++ b/application/language/greek/qso_lang.php @@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'Χάρτης QSO'; $lang['qso_title_suggestions'] = 'Εισήγησης'; $lang['qso_title_previous_contacts'] = 'Προηγούμενες Επαφές'; $lang['qso_title_times_worked_before'] = "times worked before"; +$lang['qso_title_not_worked_before'] = "Not worked before"; $lang['qso_title_image'] = 'Εικόνα προφίλ'; $lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown"; diff --git a/application/language/italian/qso_lang.php b/application/language/italian/qso_lang.php index ebf0f9d09..61e6f43e3 100644 --- a/application/language/italian/qso_lang.php +++ b/application/language/italian/qso_lang.php @@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'Mappa QSO'; $lang['qso_title_suggestions'] = 'Suggerimenti'; $lang['qso_title_previous_contacts'] = 'Contatti Precedenti'; $lang['qso_title_times_worked_before'] = "times worked before"; +$lang['qso_title_not_worked_before'] = "Not worked before"; $lang['qso_title_image'] = 'Immagine Profilo'; $lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown"; diff --git a/application/language/polish/qso_lang.php b/application/language/polish/qso_lang.php index c27eab374..9092edbfe 100644 --- a/application/language/polish/qso_lang.php +++ b/application/language/polish/qso_lang.php @@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'Mapa łączności'; $lang['qso_title_suggestions'] = 'Sugestie'; $lang['qso_title_previous_contacts'] = 'Poprzednie łączności'; $lang['qso_title_times_worked_before'] = "times worked before"; +$lang['qso_title_not_worked_before'] = "Not worked before"; $lang['qso_title_image'] = 'Profile Picture'; $lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown"; diff --git a/application/language/russian/qso_lang.php b/application/language/russian/qso_lang.php index b17557542..de0d4b7fd 100644 --- a/application/language/russian/qso_lang.php +++ b/application/language/russian/qso_lang.php @@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'Карта QSO'; $lang['qso_title_suggestions'] = 'Предложения'; $lang['qso_title_previous_contacts'] = 'Предыдущие контакты'; $lang['qso_title_times_worked_before'] = "times worked before"; +$lang['qso_title_not_worked_before'] = "Not worked before"; $lang['qso_title_image'] = 'Profile Picture'; $lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown"; diff --git a/application/language/spanish/qso_lang.php b/application/language/spanish/qso_lang.php index bff79b9c8..34dbb686d 100644 --- a/application/language/spanish/qso_lang.php +++ b/application/language/spanish/qso_lang.php @@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'Mapa de QSO'; $lang['qso_title_suggestions'] = 'Sugerencias'; $lang['qso_title_previous_contacts'] = 'Contactos previos'; $lang['qso_title_times_worked_before'] = "times worked before"; +$lang['qso_title_not_worked_before'] = "Not worked before"; $lang['qso_title_image'] = 'Imagen de Perfil'; $lang['qso_previous_max_shown'] = "Se muestra máx. de 5 contactos previos"; diff --git a/application/language/swedish/qso_lang.php b/application/language/swedish/qso_lang.php index d751d3c43..30b41f789 100644 --- a/application/language/swedish/qso_lang.php +++ b/application/language/swedish/qso_lang.php @@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'QSO-karta'; $lang['qso_title_suggestions'] = 'Förslag'; $lang['qso_title_previous_contacts'] = 'Föregående QSOn'; $lang['qso_title_times_worked_before'] = "times worked before"; +$lang['qso_title_not_worked_before'] = "Not worked before"; $lang['qso_title_image'] = 'Profilbild'; $lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown"; diff --git a/application/language/turkish/qso_lang.php b/application/language/turkish/qso_lang.php index 38f110e5f..9685216d5 100644 --- a/application/language/turkish/qso_lang.php +++ b/application/language/turkish/qso_lang.php @@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'QSO Haritası'; $lang['qso_title_suggestions'] = 'Öneriler'; $lang['qso_title_previous_contacts'] = 'Önceki Görüşmeler'; $lang['qso_title_times_worked_before'] = "times worked before"; +$lang['qso_title_not_worked_before'] = "Not worked before"; $lang['qso_title_image'] = 'Profil Resmi'; $lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown"; diff --git a/application/views/qso/index.php b/application/views/qso/index.php index c4378f990..f28f6ed8a 100755 --- a/application/views/qso/index.php +++ b/application/views/qso/index.php @@ -4,6 +4,7 @@ var text_error_timeoff_less_timeon = ""; var lang_qso_title_previous_contacts = ""; var lang_qso_title_times_worked_before = ""; + var lang_qso_title_not_worked_before = "";
diff --git a/assets/js/sections/qso.js b/assets/js/sections/qso.js index f425679ec..ea05fb441 100644 --- a/assets/js/sections/qso.js +++ b/assets/js/sections/qso.js @@ -964,7 +964,11 @@ $( document ).ready(function() { } if(result.timesWorked != "") { - $('#timesWorked').html(result.timesWorked + ' ' + lang_qso_title_times_worked_before); + if (result.timesWorked == '0') { + $('#timesWorked').html(lang_qso_title_not_worked_before); + } else { + $('#timesWorked').html(result.timesWorked + ' ' + lang_qso_title_times_worked_before); + } } else { $('#timesWorked').html(lang_qso_title_previous_contacts); } From dbac7346e963f55509dc00dd6cec38131c7dae4a Mon Sep 17 00:00:00 2001 From: phl0 Date: Thu, 30 May 2024 23:14:56 +0200 Subject: [PATCH 109/154] Show hint and button on table load --- application/views/hamsat/index.php | 7 +------ assets/js/sections/hamsat.js | 2 ++ 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/application/views/hamsat/index.php b/application/views/hamsat/index.php index 2a0c97f61..796a2c615 100644 --- a/application/views/hamsat/index.php +++ b/application/views/hamsat/index.php @@ -8,13 +8,8 @@ - - +

diff --git a/assets/js/sections/hamsat.js b/assets/js/sections/hamsat.js index 1c2cf4928..e388dbe66 100644 --- a/assets/js/sections/hamsat.js +++ b/assets/js/sections/hamsat.js @@ -8,10 +8,12 @@ function loadHamsAt(show_workable_only) { $('#workable_hint').text("Only workable passes shown."); $('#toggle_workable').prop('value', 0); $('#toggle_workable').html('Show all passes'); + $('#toggle_workable').show() } else { $('#workable_hint').text("All passes shown."); $('#toggle_workable').prop('value', 1); $('#toggle_workable').html('Show workable passes only'); + $('#toggle_workable').show() } } From a8f31a3004511eb3db76db5790fffde064150685 Mon Sep 17 00:00:00 2001 From: karuru Date: Fri, 31 May 2024 09:58:56 +0800 Subject: [PATCH 110/154] Improve chinese_simplified localization #2 --- .../chinese_simplified/account_lang.php | 44 +++--- .../chinese_simplified/admin_lang.php | 6 +- .../chinese_simplified/awards_lang.php | 28 ++-- .../chinese_simplified/filter_lang.php | 6 +- .../chinese_simplified/general_words_lang.php | 4 +- .../language/chinese_simplified/lotw_lang.php | 4 +- .../language/chinese_simplified/menu_lang.php | 10 +- .../chinese_simplified/options_lang.php | 18 +-- .../chinese_simplified/qslcard_lang.php | 14 +- .../language/chinese_simplified/qso_lang.php | 16 +- .../chinese_simplified/station_lang.php | 138 +++++++++--------- 11 files changed, 144 insertions(+), 144 deletions(-) diff --git a/application/language/chinese_simplified/account_lang.php b/application/language/chinese_simplified/account_lang.php index fa05d4a39..b302c2817 100644 --- a/application/language/chinese_simplified/account_lang.php +++ b/application/language/chinese_simplified/account_lang.php @@ -3,11 +3,11 @@ defined('BASEPATH') OR exit('No direct script access allowed'); $lang['account_logbook_fields'] = '日志显示内容'; -$lang['account_column1_text'] = '第1列'; -$lang['account_column2_text'] = '第2列'; -$lang['account_column3_text'] = '第3列'; -$lang['account_column4_text'] = '第4列'; -$lang['account_column5_text'] = '第5列(仅日志页面展示)'; +$lang['account_column1_text'] = '第 1 列'; +$lang['account_column2_text'] = '第 2 列'; +$lang['account_column3_text'] = '第 3 列'; +$lang['account_column4_text'] = '第 4 列'; +$lang['account_column5_text'] = '第 5 列(仅日志页面展示)'; $lang['account_create_user_account'] = '创建账户'; $lang['account_edit_account'] = '编辑账户'; @@ -30,14 +30,14 @@ $lang['account_personal_information'] = '个人信息'; $lang['account_first_name'] = '姓'; $lang['account_last_name'] = '名'; -$lang['account_hamradio_information'] = "HAM信息"; +$lang['account_hamradio_information'] = "HAM 信息"; $lang['account_callsign'] = '呼号'; $lang['account_gridsquare'] = '网格坐标'; $lang['account_wavelog_preferences'] = '偏好'; $lang['account_timezone'] = '时区'; $lang['account_date_format'] = '日期格式'; -$lang['account_log_end_time'] = '单独记录QSO结束时间'; +$lang['account_log_end_time'] = '单独记录 QSO 结束时间'; $lang['account_log_end_time_hint'] = '如果想分别记录QSO的开始和结束时间,选择\'是\',若选择\'否\'则QSO开始与结束时间相同'; $lang['account_quicklog_feature'] = "快速日志"; $lang['account_quicklog_feature_hint'] = "快速日志功能可以使用标题栏中的搜索字段来记录呼号"; @@ -48,8 +48,8 @@ $lang['account_quicklog_enter_search'] = "查询呼号"; $lang['account_measurement_preferences'] = '距离单位选择'; $lang['account_select_how_you_would_like_dates_shown_when_logged_into_your_account'] = '选择您登录账户时显示偏好的日期格式'; $lang['account_choose_which_unit_distances_will_be_shown_in'] = '选择距离单位'; -$lang['account_wavelog_language'] = 'Wavelog语言'; -$lang['account_choose_wavelog_language'] = '选择Wavelog语言'; +$lang['account_wavelog_language'] = 'Wavelog 语言'; +$lang['account_choose_wavelog_language'] = '选择 Wavelog 语言'; $lang['account_main_menu'] = '主菜单'; $lang['account_show_notes_in_the_main_menu'] = '在主菜单显示便签'; @@ -60,16 +60,16 @@ $lang['account_if_set_gridsquare_is_fetched_based_on_location_name'] = '如果 $lang['account_sota_auto_lookup_gridsquare_and_name_for_summit'] = '根据 SOTA 编号自动查找网格坐标和山峰'; $lang['account_wwff_auto_lookup_gridsquare_and_name_for_reference'] = '根据 WWFF 编号自动查找网格坐标和保护区'; $lang['account_pota_auto_lookup_gridsquare_and_name_for_park'] = '根据 POTA 编号自动查找网格坐标和公园'; -$lang['account_if_set_name_and_gridsquare_is_fetched_from_the_api_and_filled_in_location_and_locator'] = '开启此项设置,将会通过API获取名称和网格坐标,并填写位置和网格定位'; +$lang['account_if_set_name_and_gridsquare_is_fetched_from_the_api_and_filled_in_location_and_locator'] = '开启此项设置,将会通过 API 获取名称和网格坐标,并填写位置和网格定位'; -$lang['account_previous_qsl_type'] = '上一个QSL方式'; -$lang['account_select_the_type_of_qsl_to_show_in_the_previous_qsos_section'] = '选择要在上一个QSO部分中显示的QSL方式'; +$lang['account_previous_qsl_type'] = '上一个 QSL 方式'; +$lang['account_select_the_type_of_qsl_to_show_in_the_previous_qsos_section'] = '选择要在上一个 QSO 部分中显示的 QSL 方式'; $lang['account_qrzcom_hamqthcom_images'] = 'qrz.com/hamqth.com 图片'; $lang['account_show_profile_picture_of_qso_partner_from_qrzcom_hamqthcom_profile_in_the_log_qso_section'] = '在日志QSO部分中显示由 qrz.com 中 hamqth.com 配置文件所获得的对方个人资料图片'; $lang['account_please_set_your_qrzcom_hamqthcom_credentials_in_the_general_config_file'] = '请在 general_config.php 中设置 qrz.com/hamqth.com 的凭据'; -$lang['account_amsat_status_upload'] = '上传AMSAT'; +$lang['account_amsat_status_upload'] = '上传 AMSAT'; $lang['account_upload_status_of_sat_qsos_to'] = '上传卫星状态到'; $lang['account_logbook_of_the_world'] = 'Logbook of the World(LoTW)'; @@ -103,13 +103,13 @@ $lang['account_forgot_your_password'] = '忘记密码?'; $lang['account_login'] = '登录'; -$lang['account_mastodon'] = 'Mastodon服务器'; +$lang['account_mastodon'] = 'Mastodon 服务器'; $lang['account_user_mastodon'] = 'Mastodon 地址'; -$lang['account_user_mastodon_hint'] = "Mastodon服务器的主URL地址,例如 https://radiosocial.de"; +$lang['account_user_mastodon_hint'] = "Mastodon 服务器的主 URL 地址,例如 https://radiosocial.de"; -$lang['account_default_band_settings'] = '默认波段和QSL确认方式设置'; +$lang['account_default_band_settings'] = '默认波段和 QSL 确认方式设置'; $lang['account_gridmap_default_band'] = '默认波段'; -$lang['account_qsl_settings'] = '默认QSL方式'; +$lang['account_qsl_settings'] = '默认 QSL 方式'; $lang['account_winkeyer'] = 'Winkeyer'; $lang['account_winkeyer_hint'] = "Wavelog 中对 Winkeyer 的支持是实验性的,请在使用前先阅读 https://github.com/wavelog/wavelog/wiki/Winkey"; @@ -128,9 +128,9 @@ $lang['account_miscellaneous'] = "其他"; $lang['account_hamsat'] = "Hams.at"; $lang['account_hamsat_private_feed_key'] = "Private Feed Key"; -$lang['account_hamsat_hint'] = "See your profile at https://hams.at/users/settings."; -$lang['account_hamsat_workable_only'] = "Show Workable Passes Only"; -$lang['account_hamsat_workable_only_hint'] = "If enabled shows only workable passes based on the gridsquare set in your hams.at account. Requires private feed key to be set."; +$lang['account_hamsat_hint'] = "在 https://hams.at/users/settings 查看个人信息。"; +$lang['account_hamsat_workable_only'] = "只显示可通联的过境"; +$lang['account_hamsat_workable_only_hint'] = "如果启用,仅显示基于在 hams.at 设置好的位置信息计算过境,需要设置好 Private Feed Key。"; -$lang['account_references_show'] = "Show Reference Fields on QSO Tab"; -$lang['account_show_references_on_1st_tab'] = "The enabled items will be shown on the QSO tab rather than the General tab."; +$lang['account_references_show'] = "在 QSO 页面显示标识代号栏"; +$lang['account_show_references_on_1st_tab'] = "启用后在 QSO 页面显示(非通用页面)。"; diff --git a/application/language/chinese_simplified/admin_lang.php b/application/language/chinese_simplified/admin_lang.php index c3300864d..d5f122661 100644 --- a/application/language/chinese_simplified/admin_lang.php +++ b/application/language/chinese_simplified/admin_lang.php @@ -2,8 +2,8 @@ defined('BASEPATH') OR exit('No direct script access allowed'); -$lang['admin_user_line1'] = 'Wavelog至少需要配置一个用户才能运行。'; -$lang['admin_user_line2'] = '用户可以被分配不同的角色,这些角色赋予他们不同的权限,例如向日志簿添加 QSO 和访问Wavelog API。'; +$lang['admin_user_line1'] = 'Wavelog 至少需要配置一个用户才能运行。'; +$lang['admin_user_line2'] = '用户可以被分配不同的角色,这些角色赋予他们不同的权限,例如向日志簿添加 QSO 和访问 Wavelog API。'; $lang['admin_user_line3'] = '页面右上方显示当前登录的用户。'; $lang['admin_user_line4'] = "通过'重置密码'按钮,你可以向用户发送一封带有重置密码链接的邮件。您需要确保全局设定中的邮件设置配置正确"; @@ -30,7 +30,7 @@ $lang['admin_update'] = '更新'; $lang['admin_copy'] = '复制'; $lang['admin_save'] = '保存'; $lang['admin_close'] = '关闭'; -$lang['admin_clear'] = "Clear"; +$lang['admin_clear'] = "清除"; $lang['admin_user_accounts'] = '用户账户'; $lang['admin_danger'] = '危险'; $lang['admin_experimental'] = "实验性功能"; diff --git a/application/language/chinese_simplified/awards_lang.php b/application/language/chinese_simplified/awards_lang.php index 035374451..0f377e7f9 100644 --- a/application/language/chinese_simplified/awards_lang.php +++ b/application/language/chinese_simplified/awards_lang.php @@ -74,9 +74,9 @@ ________________________________________________________________________________ */ $lang['awards_helvetia_description_ln1'] = "HELVETIA 26 | SWITZERLAND AWARD"; -$lang['awards_helvetia_description_ln2'] = "The USKA (Union of Swiss Shortwave Amateurs) sponsors two awards, the HELVETIA 26 (H26) Award and the SWITZERLAND Award, aimed at promoting activities on the bands by encouraging contacts across as many Swiss cantons as possible on multiple bands."; -$lang['awards_helvetia_description_ln3'] = "These awards come in two versions: one for HF bands and the other for VHF (including SHF and UHF) bands. Valid connections for these awards date back to January 1, 1980"; -$lang['awards_helvetia_description_ln4'] = "For more information, you can visit this link: https://www.uska.ch/contest/uska-diplome/."; +$lang['awards_helvetia_description_ln2'] = "USKA(瑞士短波业余爱好者联盟)设立两个奖项:HELVETIA 26(H26)奖和 SWITZERLAND 奖,旨在通过鼓励在多个波段上通联尽可能多的瑞士州。"; +$lang['awards_helvetia_description_ln3'] = "这些奖项有两类:一个适用于 HF 频段,另一个适用于 VHF(包括 SHF 和 UHF)频段。这些奖项的有效连接可追溯到 1980 年 1 月 1 日"; +$lang['awards_helvetia_description_ln4'] = "如了解更多信息可在:https://www.uska.ch/contest/uska-diplome/ 查看"; /* @@ -215,10 +215,10 @@ JCC -- Use all 4 Lines of Text ___________________________________________________________________________________________ */ -$lang['awards_jcc_description_ln1'] = "JCC - Japan Century Cities Award"; -$lang['awards_jcc_description_ln2'] = "May be claimed for having contacted (heard) and received a QSL card from an amateur station located in each of at least 100 different cities of Japan."; -$lang['awards_jcc_description_ln3'] = "JCC-200, 300, 400, 500, 600, 700 and 800 will be issued as separate awards. A list of QSL cards should be arranged in order of JCC reference number, however names of city may be omitted. An additional sticker will be issued at every 50 contacts like 150, 250, 350, 450, 550, 650, 750 cities."; -$lang['awards_jcc_description_ln4'] = "For more information, please visit: https://www.jarl.org/English/4_Library/A-4-2_Awards/Award_Main.htm."; +$lang['awards_jcc_description_ln1'] = "JCC - 日本世纪城市奖"; +$lang['awards_jcc_description_ln2'] = "通联(收听)并收到日本 100 个不同城市的电台卡片,即可申请。"; +$lang['awards_jcc_description_ln3'] = "此外 JCC 还有数量为 200, 300, 400, 500, 600, 700 and 800 的奖项类别。QSL 卡片应记录 JCC 标识代号,城市名称为无效。额外的贴纸会在每 50 个通联记录发放,如 150, 250, 350, 450, 550, 650, 750 个城市数量"; +$lang['awards_jcc_description_ln4'] = "更多信息可在:https://www.jarl.org/English/4_Library/A-4-2_Awards/Award_Main.htm 查看"; /* @@ -227,16 +227,16 @@ WAB -- Use all 4 Lines of Text ___________________________________________________________________________________________ */ -$lang['awards_wab_description_ln1'] = "WAB - Worked All Britain Award"; -$lang['awards_wab_description_ln2'] = "WAB, Worked All Britain squares in Amateur Radio, encourages licensed ham radio operators to work all the squares in Great Britain."; -$lang['awards_wab_description_ln3'] = "May be claimed for having contacted an amateur station located in the required amount of squares, described on the page linked below."; -$lang['awards_wab_description_ln4'] = "For more information, please visit: https://wab.intermip.net/default.php."; +$lang['awards_wab_description_ln1'] = "WAB - 通联大不列颠奖"; +$lang['awards_wab_description_ln2'] = "WAB(Worked All Britain squares in Amateur Ra​​dio)鼓励业余无线电操作员通联英国所有网格"; +$lang['awards_wab_description_ln3'] = "达成既定数量的通联网格可申请,可在如下链接查看"; +$lang['awards_wab_description_ln4'] = "更多信息请查看 https://wab.intermip.net/default.php"; /* ___________________________________________________________________________________________ ITU ___________________________________________________________________________________________ */ -$lang['awards_itu_description_ln1'] = "ITU Zones"; -$lang['awards_itu_description_ln2'] = "The Classic Worked ITU Zones award may be claimed by producing evidence of having contacted land based amateur radio stations in at least 70 of the 75 broadcasting zones as defined by the International Telecommunications Union (ITU)."; -$lang['awards_itu_description_ln3'] = "You can find more information on the website of RSGB."; +$lang['awards_itu_description_ln1'] = "ITU 分区"; +$lang['awards_itu_description_ln2'] = "通联全球 75 个 ITU 分区中的 70 个可申请该奖"; +$lang['awards_itu_description_ln3'] = "更多信息请查看 RSGB"; diff --git a/application/language/chinese_simplified/filter_lang.php b/application/language/chinese_simplified/filter_lang.php index 72645768a..a35a17568 100644 --- a/application/language/chinese_simplified/filter_lang.php +++ b/application/language/chinese_simplified/filter_lang.php @@ -15,7 +15,7 @@ $lang['filter_filters'] = '过滤器'; $lang['filter_actions'] = '操作'; $lang['filter_results'] = '每页结果数'; $lang['filter_search'] = '搜索'; -$lang['filter_dupes'] = "重复QSO"; +$lang['filter_dupes'] = "重复 QSO"; $lang['filter_map'] = '地图'; $lang['filter_options'] = '显示列'; $lang['filter_reset'] = '重置筛选条件'; @@ -113,13 +113,13 @@ $lang['filter_actions_qsl_n_required'] = '未获取 QSL'; $lang['filter_actions_recv_bureau'] = '已接收(卡片局)'; $lang['filter_actions_recv_direct'] = '已接收(直邮)'; $lang['filter_actions_recv_electronic'] = '已接收(电子)'; -$lang['filter_actions_not_rcvd'] = "Not Received"; +$lang['filter_actions_not_rcvd'] = "未收到"; $lang['filter_actions_create_adif'] = '创建 ADIF'; $lang['filter_actions_print_label'] = '打印标签'; $lang['filter_actions_start_print_title'] = '打印标签'; $lang['filter_actions_print_include_via'] = "包含通过"; $lang['filter_actions_print_include_grid'] = '包含网格?'; -$lang['filter_actions_print_include_ref'] = "Include reference?(SIG, SOTA, POTA, IOTA, WWFF; If available in location)"; +$lang['filter_actions_print_include_ref'] = "包含标识代码?(SIG, SOTA, POTA, IOTA, WWFF; 如存在则显示)"; $lang['filter_actions_start_print'] = '开始打印编号'; $lang['filter_actions_print'] = '打印'; $lang['filter_actions_qsl_slideshow'] = 'QSL 展示窗'; diff --git a/application/language/chinese_simplified/general_words_lang.php b/application/language/chinese_simplified/general_words_lang.php index 9b1b20cf8..0644b5628 100644 --- a/application/language/chinese_simplified/general_words_lang.php +++ b/application/language/chinese_simplified/general_words_lang.php @@ -4,7 +4,7 @@ defined('BASEPATH') OR exit('No direct script access allowed'); $lang['error_no_active_station_profile'] = '注意:你需要设置一个活动的电台站地址'; -$lang['notice_turn_the_radio_on'] = '你今天还没进行QSO,是时候打开你的电台开始通联了!'; +$lang['notice_turn_the_radio_on'] = '你今天还没进行 QSO,是时候打开你的电台开始通联了!'; $lang['general_word_important'] = '重要'; $lang['general_word_warning'] = '注意'; @@ -45,7 +45,7 @@ $lang['general_word_location'] = '位置'; $lang['general_word_comment'] = '备注'; $lang['general_word_general'] = '通用'; $lang['general_word_satellite'] = '卫星'; -$lang['general_word_orbit'] = 'Orbit'; +$lang['general_word_orbit'] = '环绕'; $lang['general_word_satellite_short'] = '卫星'; $lang['general_word_notes'] = '笔记'; $lang['general_word_country'] = 'DXCC 实体'; diff --git a/application/language/chinese_simplified/lotw_lang.php b/application/language/chinese_simplified/lotw_lang.php index dcf9c54e5..b888984fa 100644 --- a/application/language/chinese_simplified/lotw_lang.php +++ b/application/language/chinese_simplified/lotw_lang.php @@ -55,8 +55,8 @@ $lang['lotw_p12_export_step_four'] = '在下方上传文件'; $lang['lotw_confirmed'] = '该 QSO 已在 LoTW 确认'; // LoTW Expiry -$lang['lotw_cert_expiring'] = '至少有一个LoTW证书即将过期!'; -$lang['lotw_cert_expired'] = '至少有一个LoTW证书已经过期!'; +$lang['lotw_cert_expiring'] = '至少有一个 LoTW 证书即将过期!'; +$lang['lotw_cert_expired'] = '至少有一个 LoTW 证书已经过期!'; // Lotw User $lang['lotw_user'] = '这个电台使用 LOTW'; diff --git a/application/language/chinese_simplified/menu_lang.php b/application/language/chinese_simplified/menu_lang.php index 765596331..1356b6705 100644 --- a/application/language/chinese_simplified/menu_lang.php +++ b/application/language/chinese_simplified/menu_lang.php @@ -9,14 +9,14 @@ $lang['menu_overview'] = '概览'; $lang['menu_advanced'] = '详细信息'; $lang['menu_qso'] = 'QSO'; -$lang['menu_live_qso'] = '添加QSO(实时)'; -$lang['menu_post_qso'] = '添加QSO(手动)'; -$lang['menu_fast_log_entry'] = "快速记录QSO"; +$lang['menu_live_qso'] = '添加 QSO(实时)'; +$lang['menu_post_qso'] = '添加 QSO(手动)'; +$lang['menu_fast_log_entry'] = "快速记录 QSO"; $lang['menu_live_contest_logging'] = '比赛日志(实时)'; $lang['menu_post_contest_logging'] = '比赛日志(手动)'; $lang['menu_bandmap'] = '波段地图'; -$lang['menu_view_qsl'] = '浏览QSL卡片'; -$lang['menu_view_eqsl'] = '浏览eQSL卡片'; +$lang['menu_view_qsl'] = '浏览 QSL 卡片'; +$lang['menu_view_eqsl'] = '浏览 eQSL 卡片'; $lang['menu_notes'] = '笔记'; diff --git a/application/language/chinese_simplified/options_lang.php b/application/language/chinese_simplified/options_lang.php index 687140fa3..1c7c9f04b 100644 --- a/application/language/chinese_simplified/options_lang.php +++ b/application/language/chinese_simplified/options_lang.php @@ -18,18 +18,18 @@ $lang['options_this_allows_the_map_on_the_dashboard_to_be_disabled_or_placed_on_ $lang['options_logbook_map'] = '日志地图'; $lang['options_this_allows_to_disable_the_map_in_the_logbook'] = '允许禁用日志中的地图。'; $lang['options_public_maps'] = "Public Maps"; -$lang['options_this_allows_to_disable_all_maps_in_the_public_view'] = "This allows to disable all maps in the public view. This affects the main map and the gridsquares map."; +$lang['options_this_allows_to_disable_all_maps_in_the_public_view'] = "选中以在公共视图中禁用地图,包括主地图和网格地图。"; $lang['options_radios'] = '电台'; $lang['options_radio_settings'] = '电台设置'; $lang['options_radio_timeout_warning'] = '电台连接超时警告'; -$lang['options_the_radio_timeout_warning_is_used_on_the_qso_entry_panel_to_alert_you_to_radio_interface_disconnects'] = '在QSO输入面板上使用电台连接超时警告,提醒您无线电接口断开。'; +$lang['options_the_radio_timeout_warning_is_used_on_the_qso_entry_panel_to_alert_you_to_radio_interface_disconnects'] = '在 QSO 输入面板上使用电台连接超时警告,提醒您无线电接口断开。'; $lang['options_this_number_is_in_seconds'] = '此数字以秒为单位。'; $lang['options_radio_timeout_warning_changed_to'] = '无线电超时警告更改为 '; $lang['options_email'] = '电子邮件'; $lang['options_outgoing_protocol'] = '传出协议'; -$lang['options_smtp_encryption'] = 'SMTP加密'; +$lang['options_smtp_encryption'] = 'SMTP 加密'; $lang['options_email_address'] = '电子邮件地址'; $lang['options_email_sender_name'] = '发件人姓名'; $lang['options_smtp_host'] = 'SMTP 主机'; @@ -51,14 +51,14 @@ $lang['options_send_testmail_hint'] = "邮件将会发送到填写在个人信 $lang['options_send_testmail_failed'] = "测试邮件发送失败,请检查设置"; $lang['options_send_testmail_success'] = "测试邮件发送成功,设置正常"; -$lang['options_oqrs'] = 'OQRS设置'; +$lang['options_oqrs'] = 'OQRS 设置'; $lang['options_global_text'] = '全局文本'; $lang['options_this_text_is_an_optional_text_that_can_be_displayed_on_top_of_the_oqrs_page'] = '该文本是一个可选文本,可以显示在OQRS页面的顶部。'; $lang['options_grouped_search'] = '分组搜索'; $lang['options_when_this_is_on_all_station_locations_with_oqrs_active_will_be_searched_at_once'] = '当此选项打开时,所有具有OQRS活动的电台位置将同时搜索'; $lang['options_grouped_search_show_station_name'] = "在分组搜索结果中显示台站名称"; $lang['options_grouped_search_show_station_name_hint'] = "如果分组搜索被启用,台站名称将会显示在表格当中"; -$lang['options_oqrs_options_have_been_saved'] = 'OQRS选项已保存'; +$lang['options_oqrs_options_have_been_saved'] = 'OQRS 选项已保存'; $lang['options_save'] = '保存'; $lang['options_dxcluster_provider'] = 'DXClusterCache 的信息来源'; @@ -85,7 +85,7 @@ $lang['options_version_dialog_mode_release_notes'] = "只有发布版的更新 $lang['options_version_dialog_mode_custom_text'] = "只有自定义文字"; $lang['options_version_dialog_mode_both'] = "发布版的更新内容和自定义文字"; $lang['options_version_dialog_mode_disabled'] = "禁用"; -$lang['options_version_dialog_mode_hint'] = "版本信息将会对所有用户显示. 用户可以选择在阅读后关闭对话框,选择是否显示GitHub上发布版的更新内容还是自定义文字,或者两者"; +$lang['options_version_dialog_mode_hint'] = "版本信息将会对所有用户显示. 用户可以选择在阅读后关闭对话框,选择是否显示 GitHub 上发布版的更新内容还是自定义文字,或者两者"; $lang['options_version_dialog_custom_text'] = "版本信息————自定义文字"; $lang['options_version_dialog_custom_text_hint'] = "自定义文字将会在对话框中显示"; $lang['options_version_dialog_mode_changed_to'] = "版本信息模式切换为"; @@ -112,11 +112,11 @@ $lang['options_bands_activateall_warning'] = "警告!你要启用所有波段 $lang['options_bands_deactivate_all'] = "停用所有"; $lang['options_bands_deactivateall_warning'] = "警告!你要停用所有波段吗?"; $lang['options_bands_ssb_qrg'] = "SSB 频率"; -$lang['options_bands_ssb_qrg_hint'] = "波段中 SSB 的频率(以Hz为单位)"; +$lang['options_bands_ssb_qrg_hint'] = "波段中 SSB 的频率(以 Hz 为单位)"; $lang['options_bands_data_qrg'] = "DATA 频率"; -$lang['options_bands_data_qrg_hint'] = "波段中 DATA 的频率(以Hz为单位)"; +$lang['options_bands_data_qrg_hint'] = "波段中 DATA 的频率(以 Hz 为单位)"; $lang['options_bands_cw_qrg'] = "CW 频率"; -$lang['options_bands_cw_qrg_hint'] = "波段中 CW 的频率(以Hz为单位)"; +$lang['options_bands_cw_qrg_hint'] = "波段中 CW 的频率(以 Hz 为单位)"; $lang['options_bands_name_band'] = "波段名称(例如:20m)"; $lang['options_bands_name_bandgroup'] = "频段名称(例如:HF、VHF、UHF、SHF)"; diff --git a/application/language/chinese_simplified/qslcard_lang.php b/application/language/chinese_simplified/qslcard_lang.php index 4ad77fd48..6dd2c381e 100644 --- a/application/language/chinese_simplified/qslcard_lang.php +++ b/application/language/chinese_simplified/qslcard_lang.php @@ -23,17 +23,17 @@ $lang['qslcard_upload_back'] = '上传 QSL 卡片背面图像'; $lang['qslcard_upload_button'] = '上传 QSL 卡片图像'; -$lang['qslcard_qslprint_header'] = "导出用于打印的QSL请求"; +$lang['qslcard_qslprint_header'] = "导出用于打印的 QSL 请求"; $lang['qslcard_qslprint_text_line1'] = "在这里,你可以导出QSL请求为 CSV 或 ADIF 文件用于打印,或者标记为已寄出"; -$lang['qslcard_qslprint_text_line2'] = "QSL请求是指'已请求'或'已排队'的QSL信息"; +$lang['qslcard_qslprint_text_line2'] = "QSL 请求是指'已请求'或'已排队'的 QSL 信息"; $lang['qslcard_qslprint_send_method'] = "发送方式"; $lang['qslcard_qslprint_mark_as_sent'] = "标记为'已发送’"; -$lang['qslcard_qslprint_mark_selected_as_printed'] = "标记选中的QSL信息为'已打印'"; -$lang['qslcard_qslprint_remove_selected_from_queue'] = "从队列中删除选中的QSL信息"; +$lang['qslcard_qslprint_mark_selected_as_printed'] = "标记选中的 QSL 信息为'已打印'"; +$lang['qslcard_qslprint_remove_selected_from_queue'] = "从队列中删除选中的 QSL 信息"; $lang['qslcard_qslprint_export_csv'] = "导出QSL请求为 CSV 文件"; $lang['qslcard_qslprint_export_adif'] = "导出QSL请求为 ADIF 文件"; -$lang['qslcard_qslprint_mark_requested_as_sent'] = "标记QSL请求为'已发送'"; -$lang['qslcard_qslprint_no_qsls_found'] = "没有找到需要打印的QSL信息"; +$lang['qslcard_qslprint_mark_requested_as_sent'] = "标记 QSL 请求为'已发送'"; +$lang['qslcard_qslprint_no_qsls_found'] = "没有找到需要打印的 QSL 信息"; $lang['qslcard_qslprint_add_to_queue'] = "添加到打印队列中"; -$lang['qslcard_qslprint_no_additional_qso_found'] = "没有找到附加的QSL信息,可能它们已经被添加到打印队列中"; +$lang['qslcard_qslprint_no_additional_qso_found'] = "没有找到附加的 QSL 信息,可能它们已经被添加到打印队列中"; diff --git a/application/language/chinese_simplified/qso_lang.php b/application/language/chinese_simplified/qso_lang.php index f38c1a20a..efc813895 100644 --- a/application/language/chinese_simplified/qso_lang.php +++ b/application/language/chinese_simplified/qso_lang.php @@ -18,7 +18,7 @@ $lang['qso_transmit_power_helptext'] = '以W为单位设置功率值。在输入 $lang['qso_sota_ref_helptext'] = '例如: GM/NS-001.'; $lang['qso_wwff_ref_helptext'] = '例如: DLFF-0069.'; -$lang['qso_pota_ref_helptext'] = '例如: PA-0150. Multiple values allowed.'; +$lang['qso_pota_ref_helptext'] = '例如: PA-0150. 可使用多个值'; $lang['qso_sig_helptext'] = '例如: GMA'; $lang['qso_sig_info_helptext'] = '例如: DA/NW-357'; @@ -35,8 +35,8 @@ $lang['qso_error_timeoff_less_timeon'] = "结束时间小于开始时间"; // Button Text on /qso Display -$lang['qso_btn_clear_qso'] = 'Clear'; -$lang['qso_btn_reset_to_default'] = 'Reset to Default'; +$lang['qso_btn_clear_qso'] = '清除'; +$lang['qso_btn_reset_to_default'] = '重置为默认'; $lang['qso_btn_save_qso'] = '保存 QSO'; $lang['qso_btn_edit_qso'] = '编辑 QSO'; $lang['qso_delete_warning'] = "警告!您确定要删除 QSO 和 "; @@ -64,13 +64,13 @@ $lang['qso_simplefle_operator'] = "操作员"; $lang['qso_simplefle_operator_hint'] = "例如 BA1AA"; $lang['qso_simplefle_station_call_location'] = "位置"; $lang['qso_simplefle_station_call_location_hint'] = "如果您确实在新位置进行操作,请首先创建一个新的电台站位置"; -$lang['qso_simplefle_utc_time'] = "当前UTC时间"; +$lang['qso_simplefle_utc_time'] = "当前 UTC 时间"; $lang['qso_simplefle_enter_the_data'] = "输入信息"; $lang['qso_simplefle_syntax_help_close_w_sample'] = "关闭并加载示例数据"; -$lang['qso_simplefle_reload'] = "重新加载QSO列表"; -$lang['qso_simplefle_save'] = "保存QSO列表"; +$lang['qso_simplefle_reload'] = "重新加载 QSO 列表"; +$lang['qso_simplefle_save'] = "保存 QSO 列表"; $lang['qso_simplefle_clear'] = "清除记录会话"; -$lang['qso_simplefle_refs_hint'] = "Refs 可以是 SOTA、IOTA、POTA 或 WWFF"; +$lang['qso_simplefle_refs_hint'] = "标识代码可以是 SOTA、IOTA、POTA 或 WWFF"; $lang['qso_simplefle_error_band'] = "找不到波段!"; $lang['qso_simplefle_error_mode'] = "找不到模式!"; @@ -94,7 +94,7 @@ $lang['qso_simplefle_syntax_help_ln3'] = "例如,如果您在 20m 上与 DF3CB $lang['qso_simplefle_syntax_help_ln4'] = "如果您不提供任何 RST 信息,语法将使用 59 (599 用于数据)。我们的下一个 QSO 不是双方都是 59,所以我们首先提供发送的 RST 信息。它比第一个 QSO 晚了 2 分钟。"; $lang['qso_simplefle_syntax_help_ln5'] = "第一个 QSO 是在 21:34,第二个 QSO 在 21:36,比第一个 QSO 晚了 2 分钟。我们写下 6,因为这是这里唯一改变的数据。关于波段和模式的信息没有改变,因此省略了这些数据。"; $lang['qso_simplefle_syntax_help_ln6'] = "我们的下一个 QSO 是在 2021 年 5 月 14 日的 21:40,我们将波段更改为 40m,但仍然在 SSB 上。如果没有给出 RST 信息,语法将为每个新的 QSO 使用 59。因此,我们可以添加另一个 QSO,它在两天后的同一时间发生。日期必须是 YYYY-MM-DD 格式。"; -$lang['qso_simplefle_syntax_help_ln7'] = "A full summary of all commands and the necessary syntax can be found in this article of our Wiki."; +$lang['qso_simplefle_syntax_help_ln7'] = "完整的可用指令和语法可在 Wavelog Wiki 中的 这篇文章 查看。"; $lang['qso_simplefle_syntax_help_ln8'] = ""; $lang['qso_simplefle_syntax_help_ln9'] = ""; diff --git a/application/language/chinese_simplified/station_lang.php b/application/language/chinese_simplified/station_lang.php index 418f180a5..c9fafa1d9 100644 --- a/application/language/chinese_simplified/station_lang.php +++ b/application/language/chinese_simplified/station_lang.php @@ -10,7 +10,7 @@ ________________________________________________________________________________ $lang['station_logbooks'] = "台站日志"; $lang['station_logbooks_description_header'] = "什么是台站日志"; -$lang['station_logbooks_description_text'] = "台站日志可以让您对自己的台站位置进行分组,这对在同一DXCC或VUCC下的不同站点位置非常方便"; +$lang['station_logbooks_description_text'] = "台站日志可以让您对自己的台站位置进行分组,这对在同一 DXCC 或 VUCC 下的不同站点位置非常方便"; $lang['station_logbooks_create'] = "新建台站日志"; $lang['station_logbooks_status'] = "状态"; $lang['station_logbooks_link'] = "链接"; @@ -46,75 +46,75 @@ Station Locations ___________________________________________________________________________________________ */ -$lang['station_location'] = 'Station Location'; -$lang['station_location_plural'] = "Station Locations"; -$lang['station_location_header_ln1'] = 'Station Locations define operating locations, such as your QTH, a friends QTH, or a portable station.'; -$lang['station_location_header_ln2'] = 'Similar to logbooks, a station profile keeps a set of QSOs together.'; -$lang['station_location_header_ln3'] = 'Only one station may be active at a time. In the table below this is shown with the -Active Station- badge.'; -$lang['station_location_create_header'] = 'Create Station Location'; -$lang['station_location_create'] = 'Create a Station Location'; -$lang['station_location_edit'] = 'Edit Station Location: '; -$lang['station_location_updated_suff'] = ' Updated.'; -$lang['station_location_warning'] = 'Attention: You need to set an active station location. Go to Callsign->Station Location to select one.'; -$lang['station_location_reassign_at'] = 'Please reassign them at '; -$lang['station_location_warning_reassign'] = 'Due to recent changes within Wavelog you need to reassign QSOs to your station profiles.'; +$lang['station_location'] = '台站地址'; +$lang['station_location_plural'] = "台站地址"; +$lang['station_location_header_ln1'] = '台站地址为电台使用地址,如您或朋友的 QTH,或移动台的地址'; +$lang['station_location_header_ln2'] = '和日志簿类似,一个台站地址为 QSO 集合的承载主体'; +$lang['station_location_header_ln3'] = '同一时间只允许启用一个台站地址,详见如下表格中的 -启用- 标志'; +$lang['station_location_create_header'] = '创建台站地址'; +$lang['station_location_create'] = '创建一个台站地址'; +$lang['station_location_edit'] = '修改台站地址:'; +$lang['station_location_updated_suff'] = ' 已更新'; +$lang['station_location_warning'] = '警告:应事先设置一个\'启用\'的台站地址,请在 \'呼号\'->\'台站地址\'中选择一个'; +$lang['station_location_reassign_at'] = '重新分配 '; +$lang['station_location_warning_reassign'] = '由于 Wavelog 设置更改,您需要重新在电台设置中重新分配 QSO'; $lang['station_location_id'] = 'ID'; -$lang['station_location_name'] = 'Profile Name'; -$lang['station_location_name_hint'] = 'Shortname for the station location. For example: Home (HM54ip)'; -$lang['station_location_callsign'] = 'Station Callsign'; -$lang['station_location_callsign_hint'] = 'Station callsign. For example: 4W7EST/P'; -$lang['station_location_power'] = 'Station Power (W)'; -$lang['station_location_power_hint'] = 'Default station power in Watt. Overwritten by CAT.'; -$lang['station_location_emptylog'] = 'Empty Log'; -$lang['station_location_confirm_active'] = 'Are you sure you want to make the following station the active station: '; -$lang['station_location_set_active'] = 'Set Active'; -$lang['station_location_active'] = 'Active Station'; -$lang['station_location_claim_ownership'] = 'Claim Ownership'; -$lang['station_location_confirm_del_qso'] = 'Are you sure you want to delete all QSOs within this station profile?'; -$lang['station_location_confirm_del_stationlocation'] = 'Are you sure you want delete station profile '; -$lang['station_location_confirm_del_stationlocation_qso'] = 'This will delete all QSOs within this station profile?'; -$lang['station_location_dxcc'] = 'Station DXCC'; -$lang['station_location_dxcc_hint'] = 'Station DXCC entity. For example: Scotland'; -$lang['station_location_dxcc_warning'] = "Stop here for a Moment. Your chosen DXCC is outdated and not valid anymore. Check which DXCC for this particular location is the correct one. If you are sure, ignore this warning."; -$lang['station_location_city'] = 'Station City'; -$lang['station_location_city_hint'] = 'Station city. For example: Inverness'; -$lang['station_location_state'] = 'Station State'; -$lang['station_location_state_hint'] = 'Station state. Applies to certain countries only. Leave blank if not applicable.'; -$lang['station_location_county'] = 'Station County'; -$lang['station_location_county_hint'] = 'Station County (Only used for USA/Alaska/Hawaii).'; -$lang['station_location_gridsquare'] = 'Station Gridsquare'; -$lang['station_location_gridsquare_hint_ln1'] = "Station gridsquare. For example: HM54ip. If you don't know your grid square then click here!"; -$lang['station_location_gridsquare_hint_ln2'] = "If you are located on a grid line, enter multiple grid squares separated with commas. For example: IO77,IO78,IO87,IO88."; -$lang['station_location_iota_hint_ln1'] = "Station IOTA reference. For example: EU-005"; -$lang['station_location_iota_hint_ln2'] = "You can look up IOTA references at the IOTA World website."; -$lang['station_location_sota_hint_ln1'] = "Station SOTA reference. You can look up SOTA references at the SOTA Maps website."; -$lang['station_location_wwff_hint_ln1'] = "Station WWFF reference. You can look up WWFF references at the GMA Map website."; -$lang['station_location_pota_hint_ln1'] = "Station POTA reference(s). Mulitple comma separated values allowed. You can look up POTA references at the POTA Map website."; -$lang['station_location_signature'] = "Signature"; -$lang['station_location_signature_name'] = "Signature Name"; -$lang['station_location_signature_name_hint'] = "Station Signature (e.g. GMA).."; -$lang['station_location_signature_info'] = "Signature Information"; -$lang['station_location_signature_info_hint'] = "Station Signature Info (e.g. DA/NW-357)."; -$lang['station_location_eqsl_hint'] = 'The QTH Nickname which is configured in your eQSL Profile'; -$lang['station_location_eqsl_defaultqslmsg'] = "Default QSLMSG"; -$lang['station_location_eqsl_defaultqslmsg_hint'] = "Define a default message that will be populated and sent for each QSO for this station location."; -$lang['station_location_qrz_subscription'] = 'Subscription Required'; -$lang['station_location_qrz_hint'] = "Find your API key on the QRZ.com Logbook settings page"; -$lang['station_location_qrz_realtime_upload'] = 'QRZ.com Logbook Upload'; -$lang['station_location_hrdlog_username'] = "HRDLog.net Username"; -$lang['station_location_hrdlog_username_hint'] = "The username you are registered with at HRDlog.net (usually your callsign)."; +$lang['station_location_name'] = '名称'; +$lang['station_location_name_hint'] = '自定义电台名称例如:家 (HM54ip)'; +$lang['station_location_callsign'] = '电台呼号'; +$lang['station_location_callsign_hint'] = '电台呼号,例如:4W7EST/P'; +$lang['station_location_power'] = '电台功率 (W)'; +$lang['station_location_power_hint'] = '默认电台功率 (W),如有 CAT 信息会覆盖此设置'; +$lang['station_location_emptylog'] = '日志为空'; +$lang['station_location_confirm_active'] = '确认将如下台站设为启用状态:'; +$lang['station_location_set_active'] = '设置启用'; +$lang['station_location_active'] = '启用的台站'; +$lang['station_location_claim_ownership'] = '宣称所有权'; +$lang['station_location_confirm_del_qso'] = '确认删除台站下的所有 QSO?'; +$lang['station_location_confirm_del_stationlocation'] = '确认删除该台站 '; +$lang['station_location_confirm_del_stationlocation_qso'] = '此操作会删除所有该台站的 QSO'; +$lang['station_location_dxcc'] = '台站 DXCC'; +$lang['station_location_dxcc_hint'] = '台站的 DXCC 实体,例如 China'; +$lang['station_location_dxcc_warning'] = "请稍等,您选择的 DXCC 已经失效,请确认最新的 DXCC 实体,如果您十分确认,请忽略该警告。"; +$lang['station_location_city'] = '台站城市'; +$lang['station_location_city_hint'] = '台站城市,例如 Beijing'; +$lang['station_location_state'] = '台站州/省'; +$lang['station_location_state_hint'] = '台站的州或省,如国家不适用请留空'; +$lang['station_location_county'] = '台站县'; +$lang['station_location_county_hint'] = '台站的县 (仅用于 美国本土/阿拉斯加/夏威夷)'; +$lang['station_location_gridsquare'] = '台站网格地址'; +$lang['station_location_gridsquare_hint_ln1'] = "台站网格地址,例如 HM54ip,可在 这里 查询自己的网格"; +$lang['station_location_gridsquare_hint_ln2'] = "如果处在网格线上,请输入逗号分隔的多个网格,例如:IO77,IO78,IO87,IO88"; +$lang['station_location_iota_hint_ln1'] = "台站 IOTA 标识代码,例如 EU-005"; +$lang['station_location_iota_hint_ln2'] = "查看 IOTA 名录:IOTA World"; +$lang['station_location_sota_hint_ln1'] = "台站 SOTA 标识代码,查看全部 SOTA:SOTA Maps"; +$lang['station_location_wwff_hint_ln1'] = "台站 WWFF 标识代码,查看 GMA Map"; +$lang['station_location_pota_hint_ln1'] = "台站 POTA 标识代码,允许多个逗号分隔值,POTA 地图:POTA Map"; +$lang['station_location_signature'] = "签名"; +$lang['station_location_signature_name'] = "签名名称"; +$lang['station_location_signature_name_hint'] = "台站签名 (例如 TU 73)"; +$lang['station_location_signature_info'] = "签名信息"; +$lang['station_location_signature_info_hint'] = "签名信息 (例如 DA/NW-357)."; +$lang['station_location_eqsl_hint'] = 'eQSL 中设置过的 QTH Nichname'; +$lang['station_location_eqsl_defaultqslmsg'] = "默认 QSL 消息"; +$lang['station_location_eqsl_defaultqslmsg_hint'] = "定义一个发送给对方的 QSO 默认消息(适用于 eQSL 等)"; +$lang['station_location_qrz_subscription'] = '需要付费订阅'; +$lang['station_location_qrz_hint'] = "查看 API Key:the QRZ.com Logbook 设置页面"; +$lang['station_location_qrz_realtime_upload'] = 'QRZ.com Logbook 上传'; +$lang['station_location_hrdlog_username'] = "HRDLog.net 用户名"; +$lang['station_location_hrdlog_username_hint'] = "HRDlog.net 注册用户名,通常为呼号"; $lang['station_location_hrdlog_code'] = "HRDLog.net API Key"; -$lang['station_location_hrdlog_realtime_upload'] = "HRDLog.net Logbook Realtime Upload"; -$lang['station_location_hrdlog_code_hint'] = "Create your API Code on HRDLog.net Userprofile page"; -$lang['station_location_qo100_hint'] = "Create your API key on your QO-100 Dx Club's profile page"; -$lang['station_location_qo100_realtime_upload'] = "QO-100 Dx Club Realtime Upload"; -$lang['station_location_oqrs_enabled'] = "OQRS Enabled"; -$lang['station_location_oqrs_email_alert'] = "OQRS Email alert"; -$lang['station_location_oqrs_email_hint'] = "Make sure email is set up under admin and global options."; -$lang['station_location_oqrs_text'] = "OQRS Text"; -$lang['station_location_oqrs_text_hint'] = "Some info you want to add regarding QSL'ing."; -$lang['station_location_ignore'] = "Ignore Clublog Upload"; -$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog."; -$lang['station_location_clublog_realtime_upload']='ClubLog Realtime Upload'; +$lang['station_location_hrdlog_realtime_upload'] = "HRDLog.net Logbook 实时上传"; +$lang['station_location_hrdlog_code_hint'] = "创建 API 代码:HRDLog.net 用户界面"; +$lang['station_location_qo100_hint'] = "创建 API 代码:your QO-100 Dx Club 用户界面"; +$lang['station_location_qo100_realtime_upload'] = "QO-100 Dx Club 实时上传"; +$lang['station_location_oqrs_enabled'] = "OQRS 已启用"; +$lang['station_location_oqrs_email_alert'] = "OQRS 邮件提醒"; +$lang['station_location_oqrs_email_hint'] = "确认邮件功能在站点设置中已配置"; +$lang['station_location_oqrs_text'] = "OQRS 文本"; +$lang['station_location_oqrs_text_hint'] = "QSL 信息"; +$lang['station_location_ignore'] = "忽略 Clublog 上传"; +$lang['station_location_ignore_hint'] = "如启用,此台站产生的 QSO 不会上传至 Clublog"; +$lang['station_location_clublog_realtime_upload']='ClubLog 实时上传'; From cdc00a0953702d417c83baa9b37c4614ae74d5c0 Mon Sep 17 00:00:00 2001 From: phl0 Date: Fri, 31 May 2024 08:27:07 +0200 Subject: [PATCH 111/154] Move hiding/showing of button to dataTable initComplete function --- assets/js/sections/hamsat.js | 115 +++++++++++++++++++---------------- 1 file changed, 63 insertions(+), 52 deletions(-) diff --git a/assets/js/sections/hamsat.js b/assets/js/sections/hamsat.js index e388dbe66..6aec87b5f 100644 --- a/assets/js/sections/hamsat.js +++ b/assets/js/sections/hamsat.js @@ -1,41 +1,60 @@ var hamsAtTimer; +var workableRows = 0; function loadHamsAt(show_workable_only) { - clearInterval(hamsAtTimer); - workable_only = show_workable_only.value; - if (feed_key_set > 1) { - if (workable_only == '1') { - $('#workable_hint').text("Only workable passes shown."); - $('#toggle_workable').prop('value', 0); - $('#toggle_workable').html('Show all passes'); - $('#toggle_workable').show() - } else { - $('#workable_hint').text("All passes shown."); - $('#toggle_workable').prop('value', 1); - $('#toggle_workable').html('Show workable passes only'); - $('#toggle_workable').show() - } - } + clearInterval(hamsAtTimer); + workable_only = show_workable_only.value; - $.ajax({ - dataType: "json", - url: base_url + 'index.php/hamsat/activations', - type: 'post', - success: function(result) { - loadActivationsTable(result, workable_only); - } - }); - obj = { - value: workable_only, - }; - hamsAtTimer = setInterval(function() { - loadHamsAt(obj); - }, 60000); + $.ajax({ + dataType: "json", + url: base_url + 'index.php/hamsat/activations', + type: 'post', + success: function(result) { + loadActivationsTable(result, workable_only); + } + }); + obj = { + value: workable_only, + }; + hamsAtTimer = setInterval(function() { + loadHamsAt(obj); + }, 60000); +} + +function configureButton(rowLength) { + if (feed_key_set > 1) { + if (workableRows != rowLength) { + if (workable_only == '1') { + $('#workable_hint').text("Only workable passes shown."); + $('#toggle_workable').prop('value', 0); + if (rowLength > workableRows) { + $('#toggle_workable').html('Show all passes ('+rowLength+')'); + } else { + $('#toggle_workable').html('Show all passes'); + } + $('#toggle_workable').show() + } else { + $('#workable_hint').text("All passes shown."); + $('#toggle_workable').prop('value', 1); + if (workableRows < rowLength) { + $('#toggle_workable').html('Show workable passes only ('+workableRows+')'); + } else { + $('#toggle_workable').html('Show workable passes only'); + } + $('#toggle_workable').show() + } + } + } } function loadActivationsTable(rows, show_workable_only) { var uninitialized = $('#activationsList').filter(function() { - return !$.fn.DataTable.fnIsDataTable(this); + if ($.fn.DataTable.fnIsDataTable(this)) { + return false; + } else { + configureButton(rows.length); + return true; + } }); $.fn.dataTable.ext.buttons.clear = { @@ -69,13 +88,18 @@ function loadActivationsTable(rows, show_workable_only) { text: lang_admin_clear }, ], + initComplete: function () { + configureButton(rows.length); + }, }); }); + configureButton(rows.length); + var table = $('#activationsList').DataTable(); table.clear(); - workable_rows = 0; + workableRows = 0; for (i = 0; i < rows.length; i++) { let activation = rows[i]; @@ -84,7 +108,7 @@ function loadActivationsTable(rows, show_workable_only) { continue; } else { if (activation.is_workable == true) { - workable_rows++; + workableRows++; } } @@ -137,29 +161,16 @@ function loadActivationsTable(rows, show_workable_only) { table.rows(createdRow).nodes().to$().data('activationID', activation.id); table.row(createdRow).node().id = 'activationID-' + activation.id; } - if (workable_rows == rows.length) { - $('#toggle_workable').hide(); - $('#workable_hint').hide(); - } - if (workable_only == '1') { - if (rows.length > workable_rows) { - $('#toggle_workable').html('Show all passes ('+rows.length+')'); - } - } else { - if (workable_rows < rows.length) { - $('#toggle_workable').html('Show workable passes only ('+workable_rows+')'); - } - } table.draw(); $('[data-bs-toggle="tooltip"]').tooltip(); } $(document).ready(function() { - const obj = { - value: workable_preset, - }; - loadHamsAt(obj); - hamsAtTimer = setInterval(function() { - loadHamsAt(obj); - }, 60000); + const obj = { + value: workable_preset, + }; + loadHamsAt(obj); + hamsAtTimer = setInterval(function() { + loadHamsAt(obj); + }, 60000); }); From 01aa4a36591c992a411279ae31439bbfe5b67d9b Mon Sep 17 00:00:00 2001 From: HB9HIL Date: Fri, 31 May 2024 12:51:42 +0200 Subject: [PATCH 112/154] use sessiodata for map_custom instead ajax --- application/controllers/User_options.php | 12 ----------- application/libraries/OptionsLib.php | 19 ++++++++++++++++++ application/models/User_model.php | 1 + application/views/interface_assets/header.php | 3 +++ assets/js/leaflet/leafembed.js | 20 ++++++++++--------- assets/js/sections/logbookadvanced_map.js | 18 +++++------------ 6 files changed, 39 insertions(+), 34 deletions(-) diff --git a/application/controllers/User_options.php b/application/controllers/User_options.php index d3a823e7d..a74cfcec5 100755 --- a/application/controllers/User_options.php +++ b/application/controllers/User_options.php @@ -47,18 +47,6 @@ class User_Options extends CI_Controller { echo json_encode($jsonout); } - // [MAP Custom] // - public function get_map_custom() { - $result=$this->user_options_model->get_options('map_custom'); - $jsonout=[]; - foreach($result->result() as $options) { - if ($options->option_name=='icon') $jsonout[$options->option_key]=json_decode($options->option_value,true); - else $jsonout[$options->option_name.'_'.$options->option_key]=$options->option_value; - } - header('Content-Type: application/json'); - echo json_encode($jsonout); - } - public function dismissVersionDialog() { $this->user_options_model->set_option('version_dialog', 'confirmed', array('boolean' => 'true')); } diff --git a/application/libraries/OptionsLib.php b/application/libraries/OptionsLib.php index d53d2aad3..f652acebd 100644 --- a/application/libraries/OptionsLib.php +++ b/application/libraries/OptionsLib.php @@ -138,4 +138,23 @@ class OptionsLib { } } + function get_map_custom() { + + $CI =& get_instance(); + + $jsonout = []; + + $result = $CI->user_options_model->get_options('map_custom'); + + foreach($result->result() as $options) { + if ($options->option_name == 'icon') { + $jsonout[$options->option_key] = json_decode($options->option_value,true); + } else { + $jsonout[$options->option_name.'_'.$options->option_key]=$options->option_value; + } + } + + return json_encode($jsonout); + } + } diff --git a/application/models/User_model.php b/application/models/User_model.php index 7ef0e36cb..71b2820e9 100644 --- a/application/models/User_model.php +++ b/application/models/User_model.php @@ -437,6 +437,7 @@ class User_Model extends CI_Model { 'user_column3' => isset($u->row()->user_column3) ? $u->row()->user_column3: 'RSTR', 'user_column4' => isset($u->row()->user_column4) ? $u->row()->user_column4: 'Band', 'user_column5' => isset($u->row()->user_column5) ? $u->row()->user_column5: 'Country', + 'user_map_custom' => $this->optionslib->get_map_custom(), 'user_previous_qsl_type' => isset($u->row()->user_previous_qsl_type) ? $u->row()->user_previous_qsl_type: 0, 'user_amsat_status_upload' => isset($u->row()->user_amsat_status_upload) ? $u->row()->user_amsat_status_upload: 0, 'user_mastodon_url' => $u->row()->user_mastodon_url, diff --git a/application/views/interface_assets/header.php b/application/views/interface_assets/header.php index 01a6b7152..252af27ec 100644 --- a/application/views/interface_assets/header.php +++ b/application/views/interface_assets/header.php @@ -55,6 +55,9 @@

DateTimeTime Call Mode SentCOL_TIME_ON); echo date($custom_date_format, $timestamp); ?>COL_TIME_ON); echo date('H:i', $timestamp); ?>COL_TIME_ON); echo date('H:i', $timestamp); ?> COL_CALL)); ?> COL_SUBMODE==null?$row->COL_MODE:$row->COL_SUBMODE; ?> COL_RST_SENT; ?> COL_STX_STRING) { ?>(COL_STX_STRING;?>)