Version Description
- Added some missing CSS and JS files.
Download this release
Release Info
Developer | shubham773 |
Plugin | SendinBlue Subscribe Form And WP SMTP |
Version | 3.1.39 |
Comparing to | |
See all releases |
Code changes from version 3.1.38 to 3.1.39
- inc/SendinblueApiClient.php +5 -5
- inc/templates/test/temp.html +1 -1
- inc/templates/test/temp_fr-FR.html +1 -1
- js/bootstrap/css/bootstrap-theme.css +0 -587
- js/bootstrap/css/bootstrap-theme.css.map +0 -1
- js/bootstrap/css/bootstrap-theme.min.css +0 -6
- js/bootstrap/css/bootstrap.min.css.map +1 -0
- js/bootstrap/fonts/glyphicons-halflings-regular.woff2 +0 -0
- js/bootstrap/js/bootstrap.bundle.js +6812 -0
- js/bootstrap/js/bootstrap.bundle.min.js +7 -0
- model/model-users.php +1 -1
- page/page-form.php +949 -949
- page/page-home.php +804 -809
inc/SendinblueApiClient.php
CHANGED
@@ -14,7 +14,7 @@ class SendinblueApiClient
|
|
14 |
const RESPONSE_CODE_CREATED = 201;
|
15 |
const RESPONSE_CODE_ACCEPTED = 202;
|
16 |
const RESPONSE_CODE_UNAUTHORIZED = 401;
|
17 |
-
const PLUGIN_VERSION = '3.1.
|
18 |
const USER_AGENT = 'sendinblue_plugins/wordpress';
|
19 |
|
20 |
private $apiKey;
|
@@ -234,12 +234,12 @@ class SendinblueApiClient
|
|
234 |
return $lists;
|
235 |
}
|
236 |
|
237 |
-
|
238 |
* @param $data
|
239 |
* @return mixed
|
240 |
*/
|
241 |
public function createFolder($data)
|
242 |
-
{
|
243 |
return $this->post("/contacts/folders", $data);
|
244 |
}
|
245 |
|
@@ -389,7 +389,7 @@ class SendinblueApiClient
|
|
389 |
|
390 |
/**
|
391 |
* @param $data
|
392 |
-
* @return mixed all template list
|
393 |
*/
|
394 |
public function getAllEmailTemplates() {
|
395 |
$templates = array(
|
@@ -413,7 +413,7 @@ class SendinblueApiClient
|
|
413 |
$offset += 50;
|
414 |
} while ( ! empty( $templates['templates'] ) && count( $templates['templates'] ) < $template_data['count'] );
|
415 |
$templates['count'] = count( $templates['templates'] );
|
416 |
-
|
417 |
return $templates;
|
418 |
}
|
419 |
}
|
14 |
const RESPONSE_CODE_CREATED = 201;
|
15 |
const RESPONSE_CODE_ACCEPTED = 202;
|
16 |
const RESPONSE_CODE_UNAUTHORIZED = 401;
|
17 |
+
const PLUGIN_VERSION = '3.1.39';
|
18 |
const USER_AGENT = 'sendinblue_plugins/wordpress';
|
19 |
|
20 |
private $apiKey;
|
234 |
return $lists;
|
235 |
}
|
236 |
|
237 |
+
/**
|
238 |
* @param $data
|
239 |
* @return mixed
|
240 |
*/
|
241 |
public function createFolder($data)
|
242 |
+
{
|
243 |
return $this->post("/contacts/folders", $data);
|
244 |
}
|
245 |
|
389 |
|
390 |
/**
|
391 |
* @param $data
|
392 |
+
* @return mixed all template list
|
393 |
*/
|
394 |
public function getAllEmailTemplates() {
|
395 |
$templates = array(
|
413 |
$offset += 50;
|
414 |
} while ( ! empty( $templates['templates'] ) && count( $templates['templates'] ) < $template_data['count'] );
|
415 |
$templates['count'] = count( $templates['templates'] );
|
416 |
+
|
417 |
return $templates;
|
418 |
}
|
419 |
}
|
inc/templates/test/temp.html
CHANGED
@@ -140,4 +140,4 @@
|
|
140 |
<br>
|
141 |
</div>
|
142 |
</body>
|
143 |
-
</html>
|
140 |
<br>
|
141 |
</div>
|
142 |
</body>
|
143 |
+
</html>
|
inc/templates/test/temp_fr-FR.html
CHANGED
@@ -145,4 +145,4 @@
|
|
145 |
<br>
|
146 |
</div>
|
147 |
</body>
|
148 |
-
</html>
|
145 |
<br>
|
146 |
</div>
|
147 |
</body>
|
148 |
+
</html>
|
js/bootstrap/css/bootstrap-theme.css
DELETED
@@ -1,587 +0,0 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap v3.4.1 (https://getbootstrap.com/)
|
3 |
-
* Copyright 2011-2019 Twitter, Inc.
|
4 |
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5 |
-
*/
|
6 |
-
.btn-default,
|
7 |
-
.btn-primary,
|
8 |
-
.btn-success,
|
9 |
-
.btn-info,
|
10 |
-
.btn-warning,
|
11 |
-
.btn-danger {
|
12 |
-
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
|
13 |
-
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
|
14 |
-
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
|
15 |
-
}
|
16 |
-
.btn-default:active,
|
17 |
-
.btn-primary:active,
|
18 |
-
.btn-success:active,
|
19 |
-
.btn-info:active,
|
20 |
-
.btn-warning:active,
|
21 |
-
.btn-danger:active,
|
22 |
-
.btn-default.active,
|
23 |
-
.btn-primary.active,
|
24 |
-
.btn-success.active,
|
25 |
-
.btn-info.active,
|
26 |
-
.btn-warning.active,
|
27 |
-
.btn-danger.active {
|
28 |
-
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
|
29 |
-
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
|
30 |
-
}
|
31 |
-
.btn-default.disabled,
|
32 |
-
.btn-primary.disabled,
|
33 |
-
.btn-success.disabled,
|
34 |
-
.btn-info.disabled,
|
35 |
-
.btn-warning.disabled,
|
36 |
-
.btn-danger.disabled,
|
37 |
-
.btn-default[disabled],
|
38 |
-
.btn-primary[disabled],
|
39 |
-
.btn-success[disabled],
|
40 |
-
.btn-info[disabled],
|
41 |
-
.btn-warning[disabled],
|
42 |
-
.btn-danger[disabled],
|
43 |
-
fieldset[disabled] .btn-default,
|
44 |
-
fieldset[disabled] .btn-primary,
|
45 |
-
fieldset[disabled] .btn-success,
|
46 |
-
fieldset[disabled] .btn-info,
|
47 |
-
fieldset[disabled] .btn-warning,
|
48 |
-
fieldset[disabled] .btn-danger {
|
49 |
-
-webkit-box-shadow: none;
|
50 |
-
box-shadow: none;
|
51 |
-
}
|
52 |
-
.btn-default .badge,
|
53 |
-
.btn-primary .badge,
|
54 |
-
.btn-success .badge,
|
55 |
-
.btn-info .badge,
|
56 |
-
.btn-warning .badge,
|
57 |
-
.btn-danger .badge {
|
58 |
-
text-shadow: none;
|
59 |
-
}
|
60 |
-
.btn:active,
|
61 |
-
.btn.active {
|
62 |
-
background-image: none;
|
63 |
-
}
|
64 |
-
.btn-default {
|
65 |
-
background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
|
66 |
-
background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
|
67 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
|
68 |
-
background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
|
69 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
|
70 |
-
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
71 |
-
background-repeat: repeat-x;
|
72 |
-
border-color: #dbdbdb;
|
73 |
-
text-shadow: 0 1px 0 #fff;
|
74 |
-
border-color: #ccc;
|
75 |
-
}
|
76 |
-
.btn-default:hover,
|
77 |
-
.btn-default:focus {
|
78 |
-
background-color: #e0e0e0;
|
79 |
-
background-position: 0 -15px;
|
80 |
-
}
|
81 |
-
.btn-default:active,
|
82 |
-
.btn-default.active {
|
83 |
-
background-color: #e0e0e0;
|
84 |
-
border-color: #dbdbdb;
|
85 |
-
}
|
86 |
-
.btn-default.disabled,
|
87 |
-
.btn-default[disabled],
|
88 |
-
fieldset[disabled] .btn-default,
|
89 |
-
.btn-default.disabled:hover,
|
90 |
-
.btn-default[disabled]:hover,
|
91 |
-
fieldset[disabled] .btn-default:hover,
|
92 |
-
.btn-default.disabled:focus,
|
93 |
-
.btn-default[disabled]:focus,
|
94 |
-
fieldset[disabled] .btn-default:focus,
|
95 |
-
.btn-default.disabled.focus,
|
96 |
-
.btn-default[disabled].focus,
|
97 |
-
fieldset[disabled] .btn-default.focus,
|
98 |
-
.btn-default.disabled:active,
|
99 |
-
.btn-default[disabled]:active,
|
100 |
-
fieldset[disabled] .btn-default:active,
|
101 |
-
.btn-default.disabled.active,
|
102 |
-
.btn-default[disabled].active,
|
103 |
-
fieldset[disabled] .btn-default.active {
|
104 |
-
background-color: #e0e0e0;
|
105 |
-
background-image: none;
|
106 |
-
}
|
107 |
-
.btn-primary {
|
108 |
-
background-image: -webkit-linear-gradient(top, #044A75 0%, #2d6ca2 100%);
|
109 |
-
background-image: -o-linear-gradient(top, #044A75 0%, #2d6ca2 100%);
|
110 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#044A75), to(#2d6ca2));
|
111 |
-
background-image: linear-gradient(to bottom, #044A75 0%, #2d6ca2 100%);
|
112 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
|
113 |
-
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
114 |
-
background-repeat: repeat-x;
|
115 |
-
border-color: #245580;
|
116 |
-
}
|
117 |
-
.btn-primary:hover,
|
118 |
-
.btn-primary:focus {
|
119 |
-
background-color: #2d6ca2;
|
120 |
-
background-position: 0 -15px;
|
121 |
-
}
|
122 |
-
.btn-primary:active,
|
123 |
-
.btn-primary.active {
|
124 |
-
background-color: #2d6ca2;
|
125 |
-
border-color: #245580;
|
126 |
-
}
|
127 |
-
.btn-primary.disabled,
|
128 |
-
.btn-primary[disabled],
|
129 |
-
fieldset[disabled] .btn-primary,
|
130 |
-
.btn-primary.disabled:hover,
|
131 |
-
.btn-primary[disabled]:hover,
|
132 |
-
fieldset[disabled] .btn-primary:hover,
|
133 |
-
.btn-primary.disabled:focus,
|
134 |
-
.btn-primary[disabled]:focus,
|
135 |
-
fieldset[disabled] .btn-primary:focus,
|
136 |
-
.btn-primary.disabled.focus,
|
137 |
-
.btn-primary[disabled].focus,
|
138 |
-
fieldset[disabled] .btn-primary.focus,
|
139 |
-
.btn-primary.disabled:active,
|
140 |
-
.btn-primary[disabled]:active,
|
141 |
-
fieldset[disabled] .btn-primary:active,
|
142 |
-
.btn-primary.disabled.active,
|
143 |
-
.btn-primary[disabled].active,
|
144 |
-
fieldset[disabled] .btn-primary.active {
|
145 |
-
background-color: #265a88;
|
146 |
-
background-image: none;
|
147 |
-
}
|
148 |
-
.btn-success {
|
149 |
-
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
|
150 |
-
background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
|
151 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
|
152 |
-
background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
|
153 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
|
154 |
-
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
155 |
-
background-repeat: repeat-x;
|
156 |
-
border-color: #3e8f3e;
|
157 |
-
}
|
158 |
-
.btn-success:hover,
|
159 |
-
.btn-success:focus {
|
160 |
-
background-color: #419641;
|
161 |
-
background-position: 0 -15px;
|
162 |
-
}
|
163 |
-
.btn-success:active,
|
164 |
-
.btn-success.active {
|
165 |
-
background-color: #419641;
|
166 |
-
border-color: #3e8f3e;
|
167 |
-
}
|
168 |
-
.btn-success.disabled,
|
169 |
-
.btn-success[disabled],
|
170 |
-
fieldset[disabled] .btn-success,
|
171 |
-
.btn-success.disabled:hover,
|
172 |
-
.btn-success[disabled]:hover,
|
173 |
-
fieldset[disabled] .btn-success:hover,
|
174 |
-
.btn-success.disabled:focus,
|
175 |
-
.btn-success[disabled]:focus,
|
176 |
-
fieldset[disabled] .btn-success:focus,
|
177 |
-
.btn-success.disabled.focus,
|
178 |
-
.btn-success[disabled].focus,
|
179 |
-
fieldset[disabled] .btn-success.focus,
|
180 |
-
.btn-success.disabled:active,
|
181 |
-
.btn-success[disabled]:active,
|
182 |
-
fieldset[disabled] .btn-success:active,
|
183 |
-
.btn-success.disabled.active,
|
184 |
-
.btn-success[disabled].active,
|
185 |
-
fieldset[disabled] .btn-success.active {
|
186 |
-
background-color: #419641;
|
187 |
-
background-image: none;
|
188 |
-
}
|
189 |
-
.btn-info {
|
190 |
-
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
|
191 |
-
background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
|
192 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
|
193 |
-
background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
|
194 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
|
195 |
-
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
196 |
-
background-repeat: repeat-x;
|
197 |
-
border-color: #28a4c9;
|
198 |
-
}
|
199 |
-
.btn-info:hover,
|
200 |
-
.btn-info:focus {
|
201 |
-
background-color: #2aabd2;
|
202 |
-
background-position: 0 -15px;
|
203 |
-
}
|
204 |
-
.btn-info:active,
|
205 |
-
.btn-info.active {
|
206 |
-
background-color: #2aabd2;
|
207 |
-
border-color: #28a4c9;
|
208 |
-
}
|
209 |
-
.btn-info.disabled,
|
210 |
-
.btn-info[disabled],
|
211 |
-
fieldset[disabled] .btn-info,
|
212 |
-
.btn-info.disabled:hover,
|
213 |
-
.btn-info[disabled]:hover,
|
214 |
-
fieldset[disabled] .btn-info:hover,
|
215 |
-
.btn-info.disabled:focus,
|
216 |
-
.btn-info[disabled]:focus,
|
217 |
-
fieldset[disabled] .btn-info:focus,
|
218 |
-
.btn-info.disabled.focus,
|
219 |
-
.btn-info[disabled].focus,
|
220 |
-
fieldset[disabled] .btn-info.focus,
|
221 |
-
.btn-info.disabled:active,
|
222 |
-
.btn-info[disabled]:active,
|
223 |
-
fieldset[disabled] .btn-info:active,
|
224 |
-
.btn-info.disabled.active,
|
225 |
-
.btn-info[disabled].active,
|
226 |
-
fieldset[disabled] .btn-info.active {
|
227 |
-
background-color: #2aabd2;
|
228 |
-
background-image: none;
|
229 |
-
}
|
230 |
-
.btn-warning {
|
231 |
-
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
|
232 |
-
background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
|
233 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
|
234 |
-
background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
|
235 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
|
236 |
-
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
237 |
-
background-repeat: repeat-x;
|
238 |
-
border-color: #e38d13;
|
239 |
-
}
|
240 |
-
.btn-warning:hover,
|
241 |
-
.btn-warning:focus {
|
242 |
-
background-color: #eb9316;
|
243 |
-
background-position: 0 -15px;
|
244 |
-
}
|
245 |
-
.btn-warning:active,
|
246 |
-
.btn-warning.active {
|
247 |
-
background-color: #eb9316;
|
248 |
-
border-color: #e38d13;
|
249 |
-
}
|
250 |
-
.btn-warning.disabled,
|
251 |
-
.btn-warning[disabled],
|
252 |
-
fieldset[disabled] .btn-warning,
|
253 |
-
.btn-warning.disabled:hover,
|
254 |
-
.btn-warning[disabled]:hover,
|
255 |
-
fieldset[disabled] .btn-warning:hover,
|
256 |
-
.btn-warning.disabled:focus,
|
257 |
-
.btn-warning[disabled]:focus,
|
258 |
-
fieldset[disabled] .btn-warning:focus,
|
259 |
-
.btn-warning.disabled.focus,
|
260 |
-
.btn-warning[disabled].focus,
|
261 |
-
fieldset[disabled] .btn-warning.focus,
|
262 |
-
.btn-warning.disabled:active,
|
263 |
-
.btn-warning[disabled]:active,
|
264 |
-
fieldset[disabled] .btn-warning:active,
|
265 |
-
.btn-warning.disabled.active,
|
266 |
-
.btn-warning[disabled].active,
|
267 |
-
fieldset[disabled] .btn-warning.active {
|
268 |
-
background-color: #eb9316;
|
269 |
-
background-image: none;
|
270 |
-
}
|
271 |
-
.btn-danger {
|
272 |
-
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
|
273 |
-
background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
|
274 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
|
275 |
-
background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
|
276 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
|
277 |
-
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
278 |
-
background-repeat: repeat-x;
|
279 |
-
border-color: #b92c28;
|
280 |
-
}
|
281 |
-
.btn-danger:hover,
|
282 |
-
.btn-danger:focus {
|
283 |
-
background-color: #c12e2a;
|
284 |
-
background-position: 0 -15px;
|
285 |
-
}
|
286 |
-
.btn-danger:active,
|
287 |
-
.btn-danger.active {
|
288 |
-
background-color: #c12e2a;
|
289 |
-
border-color: #b92c28;
|
290 |
-
}
|
291 |
-
.btn-danger.disabled,
|
292 |
-
.btn-danger[disabled],
|
293 |
-
fieldset[disabled] .btn-danger,
|
294 |
-
.btn-danger.disabled:hover,
|
295 |
-
.btn-danger[disabled]:hover,
|
296 |
-
fieldset[disabled] .btn-danger:hover,
|
297 |
-
.btn-danger.disabled:focus,
|
298 |
-
.btn-danger[disabled]:focus,
|
299 |
-
fieldset[disabled] .btn-danger:focus,
|
300 |
-
.btn-danger.disabled.focus,
|
301 |
-
.btn-danger[disabled].focus,
|
302 |
-
fieldset[disabled] .btn-danger.focus,
|
303 |
-
.btn-danger.disabled:active,
|
304 |
-
.btn-danger[disabled]:active,
|
305 |
-
fieldset[disabled] .btn-danger:active,
|
306 |
-
.btn-danger.disabled.active,
|
307 |
-
.btn-danger[disabled].active,
|
308 |
-
fieldset[disabled] .btn-danger.active {
|
309 |
-
background-color: #c12e2a;
|
310 |
-
background-image: none;
|
311 |
-
}
|
312 |
-
.thumbnail,
|
313 |
-
.img-thumbnail {
|
314 |
-
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
|
315 |
-
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
|
316 |
-
}
|
317 |
-
.dropdown-menu > li > a:hover,
|
318 |
-
.dropdown-menu > li > a:focus {
|
319 |
-
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
320 |
-
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
321 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
|
322 |
-
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
|
323 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
|
324 |
-
background-repeat: repeat-x;
|
325 |
-
background-color: #e8e8e8;
|
326 |
-
}
|
327 |
-
.dropdown-menu > .active > a,
|
328 |
-
.dropdown-menu > .active > a:hover,
|
329 |
-
.dropdown-menu > .active > a:focus {
|
330 |
-
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
331 |
-
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
332 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
|
333 |
-
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
|
334 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
|
335 |
-
background-repeat: repeat-x;
|
336 |
-
background-color: #2e6da4;
|
337 |
-
}
|
338 |
-
.navbar-default {
|
339 |
-
background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
|
340 |
-
background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
|
341 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f8f8f8));
|
342 |
-
background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);
|
343 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
|
344 |
-
background-repeat: repeat-x;
|
345 |
-
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
346 |
-
border-radius: 4px;
|
347 |
-
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
|
348 |
-
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
|
349 |
-
}
|
350 |
-
.navbar-default .navbar-nav > .open > a,
|
351 |
-
.navbar-default .navbar-nav > .active > a {
|
352 |
-
background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
|
353 |
-
background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
|
354 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
|
355 |
-
background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
|
356 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
|
357 |
-
background-repeat: repeat-x;
|
358 |
-
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
|
359 |
-
box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
|
360 |
-
}
|
361 |
-
.navbar-brand,
|
362 |
-
.navbar-nav > li > a {
|
363 |
-
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
|
364 |
-
}
|
365 |
-
.navbar-inverse {
|
366 |
-
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
|
367 |
-
background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
|
368 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
|
369 |
-
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
|
370 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
|
371 |
-
background-repeat: repeat-x;
|
372 |
-
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
373 |
-
border-radius: 4px;
|
374 |
-
}
|
375 |
-
.navbar-inverse .navbar-nav > .open > a,
|
376 |
-
.navbar-inverse .navbar-nav > .active > a {
|
377 |
-
background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
|
378 |
-
background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
|
379 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
|
380 |
-
background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
|
381 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
|
382 |
-
background-repeat: repeat-x;
|
383 |
-
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
|
384 |
-
box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
|
385 |
-
}
|
386 |
-
.navbar-inverse .navbar-brand,
|
387 |
-
.navbar-inverse .navbar-nav > li > a {
|
388 |
-
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
389 |
-
}
|
390 |
-
.navbar-static-top,
|
391 |
-
.navbar-fixed-top,
|
392 |
-
.navbar-fixed-bottom {
|
393 |
-
border-radius: 0;
|
394 |
-
}
|
395 |
-
@media (max-width: 767px) {
|
396 |
-
.navbar .navbar-nav .open .dropdown-menu > .active > a,
|
397 |
-
.navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
|
398 |
-
.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
|
399 |
-
color: #fff;
|
400 |
-
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
401 |
-
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
402 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
|
403 |
-
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
|
404 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
|
405 |
-
background-repeat: repeat-x;
|
406 |
-
}
|
407 |
-
}
|
408 |
-
.alert {
|
409 |
-
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);
|
410 |
-
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
|
411 |
-
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
|
412 |
-
}
|
413 |
-
.alert-success {
|
414 |
-
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
|
415 |
-
background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
|
416 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
|
417 |
-
background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
|
418 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
|
419 |
-
background-repeat: repeat-x;
|
420 |
-
border-color: #b2dba1;
|
421 |
-
}
|
422 |
-
.alert-info {
|
423 |
-
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
|
424 |
-
background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
|
425 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
|
426 |
-
background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
|
427 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
|
428 |
-
background-repeat: repeat-x;
|
429 |
-
border-color: #9acfea;
|
430 |
-
}
|
431 |
-
.alert-warning {
|
432 |
-
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
|
433 |
-
background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
|
434 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
|
435 |
-
background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
|
436 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
|
437 |
-
background-repeat: repeat-x;
|
438 |
-
border-color: #f5e79e;
|
439 |
-
}
|
440 |
-
.alert-danger {
|
441 |
-
background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
|
442 |
-
background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
|
443 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
|
444 |
-
background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
|
445 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
|
446 |
-
background-repeat: repeat-x;
|
447 |
-
border-color: #dca7a7;
|
448 |
-
}
|
449 |
-
.progress {
|
450 |
-
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
|
451 |
-
background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
|
452 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
|
453 |
-
background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
|
454 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
|
455 |
-
background-repeat: repeat-x;
|
456 |
-
}
|
457 |
-
.progress-bar {
|
458 |
-
background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
|
459 |
-
background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
|
460 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
|
461 |
-
background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
|
462 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
|
463 |
-
background-repeat: repeat-x;
|
464 |
-
}
|
465 |
-
.progress-bar-success {
|
466 |
-
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
|
467 |
-
background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
|
468 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
|
469 |
-
background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
|
470 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
|
471 |
-
background-repeat: repeat-x;
|
472 |
-
}
|
473 |
-
.progress-bar-info {
|
474 |
-
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
|
475 |
-
background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
|
476 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
|
477 |
-
background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
|
478 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
|
479 |
-
background-repeat: repeat-x;
|
480 |
-
}
|
481 |
-
.progress-bar-warning {
|
482 |
-
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
|
483 |
-
background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
|
484 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
|
485 |
-
background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
|
486 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
|
487 |
-
background-repeat: repeat-x;
|
488 |
-
}
|
489 |
-
.progress-bar-danger {
|
490 |
-
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
|
491 |
-
background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
|
492 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
|
493 |
-
background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
|
494 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
|
495 |
-
background-repeat: repeat-x;
|
496 |
-
}
|
497 |
-
.progress-bar-striped {
|
498 |
-
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
499 |
-
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
500 |
-
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
501 |
-
}
|
502 |
-
.list-group {
|
503 |
-
border-radius: 4px;
|
504 |
-
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
|
505 |
-
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
|
506 |
-
}
|
507 |
-
.list-group-item.active,
|
508 |
-
.list-group-item.active:hover,
|
509 |
-
.list-group-item.active:focus {
|
510 |
-
text-shadow: 0 -1px 0 #286090;
|
511 |
-
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
|
512 |
-
background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
|
513 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
|
514 |
-
background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
|
515 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
|
516 |
-
background-repeat: repeat-x;
|
517 |
-
border-color: #2b669a;
|
518 |
-
}
|
519 |
-
.list-group-item.active .badge,
|
520 |
-
.list-group-item.active:hover .badge,
|
521 |
-
.list-group-item.active:focus .badge {
|
522 |
-
text-shadow: none;
|
523 |
-
}
|
524 |
-
.panel {
|
525 |
-
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
|
526 |
-
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
|
527 |
-
}
|
528 |
-
.panel-default > .panel-heading {
|
529 |
-
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
530 |
-
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
531 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
|
532 |
-
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
|
533 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
|
534 |
-
background-repeat: repeat-x;
|
535 |
-
}
|
536 |
-
.panel-primary > .panel-heading {
|
537 |
-
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
538 |
-
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
539 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
|
540 |
-
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
|
541 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
|
542 |
-
background-repeat: repeat-x;
|
543 |
-
}
|
544 |
-
.panel-success > .panel-heading {
|
545 |
-
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
|
546 |
-
background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
|
547 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
|
548 |
-
background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
|
549 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
|
550 |
-
background-repeat: repeat-x;
|
551 |
-
}
|
552 |
-
.panel-info > .panel-heading {
|
553 |
-
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
|
554 |
-
background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
|
555 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
|
556 |
-
background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
|
557 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
|
558 |
-
background-repeat: repeat-x;
|
559 |
-
}
|
560 |
-
.panel-warning > .panel-heading {
|
561 |
-
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
|
562 |
-
background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
|
563 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
|
564 |
-
background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
|
565 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
|
566 |
-
background-repeat: repeat-x;
|
567 |
-
}
|
568 |
-
.panel-danger > .panel-heading {
|
569 |
-
background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
|
570 |
-
background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
|
571 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
|
572 |
-
background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
|
573 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
|
574 |
-
background-repeat: repeat-x;
|
575 |
-
}
|
576 |
-
.well {
|
577 |
-
background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
|
578 |
-
background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
|
579 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
|
580 |
-
background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
|
581 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
|
582 |
-
background-repeat: repeat-x;
|
583 |
-
border-color: #dcdcdc;
|
584 |
-
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
|
585 |
-
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
|
586 |
-
}
|
587 |
-
/*# sourceMappingURL=bootstrap-theme.css.map */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/bootstrap/css/bootstrap-theme.css.map
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
{"version":3,"sources":["bootstrap-theme.css","less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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","file":"bootstrap-theme.css","sourcesContent":["/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-repeat: repeat-x;\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-repeat: repeat-x;\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n background-repeat: repeat-x;\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n background-repeat: repeat-x;\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-repeat: repeat-x;\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n background-repeat: repeat-x;\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n background-repeat: repeat-x;\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n background-repeat: repeat-x;\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n background-repeat: repeat-x;\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n background-repeat: repeat-x;\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n background-repeat: repeat-x;\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n background-repeat: repeat-x;\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","// stylelint-disable selector-no-qualifying-type, selector-max-compound-selectors\n\n/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);\n @shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default {\n .btn-styles(@btn-default-bg);\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0, 0, 0, .075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0, 0, 0, .075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, .25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0, 0, 0, .25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, .2);\n @shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0, 0, 0, .075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0, 0, 0, .05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n .box-shadow(@shadow);\n}\n","// stylelint-disable indentation, property-no-vendor-prefix, selector-no-vendor-prefix\n\n// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n word-wrap: break-word;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// stylelint-disable value-no-vendor-prefix, selector-max-id\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\", argb(@start-color), argb(@end-color))); // IE9 and down\n background-repeat: repeat-x;\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\", argb(@start-color), argb(@end-color))); // IE9 and down\n background-repeat: repeat-x;\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\", argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n background-repeat: no-repeat;\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\", argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n background-repeat: no-repeat;\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255, 255, 255, .15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]}
|
|
js/bootstrap/css/bootstrap-theme.min.css
DELETED
@@ -1,6 +0,0 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap v3.4.1 (https://getbootstrap.com/)
|
3 |
-
* Copyright 2011-2019 Twitter, Inc.
|
4 |
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5 |
-
*/.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;text-shadow:0 1px 0 #fff;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x;background-color:#e8e8e8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x;background-color:#2e6da4}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
|
6 |
-
/*# sourceMappingURL=bootstrap-theme.min.css.map */
|
|
|
|
|
|
|
|
|
|
|
|
js/bootstrap/css/bootstrap.min.css.map
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","../../scss/vendor/_rfs.scss","../../scss/mixins/_border-radius.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/mixins/_backdrop.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/_placeholders.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"iBAAA;;;;;ACAA,MAQI,UAAA,QAAA,YAAA,QAAA,YAAA,QAAA,UAAA,QAAA,SAAA,QAAA,YAAA,QAAA,YAAA,QAAA,WAAA,QAAA,UAAA,QAAA,UAAA,QAAA,WAAA,KAAA,UAAA,QAAA,eAAA,QAIA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAIA,aAAA,QAAA,eAAA,QAAA,aAAA,QAAA,UAAA,QAAA,aAAA,QAAA,YAAA,QAAA,WAAA,QAAA,UAAA,QAIA,iBAAA,EAAA,CAAA,GAAA,CAAA,IAAA,mBAAA,GAAA,CAAA,GAAA,CAAA,IAAA,iBAAA,EAAA,CAAA,GAAA,CAAA,GAAA,cAAA,EAAA,CAAA,GAAA,CAAA,IAAA,iBAAA,GAAA,CAAA,GAAA,CAAA,EAAA,gBAAA,GAAA,CAAA,EAAA,CAAA,GAAA,eAAA,GAAA,CAAA,GAAA,CAAA,IAAA,cAAA,EAAA,CAAA,EAAA,CAAA,GAGF,eAAA,GAAA,CAAA,GAAA,CAAA,IACA,eAAA,CAAA,CAAA,CAAA,CAAA,EACA,oBAAA,EAAA,CAAA,EAAA,CAAA,GACA,iBAAA,GAAA,CAAA,GAAA,CAAA,IAMA,qBAAA,SAAA,CAAA,aAAA,CAAA,UAAA,CAAA,MAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,WAAA,CAAA,iBAAA,CAAA,UAAA,CAAA,mBAAA,CAAA,gBAAA,CAAA,iBAAA,CAAA,mBACA,oBAAA,cAAA,CAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,iBAAA,CAAA,aAAA,CAAA,UACA,cAAA,2EAQA,sBAAA,0BACA,oBAAA,KACA,sBAAA,IACA,sBAAA,IACA,gBAAA,QAIA,aAAA,KCnCF,ECgDA,QADA,SD5CE,WAAA,WAeE,8CANJ,MAOM,gBAAA,QAcN,KACE,OAAA,EACA,YAAA,2BEmPI,UAAA,yBFjPJ,YAAA,2BACA,YAAA,2BACA,MAAA,qBACA,WAAA,0BACA,iBAAA,kBACA,yBAAA,KACA,4BAAA,YAUF,GACE,OAAA,KAAA,EACA,MAAA,QACA,iBAAA,aACA,OAAA,EACA,QAAA,IAGF,eACE,OAAA,IAUF,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GACE,WAAA,EACA,cAAA,MAGA,YAAA,IACA,YAAA,IAIF,IAAA,GEwMQ,UAAA,uBAlKJ,0BFtCJ,IAAA,GE+MQ,UAAA,QF1MR,IAAA,GEmMQ,UAAA,sBAlKJ,0BFjCJ,IAAA,GE0MQ,UAAA,MFrMR,IAAA,GE8LQ,UAAA,oBAlKJ,0BF5BJ,IAAA,GEqMQ,UAAA,SFhMR,IAAA,GEyLQ,UAAA,sBAlKJ,0BFvBJ,IAAA,GEgMQ,UAAA,QF3LR,IAAA,GEgLM,UAAA,QF3KN,IAAA,GE2KM,UAAA,KFhKN,EACE,WAAA,EACA,cAAA,KCoBF,6BDTA,YAEE,wBAAA,UAAA,OAAA,gBAAA,UAAA,OACA,OAAA,KACA,iCAAA,KAAA,yBAAA,KAMF,QACE,cAAA,KACA,WAAA,OACA,YAAA,QAMF,GCKA,GDHE,aAAA,KCSF,GDNA,GCKA,GDFE,WAAA,EACA,cAAA,KAGF,MCMA,MACA,MAFA,MDDE,cAAA,EAGF,GACE,YAAA,IAKF,GACE,cAAA,MACA,YAAA,EAMF,WACE,OAAA,EAAA,EAAA,KAQF,ECLA,ODOE,YAAA,OAQF,OAAA,ME4EM,UAAA,OFrEN,MAAA,KACE,QAAA,KACA,iBAAA,QASF,ICnBA,IDqBE,SAAA,SEwDI,UAAA,MFtDJ,YAAA,EACA,eAAA,SAGF,IAAM,OAAA,OACN,IAAM,IAAA,MAKN,EACE,MAAA,QACA,gBAAA,UAEA,QACE,MAAA,QAWF,2BAAA,iCAEE,MAAA,QACA,gBAAA,KCvBJ,KACA,ID6BA,IC5BA,KDgCE,YAAA,yBEcI,UAAA,IFZJ,UAAA,IACA,aAAA,cAOF,IACE,QAAA,MACA,WAAA,EACA,cAAA,KACA,SAAA,KEAI,UAAA,OFKJ,SELI,UAAA,QFOF,MAAA,QACA,WAAA,OAIJ,KEZM,UAAA,OFcJ,MAAA,QACA,UAAA,WAGA,OACE,MAAA,QAIJ,IACE,QAAA,MAAA,MExBI,UAAA,OF0BJ,MAAA,KACA,iBAAA,QG7SE,cAAA,MHgTF,QACE,QAAA,EE/BE,UAAA,IFiCF,YAAA,IASJ,OACE,OAAA,EAAA,EAAA,KAMF,IChDA,IDkDE,eAAA,OAQF,MACE,aAAA,OACA,gBAAA,SAGF,QACE,YAAA,MACA,eAAA,MACA,MAAA,QACA,WAAA,KAOF,GAEE,WAAA,QACA,WAAA,qBCvDF,MAGA,GAFA,MAGA,GDsDA,MCxDA,GD8DE,aAAA,QACA,aAAA,MACA,aAAA,EAQF,MACE,QAAA,aAMF,OAEE,cAAA,EAQF,iCACE,QAAA,ECrEF,OD0EA,MCxEA,SADA,OAEA,SD4EE,OAAA,EACA,YAAA,QE9HI,UAAA,QFgIJ,YAAA,QAIF,OC3EA,OD6EE,eAAA,KAKF,cACE,OAAA,QAGF,OAGE,UAAA,OAGA,gBACE,QAAA,EAOJ,0CACE,QAAA,KCjFF,cACA,aACA,cDuFA,OAIE,mBAAA,OCvFF,6BACA,4BACA,6BDwFI,sBACE,OAAA,QAON,mBACE,QAAA,EACA,aAAA,KAKF,SACE,OAAA,SAUF,SACE,UAAA,EACA,QAAA,EACA,OAAA,EACA,OAAA,EAQF,OACE,MAAA,KACA,MAAA,KACA,QAAA,EACA,cAAA,MEnNM,UAAA,sBFsNN,YAAA,QExXE,0BFiXJ,OExMQ,UAAA,QFiNN,SACE,MAAA,KC/FJ,kCDsGA,uCCvGA,mCADA,+BAGA,oCAJA,6BAKA,mCD2GE,QAAA,EAGF,4BACE,OAAA,KASF,cACE,eAAA,KACA,mBAAA,UAmBF,4BACE,mBAAA,KAKF,+BACE,QAAA,EAMF,6BACE,KAAA,QADF,uBACE,KAAA,QAMF,6BACE,KAAA,QACA,mBAAA,OAKF,OACE,QAAA,aAKF,OACE,OAAA,EAOF,QACE,QAAA,UACA,OAAA,QAQF,SACE,eAAA,SAQF,SACE,QAAA,eInlBF,MFyQM,UAAA,QEvQJ,YAAA,IAKA,WFsQM,UAAA,uBEpQJ,YAAA,IACA,YAAA,IFiGA,0BEpGF,WF6QM,UAAA,ME7QN,WFsQM,UAAA,uBEpQJ,YAAA,IACA,YAAA,IFiGA,0BEpGF,WF6QM,UAAA,QE7QN,WFsQM,UAAA,uBEpQJ,YAAA,IACA,YAAA,IFiGA,0BEpGF,WF6QM,UAAA,ME7QN,WFsQM,UAAA,uBEpQJ,YAAA,IACA,YAAA,IFiGA,0BEpGF,WF6QM,UAAA,QE7QN,WFsQM,UAAA,uBEpQJ,YAAA,IACA,YAAA,IFiGA,0BEpGF,WF6QM,UAAA,ME7QN,WFsQM,UAAA,uBEpQJ,YAAA,IACA,YAAA,IFiGA,0BEpGF,WF6QM,UAAA,QEvPR,eCrDE,aAAA,EACA,WAAA,KDyDF,aC1DE,aAAA,EACA,WAAA,KD4DF,kBACE,QAAA,aAEA,mCACE,aAAA,MAUJ,YFsNM,UAAA,OEpNJ,eAAA,UAIF,YACE,cAAA,KF+MI,UAAA,QE5MJ,wBACE,cAAA,EAIJ,mBACE,WAAA,MACA,cAAA,KFqMI,UAAA,OEnMJ,MAAA,QAEA,2BACE,QAAA,KE9FJ,WCIE,UAAA,KAGA,OAAA,KDDF,eACE,QAAA,OACA,iBAAA,KACA,OAAA,IAAA,MAAA,QHGE,cAAA,OIRF,UAAA,KAGA,OAAA,KDcF,QAEE,QAAA,aAGF,YACE,cAAA,MACA,YAAA,EAGF,gBJ+PM,UAAA,OI7PJ,MAAA,QElCA,WP0mBF,iBAGA,cACA,cACA,cAHA,cADA,eQ9mBE,MAAA,KACA,cAAA,0BACA,aAAA,0BACA,aAAA,KACA,YAAA,KCwDE,yBF5CE,WAAA,cACE,UAAA,OE2CJ,yBF5CE,WAAA,cAAA,cACE,UAAA,OE2CJ,yBF5CE,WAAA,cAAA,cAAA,cACE,UAAA,OE2CJ,0BF5CE,WAAA,cAAA,cAAA,cAAA,cACE,UAAA,QE2CJ,0BF5CE,WAAA,cAAA,cAAA,cAAA,cAAA,eACE,UAAA,QGfN,KCAA,cAAA,OACA,cAAA,EACA,QAAA,KACA,UAAA,KAEA,WAAA,8BACA,aAAA,+BACA,YAAA,+BDJE,OCaF,YAAA,EACA,MAAA,KACA,UAAA,KACA,cAAA,8BACA,aAAA,8BACA,WAAA,mBA+CI,KACE,KAAA,EAAA,EAAA,GAGF,iBApCJ,KAAA,EAAA,EAAA,KACA,MAAA,KAcA,cACE,KAAA,EAAA,EAAA,KACA,MAAA,KAFF,cACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,cACE,KAAA,EAAA,EAAA,KACA,MAAA,eAFF,cACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,cACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,cACE,KAAA,EAAA,EAAA,KACA,MAAA,eA+BE,UAhDJ,KAAA,EAAA,EAAA,KACA,MAAA,KAqDQ,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,YA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,QAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,QAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,QAhEN,KAAA,EAAA,EAAA,KACA,MAAA,KAuEQ,UAxDV,YAAA,YAwDU,UAxDV,YAAA,aAwDU,UAxDV,YAAA,IAwDU,UAxDV,YAAA,aAwDU,UAxDV,YAAA,aAwDU,UAxDV,YAAA,IAwDU,UAxDV,YAAA,aAwDU,UAxDV,YAAA,aAwDU,UAxDV,YAAA,IAwDU,WAxDV,YAAA,aAwDU,WAxDV,YAAA,aAmEM,KX2sBR,MWzsBU,cAAA,EAGF,KX2sBR,MWzsBU,cAAA,EAPF,KXqtBR,MWntBU,cAAA,QAGF,KXqtBR,MWntBU,cAAA,QAPF,KX+tBR,MW7tBU,cAAA,OAGF,KX+tBR,MW7tBU,cAAA,OAPF,KXyuBR,MWvuBU,cAAA,KAGF,KXyuBR,MWvuBU,cAAA,KAPF,KXmvBR,MWjvBU,cAAA,OAGF,KXmvBR,MWjvBU,cAAA,OAPF,KX6vBR,MW3vBU,cAAA,KAGF,KX6vBR,MW3vBU,cAAA,KF1DN,yBEUE,QACE,KAAA,EAAA,EAAA,GAGF,oBApCJ,KAAA,EAAA,EAAA,KACA,MAAA,KAcA,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,KAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eA+BE,aAhDJ,KAAA,EAAA,EAAA,KACA,MAAA,KAqDQ,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,YA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,KAuEQ,aAxDV,YAAA,EAwDU,aAxDV,YAAA,YAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,aAmEM,QXg6BR,SW95BU,cAAA,EAGF,QXg6BR,SW95BU,cAAA,EAPF,QX06BR,SWx6BU,cAAA,QAGF,QX06BR,SWx6BU,cAAA,QAPF,QXo7BR,SWl7BU,cAAA,OAGF,QXo7BR,SWl7BU,cAAA,OAPF,QX87BR,SW57BU,cAAA,KAGF,QX87BR,SW57BU,cAAA,KAPF,QXw8BR,SWt8BU,cAAA,OAGF,QXw8BR,SWt8BU,cAAA,OAPF,QXk9BR,SWh9BU,cAAA,KAGF,QXk9BR,SWh9BU,cAAA,MF1DN,yBEUE,QACE,KAAA,EAAA,EAAA,GAGF,oBApCJ,KAAA,EAAA,EAAA,KACA,MAAA,KAcA,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,KAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eA+BE,aAhDJ,KAAA,EAAA,EAAA,KACA,MAAA,KAqDQ,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,YA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,KAuEQ,aAxDV,YAAA,EAwDU,aAxDV,YAAA,YAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,aAmEM,QXqnCR,SWnnCU,cAAA,EAGF,QXqnCR,SWnnCU,cAAA,EAPF,QX+nCR,SW7nCU,cAAA,QAGF,QX+nCR,SW7nCU,cAAA,QAPF,QXyoCR,SWvoCU,cAAA,OAGF,QXyoCR,SWvoCU,cAAA,OAPF,QXmpCR,SWjpCU,cAAA,KAGF,QXmpCR,SWjpCU,cAAA,KAPF,QX6pCR,SW3pCU,cAAA,OAGF,QX6pCR,SW3pCU,cAAA,OAPF,QXuqCR,SWrqCU,cAAA,KAGF,QXuqCR,SWrqCU,cAAA,MF1DN,yBEUE,QACE,KAAA,EAAA,EAAA,GAGF,oBApCJ,KAAA,EAAA,EAAA,KACA,MAAA,KAcA,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,KAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eA+BE,aAhDJ,KAAA,EAAA,EAAA,KACA,MAAA,KAqDQ,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,YA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,KAuEQ,aAxDV,YAAA,EAwDU,aAxDV,YAAA,YAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,aAmEM,QX00CR,SWx0CU,cAAA,EAGF,QX00CR,SWx0CU,cAAA,EAPF,QXo1CR,SWl1CU,cAAA,QAGF,QXo1CR,SWl1CU,cAAA,QAPF,QX81CR,SW51CU,cAAA,OAGF,QX81CR,SW51CU,cAAA,OAPF,QXw2CR,SWt2CU,cAAA,KAGF,QXw2CR,SWt2CU,cAAA,KAPF,QXk3CR,SWh3CU,cAAA,OAGF,QXk3CR,SWh3CU,cAAA,OAPF,QX43CR,SW13CU,cAAA,KAGF,QX43CR,SW13CU,cAAA,MF1DN,0BEUE,QACE,KAAA,EAAA,EAAA,GAGF,oBApCJ,KAAA,EAAA,EAAA,KACA,MAAA,KAcA,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,KAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eA+BE,aAhDJ,KAAA,EAAA,EAAA,KACA,MAAA,KAqDQ,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,YA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,KAuEQ,aAxDV,YAAA,EAwDU,aAxDV,YAAA,YAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,aAmEM,QX+hDR,SW7hDU,cAAA,EAGF,QX+hDR,SW7hDU,cAAA,EAPF,QXyiDR,SWviDU,cAAA,QAGF,QXyiDR,SWviDU,cAAA,QAPF,QXmjDR,SWjjDU,cAAA,OAGF,QXmjDR,SWjjDU,cAAA,OAPF,QX6jDR,SW3jDU,cAAA,KAGF,QX6jDR,SW3jDU,cAAA,KAPF,QXukDR,SWrkDU,cAAA,OAGF,QXukDR,SWrkDU,cAAA,OAPF,QXilDR,SW/kDU,cAAA,KAGF,QXilDR,SW/kDU,cAAA,MF1DN,0BEUE,SACE,KAAA,EAAA,EAAA,GAGF,qBApCJ,KAAA,EAAA,EAAA,KACA,MAAA,KAcA,kBACE,KAAA,EAAA,EAAA,KACA,MAAA,KAFF,kBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,kBACE,KAAA,EAAA,EAAA,KACA,MAAA,eAFF,kBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,kBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,kBACE,KAAA,EAAA,EAAA,KACA,MAAA,eA+BE,cAhDJ,KAAA,EAAA,EAAA,KACA,MAAA,KAqDQ,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,YA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,YAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,YAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,YAhEN,KAAA,EAAA,EAAA,KACA,MAAA,KAuEQ,cAxDV,YAAA,EAwDU,cAxDV,YAAA,YAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,IAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,IAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,IAwDU,eAxDV,YAAA,aAwDU,eAxDV,YAAA,aAmEM,SXovDR,UWlvDU,cAAA,EAGF,SXovDR,UWlvDU,cAAA,EAPF,SX8vDR,UW5vDU,cAAA,QAGF,SX8vDR,UW5vDU,cAAA,QAPF,SXwwDR,UWtwDU,cAAA,OAGF,SXwwDR,UWtwDU,cAAA,OAPF,SXkxDR,UWhxDU,cAAA,KAGF,SXkxDR,UWhxDU,cAAA,KAPF,SX4xDR,UW1xDU,cAAA,OAGF,SX4xDR,UW1xDU,cAAA,OAPF,SXsyDR,UWpyDU,cAAA,KAGF,SXsyDR,UWpyDU,cAAA,MCrHV,OACE,cAAA,YACA,qBAAA,YACA,yBAAA,QACA,sBAAA,oBACA,wBAAA,QACA,qBAAA,mBACA,uBAAA,QACA,oBAAA,qBAEA,MAAA,KACA,cAAA,KACA,MAAA,QACA,eAAA,IACA,aAAA,QAOA,yBACE,QAAA,MAAA,MACA,iBAAA,mBACA,oBAAA,IACA,WAAA,MAAA,EAAA,EAAA,EAAA,OAAA,0BAGF,aACE,eAAA,QAGF,aACE,eAAA,OAIF,0BACE,WAAA,IAAA,MAAA,aASJ,aACE,aAAA,IAUA,4BACE,QAAA,OAAA,OAeF,gCACE,aAAA,IAAA,EAGA,kCACE,aAAA,EAAA,IAOJ,oCACE,oBAAA,EAGF,qCACE,iBAAA,EASF,2CACE,qBAAA,2BACA,MAAA,8BAQJ,cACE,qBAAA,0BACA,MAAA,6BAQA,8BACE,qBAAA,yBACA,MAAA,4BC5HF,eAME,cAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,KACA,aAAA,QAfF,iBAME,cAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,KACA,aAAA,QAfF,eAME,cAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,KACA,aAAA,QAfF,YAME,cAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,KACA,aAAA,QAfF,eAME,cAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,KACA,aAAA,QAfF,cAME,cAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,KACA,aAAA,QAfF,aAME,cAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,KACA,aAAA,QAfF,YAME,cAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,KACA,aAAA,QDoIA,kBACE,WAAA,KACA,2BAAA,MH3EF,4BGyEA,qBACE,WAAA,KACA,2BAAA,OH3EF,4BGyEA,qBACE,WAAA,KACA,2BAAA,OH3EF,4BGyEA,qBACE,WAAA,KACA,2BAAA,OH3EF,6BGyEA,qBACE,WAAA,KACA,2BAAA,OH3EF,6BGyEA,sBACE,WAAA,KACA,2BAAA,OEnJN,YACE,cAAA,MASF,gBACE,YAAA,oBACA,eAAA,oBACA,cAAA,EboRI,UAAA,QahRJ,YAAA,IAIF,mBACE,YAAA,kBACA,eAAA,kBb0QI,UAAA,QatQN,mBACE,YAAA,mBACA,eAAA,mBboQI,UAAA,QcjSN,WACE,WAAA,OdgSI,UAAA,Oc5RJ,MAAA,QCLF,cACE,QAAA,MACA,MAAA,KACA,QAAA,QAAA,Of8RI,UAAA,Ke3RJ,YAAA,IACA,YAAA,IACA,MAAA,QACA,iBAAA,KACA,gBAAA,YACA,OAAA,IAAA,MAAA,QACA,mBAAA,KAAA,gBAAA,KAAA,WAAA,KdGE,cAAA,OeHE,WAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAIA,uCDhBN,cCiBQ,WAAA,MDGN,yBACE,SAAA,OAEA,wDACE,OAAA,QAKJ,oBACE,MAAA,QACA,iBAAA,KACA,aAAA,QACA,QAAA,EAKE,WAAA,EAAA,EAAA,EAAA,OAAA,qBAOJ,2CAEE,OAAA,MAIF,gCACE,MAAA,QAEA,QAAA,EAHF,2BACE,MAAA,QAEA,QAAA,EAQF,uBAAA,wBAEE,iBAAA,QAGA,QAAA,EAIF,0CACE,QAAA,QAAA,OACA,OAAA,SAAA,QACA,mBAAA,OAAA,kBAAA,OACA,MAAA,QE3EF,iBAAA,QF6EE,eAAA,KACA,aAAA,QACA,aAAA,MACA,aAAA,EACA,wBAAA,IACA,cAAA,ECtEE,mBAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAAA,WAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YD2DJ,oCACE,QAAA,QAAA,OACA,OAAA,SAAA,QACA,mBAAA,OAAA,kBAAA,OACA,MAAA,QE3EF,iBAAA,QF6EE,eAAA,KACA,aAAA,QACA,aAAA,MACA,aAAA,EACA,wBAAA,IACA,cAAA,ECtEE,WAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAIA,uCDuDJ,0CCtDM,mBAAA,KAAA,WAAA,KDsDN,oCCtDM,WAAA,MDqEN,+EACE,iBAAA,QADF,yEACE,iBAAA,QAGF,0CACE,QAAA,QAAA,OACA,OAAA,SAAA,QACA,mBAAA,OAAA,kBAAA,OACA,MAAA,QE9FF,iBAAA,QFgGE,eAAA,KACA,aAAA,QACA,aAAA,MACA,aAAA,EACA,wBAAA,IACA,cAAA,ECzFE,mBAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAAA,WAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAIA,uCD0EJ,0CCzEM,mBAAA,KAAA,WAAA,MDwFN,+EACE,iBAAA,QASJ,wBACE,QAAA,MACA,MAAA,KACA,QAAA,QAAA,EACA,cAAA,EACA,YAAA,IACA,MAAA,QACA,iBAAA,YACA,OAAA,MAAA,YACA,aAAA,IAAA,EAEA,wCAAA,wCAEE,cAAA,EACA,aAAA,EAWJ,iBACE,WAAA,0BACA,QAAA,OAAA,MfmJI,UAAA,QClRF,cAAA,McmIF,6CACE,QAAA,OAAA,MACA,OAAA,QAAA,OACA,mBAAA,MAAA,kBAAA,MAHF,uCACE,QAAA,OAAA,MACA,OAAA,QAAA,OACA,mBAAA,MAAA,kBAAA,MAGF,6CACE,QAAA,OAAA,MACA,OAAA,QAAA,OACA,mBAAA,MAAA,kBAAA,MAIJ,iBACE,WAAA,yBACA,QAAA,MAAA,KfgII,UAAA,QClRF,cAAA,McsJF,6CACE,QAAA,MAAA,KACA,OAAA,OAAA,MACA,mBAAA,KAAA,kBAAA,KAHF,uCACE,QAAA,MAAA,KACA,OAAA,OAAA,MACA,mBAAA,KAAA,kBAAA,KAGF,6CACE,QAAA,MAAA,KACA,OAAA,OAAA,MACA,mBAAA,KAAA,kBAAA,KAQF,sBACE,WAAA,2BAGF,yBACE,WAAA,0BAGF,yBACE,WAAA,yBAKJ,oBACE,MAAA,KACA,OAAA,KACA,QAAA,QAEA,mDACE,OAAA,QAGF,uCACE,OAAA,Md/LA,cAAA,OcmMF,0CACE,OAAA,MdpMA,cAAA,OiBdJ,aACE,QAAA,MACA,MAAA,KACA,QAAA,QAAA,QAAA,QAAA,OAEA,mBAAA,oBlB2RI,UAAA,KkBxRJ,YAAA,IACA,YAAA,IACA,MAAA,QACA,iBAAA,KACA,iBAAA,gOACA,kBAAA,UACA,oBAAA,MAAA,OAAA,OACA,gBAAA,KAAA,KACA,OAAA,IAAA,MAAA,QjBFE,cAAA,OeHE,WAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YESJ,mBAAA,KAAA,gBAAA,KAAA,WAAA,KFLI,uCEfN,aFgBQ,WAAA,MEMN,mBACE,aAAA,QACA,QAAA,EAKE,WAAA,EAAA,EAAA,EAAA,OAAA,qBAIJ,uBAAA,mCAEE,cAAA,OACA,iBAAA,KAGF,sBAEE,iBAAA,QAKF,4BACE,MAAA,YACA,YAAA,EAAA,EAAA,EAAA,QAIJ,gBACE,YAAA,OACA,eAAA,OACA,aAAA,MlByOI,UAAA,QClRF,cAAA,MiB8CJ,gBACE,YAAA,MACA,eAAA,MACA,aAAA,KlBiOI,UAAA,QClRF,cAAA,MkBfJ,YACE,QAAA,MACA,WAAA,OACA,aAAA,MACA,cAAA,QAEA,8BACE,MAAA,KACA,YAAA,OAIJ,kBACE,MAAA,IACA,OAAA,IACA,WAAA,MACA,eAAA,IACA,iBAAA,KACA,kBAAA,UACA,oBAAA,OACA,gBAAA,QACA,OAAA,IAAA,MAAA,gBACA,mBAAA,KAAA,gBAAA,KAAA,WAAA,KACA,2BAAA,MAAA,aAAA,MAGA,iClBXE,cAAA,MkBeF,8BAEE,cAAA,IAGF,yBACE,OAAA,gBAGF,wBACE,aAAA,QACA,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,OAAA,qBAGF,0BACE,iBAAA,QACA,aAAA,QAEA,yCAII,iBAAA,8NAIJ,sCAII,iBAAA,sIAKN,+CACE,iBAAA,QACA,aAAA,QAKE,iBAAA,wNAIJ,2BACE,eAAA,KACA,OAAA,KACA,QAAA,GAOA,6CAAA,8CACE,QAAA,GAcN,aACE,aAAA,MAEA,+BACE,MAAA,IACA,YAAA,OACA,iBAAA,uJACA,oBAAA,KAAA,OlB9FA,cAAA,IeHE,WAAA,oBAAA,KAAA,YAIA,uCGyFJ,+BHxFM,WAAA,MGgGJ,qCACE,iBAAA,yIAGF,uCACE,oBAAA,MAAA,OAKE,iBAAA,sIAMR,mBACE,QAAA,aACA,aAAA,KAGF,WACE,SAAA,SACA,KAAA,cACA,eAAA,KAIE,yBAAA,0BACE,eAAA,KACA,OAAA,KACA,QAAA,IC9IN,YACE,MAAA,KACA,OAAA,OACA,QAAA,EACA,iBAAA,YACA,mBAAA,KAAA,gBAAA,KAAA,WAAA,KAEA,kBACE,QAAA,EAIA,wCAA0B,WAAA,EAAA,EAAA,EAAA,IAAA,IAAA,CAAA,EAAA,EAAA,EAAA,OAAA,qBAC1B,oCAA0B,WAAA,EAAA,EAAA,EAAA,IAAA,IAAA,CAAA,EAAA,EAAA,EAAA,OAAA,qBAG5B,8BACE,OAAA,EAGF,kCACE,MAAA,KACA,OAAA,KACA,WAAA,QHzBF,iBAAA,QG2BE,OAAA,EnBZA,cAAA,KeHE,mBAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAAA,WAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YImBF,mBAAA,KAAA,WAAA,KJfE,uCIMJ,kCJLM,mBAAA,KAAA,WAAA,MIgBJ,yCHjCF,iBAAA,QGsCA,2CACE,MAAA,KACA,OAAA,MACA,MAAA,YACA,OAAA,QACA,iBAAA,QACA,aAAA,YnB7BA,cAAA,KmBkCF,8BACE,MAAA,KACA,OAAA,KHnDF,iBAAA,QGqDE,OAAA,EnBtCA,cAAA,KeHE,gBAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAAA,WAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YI6CF,gBAAA,KAAA,WAAA,KJzCE,uCIiCJ,8BJhCM,gBAAA,KAAA,WAAA,MI0CJ,qCH3DF,iBAAA,QGgEA,8BACE,MAAA,KACA,OAAA,MACA,MAAA,YACA,OAAA,QACA,iBAAA,QACA,aAAA,YnBvDA,cAAA,KmB4DF,qBACE,eAAA,KAEA,2CACE,iBAAA,QAGF,uCACE,iBAAA,QCvFN,eACE,SAAA,SAEA,6BtB4lFF,4BsB1lFI,OAAA,mBACA,YAAA,KAGF,qBACE,SAAA,SACA,IAAA,EACA,KAAA,EACA,OAAA,KACA,QAAA,KAAA,OACA,eAAA,KACA,OAAA,IAAA,MAAA,YACA,iBAAA,EAAA,ELDE,WAAA,QAAA,IAAA,WAAA,CAAA,UAAA,IAAA,YAIA,uCKXJ,qBLYM,WAAA,MKCN,6BACE,QAAA,KAAA,OAEA,+CACE,MAAA,YADF,0CACE,MAAA,YAGF,0DAEE,YAAA,SACA,eAAA,QAHF,mCAAA,qDAEE,YAAA,SACA,eAAA,QAGF,8CACE,YAAA,SACA,eAAA,QAIJ,4BACE,YAAA,SACA,eAAA,QAMA,gEACE,QAAA,IACA,UAAA,WAAA,mBAAA,mBAFF,yCtBgmFJ,2DACA,kCsBhmFM,QAAA,IACA,UAAA,WAAA,mBAAA,mBAKF,oDACE,QAAA,IACA,UAAA,WAAA,mBAAA,mBCtDN,aACE,SAAA,SACA,QAAA,KACA,UAAA,KACA,YAAA,QACA,MAAA,KAEA,2BvBwpFF,0BuBtpFI,SAAA,SACA,KAAA,EAAA,EAAA,KACA,MAAA,GACA,UAAA,EAIF,iCvBspFF,gCuBppFI,QAAA,EAMF,kBACE,SAAA,SACA,QAAA,EAEA,wBACE,QAAA,EAWN,kBACE,QAAA,KACA,YAAA,OACA,QAAA,QAAA,OtBsPI,UAAA,KsBpPJ,YAAA,IACA,YAAA,IACA,MAAA,QACA,WAAA,OACA,YAAA,OACA,iBAAA,QACA,OAAA,IAAA,MAAA,QrBpCE,cAAA,OForFJ,qBuBtoFA,8BvBooFA,6BACA,kCuBjoFE,QAAA,MAAA,KtBgOI,UAAA,QClRF,cAAA,MF6rFJ,qBuBtoFA,8BvBooFA,6BACA,kCuBjoFE,QAAA,OAAA,MtBuNI,UAAA,QClRF,cAAA,MqBgEJ,6BvBooFA,6BuBloFE,cAAA,KvBuoFF,uEuB1nFI,8FrB/DA,wBAAA,EACA,2BAAA,EF6rFJ,iEuBxnFI,2FrBtEA,wBAAA,EACA,2BAAA,EqBgFF,0IACE,YAAA,KrBpEA,uBAAA,EACA,0BAAA,EsBzBF,gBACE,QAAA,KACA,MAAA,KACA,WAAA,OvByQE,UAAA,OuBtQF,MAAA,QAGF,eACE,SAAA,SACA,IAAA,KACA,QAAA,EACA,QAAA,KACA,UAAA,KACA,QAAA,OAAA,MACA,WAAA,MvB4PE,UAAA,QuBzPF,MAAA,KACA,iBAAA,mBtB1BA,cAAA,OFgvFJ,0BACA,yBwBltFI,sCxBgtFJ,qCwB9sFM,QAAA,MA9CF,uBAAA,mCAoDE,aAAA,QAGE,cAAA,qBACA,iBAAA,2OACA,kBAAA,UACA,oBAAA,MAAA,wBAAA,OACA,gBAAA,sBAAA,sBAGF,6BAAA,yCACE,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,OAAA,oBAhEJ,2CAAA,+BAyEI,cAAA,qBACA,oBAAA,IAAA,wBAAA,MAAA,wBA1EJ,sBAAA,kCAiFE,aAAA,QAGE,kDAAA,gDAAA,8DAAA,4DAEE,cAAA,SACA,iBAAA,+NAAA,CAAA,2OACA,oBAAA,MAAA,OAAA,MAAA,CAAA,OAAA,MAAA,QACA,gBAAA,KAAA,IAAA,CAAA,sBAAA,sBAIJ,4BAAA,wCACE,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,OAAA,oBA/FJ,2BAAA,uCAsGE,aAAA,QAEA,mCAAA,+CACE,iBAAA,QAGF,iCAAA,6CACE,WAAA,EAAA,EAAA,EAAA,OAAA,oBAGF,6CAAA,yDACE,MAAA,QAKJ,qDACE,YAAA,KAvHF,oCxBqzFJ,mCwBrzFI,gDxBozFJ,+CwBrrFQ,QAAA,EAIF,0CxBurFN,yCwBvrFM,sDxBsrFN,qDwBrrFQ,QAAA,EAjHN,kBACE,QAAA,KACA,MAAA,KACA,WAAA,OvByQE,UAAA,OuBtQF,MAAA,QAGF,iBACE,SAAA,SACA,IAAA,KACA,QAAA,EACA,QAAA,KACA,UAAA,KACA,QAAA,OAAA,MACA,WAAA,MvB4PE,UAAA,QuBzPF,MAAA,KACA,iBAAA,mBtB1BA,cAAA,OFy0FJ,8BACA,6BwB3yFI,0CxByyFJ,yCwBvyFM,QAAA,MA9CF,yBAAA,qCAoDE,aAAA,QAGE,cAAA,qBACA,iBAAA,2TACA,kBAAA,UACA,oBAAA,MAAA,wBAAA,OACA,gBAAA,sBAAA,sBAGF,+BAAA,2CACE,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,OAAA,oBAhEJ,6CAAA,iCAyEI,cAAA,qBACA,oBAAA,IAAA,wBAAA,MAAA,wBA1EJ,wBAAA,oCAiFE,aAAA,QAGE,oDAAA,kDAAA,gEAAA,8DAEE,cAAA,SACA,iBAAA,+NAAA,CAAA,2TACA,oBAAA,MAAA,OAAA,MAAA,CAAA,OAAA,MAAA,QACA,gBAAA,KAAA,IAAA,CAAA,sBAAA,sBAIJ,8BAAA,0CACE,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,OAAA,oBA/FJ,6BAAA,yCAsGE,aAAA,QAEA,qCAAA,iDACE,iBAAA,QAGF,mCAAA,+CACE,WAAA,EAAA,EAAA,EAAA,OAAA,oBAGF,+CAAA,2DACE,MAAA,QAKJ,uDACE,YAAA,KAvHF,sCxB84FJ,qCwB94FI,kDxB64FJ,iDwB5wFQ,QAAA,EAEF,4CxBgxFN,2CwBhxFM,wDxB+wFN,uDwB9wFQ,QAAA,ECtIR,KACE,QAAA,aAEA,YAAA,IACA,YAAA,IACA,MAAA,QACA,WAAA,OACA,gBAAA,KAEA,eAAA,OACA,OAAA,QACA,oBAAA,KAAA,iBAAA,KAAA,YAAA,KACA,iBAAA,YACA,OAAA,IAAA,MAAA,YC8GA,QAAA,QAAA,OzBsKI,UAAA,KClRF,cAAA,OeHE,WAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAIA,uCQhBN,KRiBQ,WAAA,MQAN,WACE,MAAA,QAIF,sBAAA,WAEE,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,OAAA,qBAcF,cAAA,cAAA,uBAGE,eAAA,KACA,QAAA,IAYF,aCvCA,MAAA,KRhBA,iBAAA,QQkBA,aAAA,QAGA,mBACE,MAAA,KRtBF,iBAAA,QQwBE,aAAA,QAGF,8BAAA,mBAEE,MAAA,KR7BF,iBAAA,QQ+BE,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,OAAA,oBAIJ,+BAAA,gCAAA,oBAAA,oBAAA,mCAKE,MAAA,KACA,iBAAA,QAGA,aAAA,QAEA,qCAAA,sCAAA,0BAAA,0BAAA,yCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,oBAKN,sBAAA,sBAEE,MAAA,KACA,iBAAA,QAGA,aAAA,QDZF,eCvCA,MAAA,KRhBA,iBAAA,QQkBA,aAAA,QAGA,qBACE,MAAA,KRtBF,iBAAA,QQwBE,aAAA,QAGF,gCAAA,qBAEE,MAAA,KR7BF,iBAAA,QQ+BE,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,OAAA,qBAIJ,iCAAA,kCAAA,sBAAA,sBAAA,qCAKE,MAAA,KACA,iBAAA,QAGA,aAAA,QAEA,uCAAA,wCAAA,4BAAA,4BAAA,2CAKI,WAAA,EAAA,EAAA,EAAA,OAAA,qBAKN,wBAAA,wBAEE,MAAA,KACA,iBAAA,QAGA,aAAA,QDZF,aCvCA,MAAA,KRhBA,iBAAA,QQkBA,aAAA,QAGA,mBACE,MAAA,KRtBF,iBAAA,QQwBE,aAAA,QAGF,8BAAA,mBAEE,MAAA,KR7BF,iBAAA,QQ+BE,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,OAAA,oBAIJ,+BAAA,gCAAA,oBAAA,oBAAA,mCAKE,MAAA,KACA,iBAAA,QAGA,aAAA,QAEA,qCAAA,sCAAA,0BAAA,0BAAA,yCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,oBAKN,sBAAA,sBAEE,MAAA,KACA,iBAAA,QAGA,aAAA,QDZF,UCvCA,MAAA,KRhBA,iBAAA,QQkBA,aAAA,QAGA,gBACE,MAAA,KRtBF,iBAAA,QQwBE,aAAA,QAGF,2BAAA,gBAEE,MAAA,KR7BF,iBAAA,QQ+BE,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,OAAA,oBAIJ,4BAAA,6BAAA,iBAAA,iBAAA,gCAKE,MAAA,KACA,iBAAA,QAGA,aAAA,QAEA,kCAAA,mCAAA,uBAAA,uBAAA,sCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,oBAKN,mBAAA,mBAEE,MAAA,KACA,iBAAA,QAGA,aAAA,QDZF,aCvCA,MAAA,KRhBA,iBAAA,QQkBA,aAAA,QAGA,mBACE,MAAA,KRtBF,iBAAA,QQwBE,aAAA,QAGF,8BAAA,mBAEE,MAAA,KR7BF,iBAAA,QQ+BE,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,OAAA,mBAIJ,+BAAA,gCAAA,oBAAA,oBAAA,mCAKE,MAAA,KACA,iBAAA,QAGA,aAAA,QAEA,qCAAA,sCAAA,0BAAA,0BAAA,yCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,mBAKN,sBAAA,sBAEE,MAAA,KACA,iBAAA,QAGA,aAAA,QDZF,YCvCA,MAAA,KRhBA,iBAAA,QQkBA,aAAA,QAGA,kBACE,MAAA,KRtBF,iBAAA,QQwBE,aAAA,QAGF,6BAAA,kBAEE,MAAA,KR7BF,iBAAA,QQ+BE,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,OAAA,mBAIJ,8BAAA,+BAAA,mBAAA,mBAAA,kCAKE,MAAA,KACA,iBAAA,QAGA,aAAA,QAEA,oCAAA,qCAAA,yBAAA,yBAAA,wCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,mBAKN,qBAAA,qBAEE,MAAA,KACA,iBAAA,QAGA,aAAA,QDZF,WCvCA,MAAA,KRhBA,iBAAA,QQkBA,aAAA,QAGA,iBACE,MAAA,KRtBF,iBAAA,QQwBE,aAAA,QAGF,4BAAA,iBAEE,MAAA,KR7BF,iBAAA,QQ+BE,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,OAAA,qBAIJ,6BAAA,8BAAA,kBAAA,kBAAA,iCAKE,MAAA,KACA,iBAAA,QAGA,aAAA,QAEA,mCAAA,oCAAA,wBAAA,wBAAA,uCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,qBAKN,oBAAA,oBAEE,MAAA,KACA,iBAAA,QAGA,aAAA,QDZF,UCvCA,MAAA,KRhBA,iBAAA,QQkBA,aAAA,QAGA,gBACE,MAAA,KRtBF,iBAAA,QQwBE,aAAA,QAGF,2BAAA,gBAEE,MAAA,KR7BF,iBAAA,QQ+BE,aAAA,QAKE,WAAA,EAAA,EAAA,EAAA,OAAA,kBAIJ,4BAAA,6BAAA,iBAAA,iBAAA,gCAKE,MAAA,KACA,iBAAA,QAGA,aAAA,QAEA,kCAAA,mCAAA,uBAAA,uBAAA,sCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,kBAKN,mBAAA,mBAEE,MAAA,KACA,iBAAA,QAGA,aAAA,QDNF,qBCmBA,MAAA,QACA,aAAA,QAEA,2BACE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,sCAAA,2BAEE,WAAA,EAAA,EAAA,EAAA,OAAA,oBAGF,uCAAA,wCAAA,4BAAA,0CAAA,4BAKE,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,6CAAA,8CAAA,kCAAA,gDAAA,kCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,oBAKN,8BAAA,8BAEE,MAAA,QACA,iBAAA,YDvDF,uBCmBA,MAAA,QACA,aAAA,QAEA,6BACE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,wCAAA,6BAEE,WAAA,EAAA,EAAA,EAAA,OAAA,qBAGF,yCAAA,0CAAA,8BAAA,4CAAA,8BAKE,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,+CAAA,gDAAA,oCAAA,kDAAA,oCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,qBAKN,gCAAA,gCAEE,MAAA,QACA,iBAAA,YDvDF,qBCmBA,MAAA,QACA,aAAA,QAEA,2BACE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,sCAAA,2BAEE,WAAA,EAAA,EAAA,EAAA,OAAA,mBAGF,uCAAA,wCAAA,4BAAA,0CAAA,4BAKE,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,6CAAA,8CAAA,kCAAA,gDAAA,kCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,mBAKN,8BAAA,8BAEE,MAAA,QACA,iBAAA,YDvDF,kBCmBA,MAAA,QACA,aAAA,QAEA,wBACE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,mCAAA,wBAEE,WAAA,EAAA,EAAA,EAAA,OAAA,oBAGF,oCAAA,qCAAA,yBAAA,uCAAA,yBAKE,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,0CAAA,2CAAA,+BAAA,6CAAA,+BAKI,WAAA,EAAA,EAAA,EAAA,OAAA,oBAKN,2BAAA,2BAEE,MAAA,QACA,iBAAA,YDvDF,qBCmBA,MAAA,QACA,aAAA,QAEA,2BACE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,sCAAA,2BAEE,WAAA,EAAA,EAAA,EAAA,OAAA,mBAGF,uCAAA,wCAAA,4BAAA,0CAAA,4BAKE,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,6CAAA,8CAAA,kCAAA,gDAAA,kCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,mBAKN,8BAAA,8BAEE,MAAA,QACA,iBAAA,YDvDF,oBCmBA,MAAA,QACA,aAAA,QAEA,0BACE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,qCAAA,0BAEE,WAAA,EAAA,EAAA,EAAA,OAAA,mBAGF,sCAAA,uCAAA,2BAAA,yCAAA,2BAKE,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,4CAAA,6CAAA,iCAAA,+CAAA,iCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,mBAKN,6BAAA,6BAEE,MAAA,QACA,iBAAA,YDvDF,mBCmBA,MAAA,QACA,aAAA,QAEA,yBACE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,oCAAA,yBAEE,WAAA,EAAA,EAAA,EAAA,OAAA,qBAGF,qCAAA,sCAAA,0BAAA,wCAAA,0BAKE,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,2CAAA,4CAAA,gCAAA,8CAAA,gCAKI,WAAA,EAAA,EAAA,EAAA,OAAA,qBAKN,4BAAA,4BAEE,MAAA,QACA,iBAAA,YDvDF,kBCmBA,MAAA,QACA,aAAA,QAEA,wBACE,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,mCAAA,wBAEE,WAAA,EAAA,EAAA,EAAA,OAAA,kBAGF,oCAAA,qCAAA,yBAAA,uCAAA,yBAKE,MAAA,KACA,iBAAA,QACA,aAAA,QAEA,0CAAA,2CAAA,+BAAA,6CAAA,+BAKI,WAAA,EAAA,EAAA,EAAA,OAAA,kBAKN,2BAAA,2BAEE,MAAA,QACA,iBAAA,YD3CJ,UACE,YAAA,IACA,MAAA,QACA,gBAAA,UAEA,gBACE,MAAA,QAQF,mBAAA,mBAEE,MAAA,QAWJ,mBAAA,QCuBE,QAAA,MAAA,KzBsKI,UAAA,QClRF,cAAA,MuByFJ,mBAAA,QCmBE,QAAA,OAAA,MzBsKI,UAAA,QClRF,cAAA,MyBnBJ,MVgBM,WAAA,QAAA,KAAA,OAIA,uCUpBN,MVqBQ,WAAA,MUlBN,iBACE,QAAA,EAMF,qBACE,QAAA,KAIJ,YACE,OAAA,EACA,SAAA,OVDI,WAAA,OAAA,KAAA,KAIA,uCULN,YVMQ,WAAA,MUDN,gCACE,MAAA,EACA,OAAA,KVNE,WAAA,MAAA,KAAA,KAIA,uCUAJ,gCVCM,WAAA,MjBm6GR,UADA,SAEA,W4Bx7GA,QAIE,SAAA,SAGF,iBACE,YAAA,OCqBE,wBACE,QAAA,aACA,YAAA,OACA,eAAA,OACA,QAAA,GAhCJ,WAAA,KAAA,MACA,aAAA,KAAA,MAAA,YACA,cAAA,EACA,YAAA,KAAA,MAAA,YAqDE,8BACE,YAAA,ED3CN,eACE,SAAA,SACA,QAAA,KACA,QAAA,KACA,UAAA,MACA,QAAA,MAAA,EACA,OAAA,E3B+QI,UAAA,K2B7QJ,MAAA,QACA,WAAA,KACA,WAAA,KACA,iBAAA,KACA,gBAAA,YACA,OAAA,IAAA,MAAA,gB1BVE,cAAA,O0BcF,+BACE,IAAA,KACA,KAAA,EACA,WAAA,QAYA,qBACE,cAAA,MAEA,qCACE,MAAA,KACA,KAAA,EAIJ,mBACE,cAAA,IAEA,mCACE,MAAA,EACA,KAAA,KnBCJ,yBmBfA,wBACE,cAAA,MAEA,wCACE,MAAA,KACA,KAAA,EAIJ,sBACE,cAAA,IAEA,sCACE,MAAA,EACA,KAAA,MnBCJ,yBmBfA,wBACE,cAAA,MAEA,wCACE,MAAA,KACA,KAAA,EAIJ,sBACE,cAAA,IAEA,sCACE,MAAA,EACA,KAAA,MnBCJ,yBmBfA,wBACE,cAAA,MAEA,wCACE,MAAA,KACA,KAAA,EAIJ,sBACE,cAAA,IAEA,sCACE,MAAA,EACA,KAAA,MnBCJ,0BmBfA,wBACE,cAAA,MAEA,wCACE,MAAA,KACA,KAAA,EAIJ,sBACE,cAAA,IAEA,sCACE,MAAA,EACA,KAAA,MnBCJ,0BmBfA,yBACE,cAAA,MAEA,yCACE,MAAA,KACA,KAAA,EAIJ,uBACE,cAAA,IAEA,uCACE,MAAA,EACA,KAAA,MAUN,uCACE,IAAA,KACA,OAAA,KACA,WAAA,EACA,cAAA,QC9CA,gCACE,QAAA,aACA,YAAA,OACA,eAAA,OACA,QAAA,GAzBJ,WAAA,EACA,aAAA,KAAA,MAAA,YACA,cAAA,KAAA,MACA,YAAA,KAAA,MAAA,YA8CE,sCACE,YAAA,ED0BJ,wCACE,IAAA,EACA,MAAA,KACA,KAAA,KACA,WAAA,EACA,YAAA,QC5DA,iCACE,QAAA,aACA,YAAA,OACA,eAAA,OACA,QAAA,GAlBJ,WAAA,KAAA,MAAA,YACA,aAAA,EACA,cAAA,KAAA,MAAA,YACA,YAAA,KAAA,MAuCE,uCACE,YAAA,EDoCF,iCACE,eAAA,EAMJ,0CACE,IAAA,EACA,MAAA,KACA,KAAA,KACA,WAAA,EACA,aAAA,QC7EA,mCACE,QAAA,aACA,YAAA,OACA,eAAA,OACA,QAAA,GAWA,mCACE,QAAA,KAGF,oCACE,QAAA,aACA,aAAA,OACA,eAAA,OACA,QAAA,GA9BN,WAAA,KAAA,MAAA,YACA,aAAA,KAAA,MACA,cAAA,KAAA,MAAA,YAiCE,yCACE,YAAA,EDqDF,oCACE,eAAA,EAON,kBACE,OAAA,EACA,OAAA,MAAA,EACA,SAAA,OACA,WAAA,IAAA,MAAA,gBAMF,eACE,QAAA,MACA,MAAA,KACA,QAAA,OAAA,KACA,MAAA,KACA,YAAA,IACA,MAAA,QACA,WAAA,QACA,gBAAA,KACA,YAAA,OACA,iBAAA,YACA,OAAA,EAcA,qBAAA,qBAEE,MAAA,QVzJF,iBAAA,QU8JA,sBAAA,sBAEE,MAAA,KACA,gBAAA,KVjKF,iBAAA,QUqKA,wBAAA,wBAEE,MAAA,QACA,eAAA,KACA,iBAAA,YAMJ,oBACE,QAAA,MAIF,iBACE,QAAA,MACA,QAAA,MAAA,KACA,cAAA,E3B0GI,UAAA,Q2BxGJ,MAAA,QACA,YAAA,OAIF,oBACE,QAAA,MACA,QAAA,OAAA,KACA,MAAA,QAIF,oBACE,MAAA,QACA,iBAAA,QACA,aAAA,gBAGA,mCACE,MAAA,QAEA,yCAAA,yCAEE,MAAA,KVhNJ,iBAAA,sBUoNE,0CAAA,0CAEE,MAAA,KVtNJ,iBAAA,QU0NE,4CAAA,4CAEE,MAAA,QAIJ,sCACE,aAAA,gBAGF,wCACE,MAAA,QAGF,qCACE,MAAA,QE5OJ,W9BwuHA,oB8BtuHE,SAAA,SACA,QAAA,YACA,eAAA,O9B0uHF,yB8BxuHE,gBACE,SAAA,SACA,KAAA,EAAA,EAAA,K9BgvHJ,4CACA,0CAIA,gCADA,gCADA,+BADA,+B8B7uHE,mC9BsuHF,iCAIA,uBADA,uBADA,sBADA,sB8BjuHI,QAAA,EAKJ,aACE,QAAA,KACA,UAAA,KACA,gBAAA,WAEA,0BACE,MAAA,K9B6uHJ,wC8BvuHE,kCAEE,YAAA,K9ByuHJ,4C8BruHE,uD5BRE,wBAAA,EACA,2BAAA,EFkvHJ,6C8BluHE,+B9BiuHF,iCEpuHI,uBAAA,EACA,0BAAA,E4BqBJ,uBACE,cAAA,SACA,aAAA,SAEA,8BAAA,uCAAA,sCAGE,YAAA,EAGF,0CACE,aAAA,EAIJ,0CAAA,+BACE,cAAA,QACA,aAAA,QAGF,0CAAA,+BACE,cAAA,OACA,aAAA,OAoBF,oBACE,eAAA,OACA,YAAA,WACA,gBAAA,OAEA,yB9BgsHF,+B8B9rHI,MAAA,K9BksHJ,iD8B/rHE,2CAEE,WAAA,K9BisHJ,qD8B7rHE,gE5BvFE,2BAAA,EACA,0BAAA,EFwxHJ,sD8B7rHE,8B5B1GE,uBAAA,EACA,wBAAA,E6BxBJ,KACE,QAAA,KACA,UAAA,KACA,aAAA,EACA,cAAA,EACA,WAAA,KAGF,UACE,QAAA,MACA,QAAA,MAAA,KAGA,MAAA,QACA,gBAAA,KdHI,WAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,YAIA,uCcPN,UdQQ,WAAA,McCN,gBAAA,gBAEE,MAAA,QAKF,mBACE,MAAA,QACA,eAAA,KACA,OAAA,QAQJ,UACE,cAAA,IAAA,MAAA,QAEA,oBACE,cAAA,KACA,WAAA,IACA,OAAA,IAAA,MAAA,Y7BlBA,uBAAA,OACA,wBAAA,O6BoBA,0BAAA,0BAEE,aAAA,QAAA,QAAA,QAEA,UAAA,QAGF,6BACE,MAAA,QACA,iBAAA,YACA,aAAA,Y/B8zHN,mC+B1zHE,2BAEE,MAAA,QACA,iBAAA,KACA,aAAA,QAAA,QAAA,KAGF,yBAEE,WAAA,K7B5CA,uBAAA,EACA,wBAAA,E6BuDF,qBACE,WAAA,IACA,OAAA,E7BnEA,cAAA,O6BuEF,4B/BgzHF,2B+B9yHI,MAAA,KbxFF,iBAAA,QlB44HF,oB+BzyHE,oBAEE,KAAA,EAAA,EAAA,KACA,WAAA,O/B4yHJ,yB+BvyHE,yBAEE,WAAA,EACA,UAAA,EACA,WAAA,OAMF,8B/BoyHF,mC+BnyHI,MAAA,KAUF,uBACE,QAAA,KAEF,qBACE,QAAA,MCxHJ,QACE,SAAA,SACA,QAAA,KACA,UAAA,KACA,YAAA,OACA,gBAAA,cACA,YAAA,MAEA,eAAA,MAOA,mBhCm5HF,yBAGA,sBADA,sBADA,sBAGA,sBACA,uBgCv5HI,QAAA,KACA,UAAA,QACA,YAAA,OACA,gBAAA,cAoBJ,cACE,YAAA,SACA,eAAA,SACA,aAAA,K/B2OI,UAAA,Q+BzOJ,gBAAA,KACA,YAAA,OAaF,YACE,QAAA,KACA,eAAA,OACA,aAAA,EACA,cAAA,EACA,WAAA,KAEA,sBACE,cAAA,EACA,aAAA,EAGF,2BACE,SAAA,OASJ,aACE,YAAA,MACA,eAAA,MAYF,iBACE,WAAA,KACA,UAAA,EAGA,YAAA,OAIF,gBACE,QAAA,OAAA,O/B6KI,UAAA,Q+B3KJ,YAAA,EACA,iBAAA,YACA,OAAA,IAAA,MAAA,Y9BzGE,cAAA,OeHE,WAAA,WAAA,KAAA,YAIA,uCemGN,gBflGQ,WAAA,Me2GN,sBACE,gBAAA,KAGF,sBACE,gBAAA,KACA,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,OAMJ,qBACE,QAAA,aACA,MAAA,MACA,OAAA,MACA,eAAA,OACA,kBAAA,UACA,oBAAA,OACA,gBAAA,KAGF,mBACE,WAAA,6BACA,WAAA,KvB1FE,yBuBsGA,kBAEI,UAAA,OACA,gBAAA,WAEA,8BACE,eAAA,IAEA,6CACE,SAAA,SAGF,wCACE,cAAA,MACA,aAAA,MAIJ,qCACE,SAAA,QAGF,mCACE,QAAA,eACA,WAAA,KAGF,kCACE,QAAA,KAGF,oCACE,QAAA,KAGF,6BACE,SAAA,QACA,OAAA,EACA,QAAA,KACA,UAAA,EACA,WAAA,kBACA,iBAAA,YACA,aAAA,EACA,YAAA,EfhMJ,WAAA,KekMI,UAAA,KhC41HV,oCgC11HQ,iCAEE,OAAA,KACA,WAAA,EACA,cAAA,EAGF,kCACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,SvBhKN,yBuBsGA,kBAEI,UAAA,OACA,gBAAA,WAEA,8BACE,eAAA,IAEA,6CACE,SAAA,SAGF,wCACE,cAAA,MACA,aAAA,MAIJ,qCACE,SAAA,QAGF,mCACE,QAAA,eACA,WAAA,KAGF,kCACE,QAAA,KAGF,oCACE,QAAA,KAGF,6BACE,SAAA,QACA,OAAA,EACA,QAAA,KACA,UAAA,EACA,WAAA,kBACA,iBAAA,YACA,aAAA,EACA,YAAA,EfhMJ,WAAA,KekMI,UAAA,KhCi5HV,oCgC/4HQ,iCAEE,OAAA,KACA,WAAA,EACA,cAAA,EAGF,kCACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,SvBhKN,yBuBsGA,kBAEI,UAAA,OACA,gBAAA,WAEA,8BACE,eAAA,IAEA,6CACE,SAAA,SAGF,wCACE,cAAA,MACA,aAAA,MAIJ,qCACE,SAAA,QAGF,mCACE,QAAA,eACA,WAAA,KAGF,kCACE,QAAA,KAGF,oCACE,QAAA,KAGF,6BACE,SAAA,QACA,OAAA,EACA,QAAA,KACA,UAAA,EACA,WAAA,kBACA,iBAAA,YACA,aAAA,EACA,YAAA,EfhMJ,WAAA,KekMI,UAAA,KhCs8HV,oCgCp8HQ,iCAEE,OAAA,KACA,WAAA,EACA,cAAA,EAGF,kCACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,SvBhKN,0BuBsGA,kBAEI,UAAA,OACA,gBAAA,WAEA,8BACE,eAAA,IAEA,6CACE,SAAA,SAGF,wCACE,cAAA,MACA,aAAA,MAIJ,qCACE,SAAA,QAGF,mCACE,QAAA,eACA,WAAA,KAGF,kCACE,QAAA,KAGF,oCACE,QAAA,KAGF,6BACE,SAAA,QACA,OAAA,EACA,QAAA,KACA,UAAA,EACA,WAAA,kBACA,iBAAA,YACA,aAAA,EACA,YAAA,EfhMJ,WAAA,KekMI,UAAA,KhC2/HV,oCgCz/HQ,iCAEE,OAAA,KACA,WAAA,EACA,cAAA,EAGF,kCACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,SvBhKN,0BuBsGA,mBAEI,UAAA,OACA,gBAAA,WAEA,+BACE,eAAA,IAEA,8CACE,SAAA,SAGF,yCACE,cAAA,MACA,aAAA,MAIJ,sCACE,SAAA,QAGF,oCACE,QAAA,eACA,WAAA,KAGF,mCACE,QAAA,KAGF,qCACE,QAAA,KAGF,8BACE,SAAA,QACA,OAAA,EACA,QAAA,KACA,UAAA,EACA,WAAA,kBACA,iBAAA,YACA,aAAA,EACA,YAAA,EfhMJ,WAAA,KekMI,UAAA,KhCgjIV,qCgC9iIQ,kCAEE,OAAA,KACA,WAAA,EACA,cAAA,EAGF,mCACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,SA1DN,eAEI,UAAA,OACA,gBAAA,WAEA,2BACE,eAAA,IAEA,0CACE,SAAA,SAGF,qCACE,cAAA,MACA,aAAA,MAIJ,kCACE,SAAA,QAGF,gCACE,QAAA,eACA,WAAA,KAGF,+BACE,QAAA,KAGF,iCACE,QAAA,KAGF,0BACE,SAAA,QACA,OAAA,EACA,QAAA,KACA,UAAA,EACA,WAAA,kBACA,iBAAA,YACA,aAAA,EACA,YAAA,EfhMJ,WAAA,KekMI,UAAA,KhComIV,iCgClmIQ,8BAEE,OAAA,KACA,WAAA,EACA,cAAA,EAGF,+BACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,QAcR,4BACE,MAAA,eAEA,kCAAA,kCAEE,MAAA,eAKF,oCACE,MAAA,gBAEA,0CAAA,0CAEE,MAAA,eAGF,6CACE,MAAA,ehCklIR,2CgC9kII,0CAEE,MAAA,eAIJ,8BACE,MAAA,gBACA,aAAA,eAGF,mCACE,iBAAA,4OAGF,2BACE,MAAA,gBAEA,6BhC2kIJ,mCADA,mCgCvkIM,MAAA,eAOJ,2BACE,MAAA,KAEA,iCAAA,iCAEE,MAAA,KAKF,mCACE,MAAA,sBAEA,yCAAA,yCAEE,MAAA,sBAGF,4CACE,MAAA,sBhCkkIR,0CgC9jII,yCAEE,MAAA,KAIJ,6BACE,MAAA,sBACA,aAAA,qBAGF,kCACE,iBAAA,kPAGF,0BACE,MAAA,sBACA,4BhC4jIJ,kCADA,kCgCxjIM,MAAA,KCvUN,MACE,SAAA,SACA,QAAA,KACA,eAAA,OACA,UAAA,EAEA,UAAA,WACA,iBAAA,KACA,gBAAA,WACA,OAAA,IAAA,MAAA,iB/BME,cAAA,O+BFF,SACE,aAAA,EACA,YAAA,EAGF,kBACE,WAAA,QACA,cAAA,QAEA,8BACE,iBAAA,E/BCF,uBAAA,mBACA,wBAAA,mB+BEA,6BACE,oBAAA,E/BUF,2BAAA,mBACA,0BAAA,mB+BJF,+BjC+3IF,+BiC73II,WAAA,EAIJ,WAGE,KAAA,EAAA,EAAA,KACA,QAAA,KAAA,KAIF,YACE,cAAA,MAGF,eACE,WAAA,QACA,cAAA,EAGF,sBACE,cAAA,EAQA,sBACE,YAAA,KAQJ,aACE,QAAA,MAAA,KACA,cAAA,EAEA,iBAAA,gBACA,cAAA,IAAA,MAAA,iBAEA,yB/BpEE,cAAA,mBAAA,mBAAA,EAAA,E+ByEJ,aACE,QAAA,MAAA,KAEA,iBAAA,gBACA,WAAA,IAAA,MAAA,iBAEA,wB/B/EE,cAAA,EAAA,EAAA,mBAAA,mB+ByFJ,kBACE,aAAA,OACA,cAAA,OACA,YAAA,OACA,cAAA,EAUF,mBACE,aAAA,OACA,YAAA,OAIF,kBACE,SAAA,SACA,IAAA,EACA,MAAA,EACA,OAAA,EACA,KAAA,EACA,QAAA,K/BnHE,cAAA,mB+BuHJ,UjCi2IA,iBADA,ciC71IE,MAAA,KAGF,UjCg2IA,cEp9II,uBAAA,mBACA,wBAAA,mB+BwHJ,UjCi2IA,iBE58II,2BAAA,mBACA,0BAAA,mB+BuHF,kBACE,cAAA,OxBpGA,yBwBgGJ,YAQI,QAAA,KACA,UAAA,IAAA,KAGA,kBAEE,KAAA,EAAA,EAAA,GACA,cAAA,EAEA,wBACE,YAAA,EACA,YAAA,EAKA,mC/BpJJ,wBAAA,EACA,2BAAA,EF4+IJ,gDiCt1IU,iDAGE,wBAAA,EjCu1IZ,gDiCr1IU,oDAGE,2BAAA,EAIJ,oC/BrJJ,uBAAA,EACA,0BAAA,EF0+IJ,iDiCn1IU,kDAGE,uBAAA,EjCo1IZ,iDiCl1IU,qDAGE,0BAAA,GC7MZ,kBACE,SAAA,SACA,QAAA,KACA,YAAA,OACA,MAAA,KACA,QAAA,KAAA,QjC4RI,UAAA,KiC1RJ,MAAA,QACA,WAAA,KACA,iBAAA,KACA,OAAA,EhCKE,cAAA,EgCHF,gBAAA,KjBAI,WAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,WAAA,CAAA,cAAA,KAAA,KAIA,uCiBhBN,kBjBiBQ,WAAA,MiBFN,kCACE,MAAA,QACA,iBAAA,QACA,WAAA,MAAA,EAAA,KAAA,EAAA,iBAEA,yCACE,iBAAA,gRACA,UAAA,gBAKJ,yBACE,YAAA,EACA,MAAA,QACA,OAAA,QACA,YAAA,KACA,QAAA,GACA,iBAAA,gRACA,kBAAA,UACA,gBAAA,QjBvBE,WAAA,UAAA,IAAA,YAIA,uCiBWJ,yBjBVM,WAAA,MiBsBN,wBACE,QAAA,EAGF,wBACE,QAAA,EACA,aAAA,QACA,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,OAAA,qBAIJ,kBACE,cAAA,EAGF,gBACE,iBAAA,KACA,OAAA,IAAA,MAAA,iBAEA,8BhCnCE,uBAAA,OACA,wBAAA,OgCqCA,gDhCtCA,uBAAA,mBACA,wBAAA,mBgC0CF,oCACE,WAAA,EAIF,6BhClCE,2BAAA,OACA,0BAAA,OgCqCE,yDhCtCF,2BAAA,mBACA,0BAAA,mBgC0CA,iDhC3CA,2BAAA,OACA,0BAAA,OgCgDJ,gBACE,QAAA,KAAA,QASA,qCACE,aAAA,EAGF,iCACE,aAAA,EACA,YAAA,EhCxFA,cAAA,EgC2FA,6CAAgB,WAAA,EAChB,4CAAe,cAAA,EAEf,mDhC9FA,cAAA,EiCnBJ,YACE,QAAA,KACA,UAAA,KACA,QAAA,EAAA,EACA,cAAA,KAEA,WAAA,KAOA,kCACE,aAAA,MAEA,0CACE,MAAA,KACA,cAAA,MACA,MAAA,QACA,QAAA,kCAIJ,wBACE,MAAA,QCzBJ,YACE,QAAA,KhCGA,aAAA,EACA,WAAA,KgCAF,WACE,SAAA,SACA,QAAA,MACA,MAAA,QACA,gBAAA,KACA,iBAAA,KACA,OAAA,IAAA,MAAA,QnBKI,WAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAIA,uCmBfN,WnBgBQ,WAAA,MmBPN,iBACE,QAAA,EACA,MAAA,QAEA,iBAAA,QACA,aAAA,QAGF,iBACE,QAAA,EACA,MAAA,QACA,iBAAA,QACA,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,OAAA,qBAKF,wCACE,YAAA,KAGF,6BACE,QAAA,EACA,MAAA,KlBlCF,iBAAA,QkBoCE,aAAA,QAGF,+BACE,MAAA,QACA,eAAA,KACA,iBAAA,KACA,aAAA,QC3CF,WACE,QAAA,QAAA,OAOI,kCnCqCJ,uBAAA,OACA,0BAAA,OmChCI,iCnCiBJ,wBAAA,OACA,2BAAA,OmChCF,0BACE,QAAA,OAAA,OpCgSE,UAAA,QoCzRE,iDnCqCJ,uBAAA,MACA,0BAAA,MmChCI,gDnCiBJ,wBAAA,MACA,2BAAA,MmChCF,0BACE,QAAA,OAAA,MpCgSE,UAAA,QoCzRE,iDnCqCJ,uBAAA,MACA,0BAAA,MmChCI,gDnCiBJ,wBAAA,MACA,2BAAA,MoC/BJ,OACE,QAAA,aACA,QAAA,MAAA,MrC8RI,UAAA,MqC5RJ,YAAA,IACA,YAAA,EACA,MAAA,KACA,WAAA,OACA,YAAA,OACA,eAAA,SpCKE,cAAA,OoCAF,aACE,QAAA,KAKJ,YACE,SAAA,SACA,IAAA,KCvBF,OACE,SAAA,SACA,QAAA,KAAA,KACA,cAAA,KACA,OAAA,IAAA,MAAA,YrCWE,cAAA,OqCNJ,eAEE,MAAA,QAIF,YACE,YAAA,IAQF,mBACE,cAAA,KAGA,8BACE,SAAA,SACA,IAAA,EACA,MAAA,EACA,QAAA,EACA,QAAA,QAAA,KAeF,eClDA,MAAA,QtBEA,iBAAA,QsBAA,aAAA,QAEA,2BACE,MAAA,QD6CF,iBClDA,MAAA,QtBEA,iBAAA,QsBAA,aAAA,QAEA,6BACE,MAAA,QD6CF,eClDA,MAAA,QtBEA,iBAAA,QsBAA,aAAA,QAEA,2BACE,MAAA,QD6CF,YClDA,MAAA,QtBEA,iBAAA,QsBAA,aAAA,QAEA,wBACE,MAAA,QD6CF,eClDA,MAAA,QtBEA,iBAAA,QsBAA,aAAA,QAEA,2BACE,MAAA,QD6CF,cClDA,MAAA,QtBEA,iBAAA,QsBAA,aAAA,QAEA,0BACE,MAAA,QD6CF,aClDA,MAAA,QtBEA,iBAAA,QsBAA,aAAA,QAEA,yBACE,MAAA,QD6CF,YClDA,MAAA,QtBEA,iBAAA,QsBAA,aAAA,QAEA,wBACE,MAAA,QCHF,wCACE,GAAK,sBAAA,MADP,gCACE,GAAK,sBAAA,MAKT,UACE,QAAA,KACA,OAAA,KACA,SAAA,OxCwRI,UAAA,OwCtRJ,iBAAA,QvCIE,cAAA,OuCCJ,cACE,QAAA,KACA,eAAA,OACA,gBAAA,OACA,SAAA,OACA,MAAA,KACA,WAAA,OACA,YAAA,OACA,iBAAA,QxBZI,WAAA,MAAA,IAAA,KAIA,uCwBAN,cxBCQ,WAAA,MwBWR,sBvBYE,iBAAA,iKuBVA,gBAAA,KAAA,KAIA,uBACE,kBAAA,GAAA,OAAA,SAAA,qBAAA,UAAA,GAAA,OAAA,SAAA,qBAGE,uCAJJ,uBAKM,kBAAA,KAAA,UAAA,MCvCR,YACE,QAAA,KACA,eAAA,OAGA,aAAA,EACA,cAAA,ExCSE,cAAA,OwCLJ,qBACE,gBAAA,KACA,cAAA,QAEA,gCAEE,QAAA,uBAAA,KACA,kBAAA,QAUJ,wBACE,MAAA,KACA,MAAA,QACA,WAAA,QAGA,8BAAA,8BAEE,QAAA,EACA,MAAA,QACA,gBAAA,KACA,iBAAA,QAGF,+BACE,MAAA,QACA,iBAAA,QASJ,iBACE,SAAA,SACA,QAAA,MACA,QAAA,MAAA,KACA,MAAA,QACA,gBAAA,KACA,iBAAA,KACA,OAAA,IAAA,MAAA,iBAEA,6BxCrCE,uBAAA,QACA,wBAAA,QwCwCF,4BxC3BE,2BAAA,QACA,0BAAA,QwC8BF,0BAAA,0BAEE,MAAA,QACA,eAAA,KACA,iBAAA,KAIF,wBACE,QAAA,EACA,MAAA,KACA,iBAAA,QACA,aAAA,QAGF,kCACE,iBAAA,EAEA,yCACE,WAAA,KACA,iBAAA,IAcF,uBACE,eAAA,IAGE,oDxCrCJ,0BAAA,OAZA,wBAAA,EwCsDI,mDxCtDJ,wBAAA,OAYA,0BAAA,EwC+CI,+CACE,WAAA,EAGF,yDACE,iBAAA,IACA,kBAAA,EAEA,gEACE,YAAA,KACA,kBAAA,IjCpER,yBiC4CA,0BACE,eAAA,IAGE,uDxCrCJ,0BAAA,OAZA,wBAAA,EwCsDI,sDxCtDJ,wBAAA,OAYA,0BAAA,EwC+CI,kDACE,WAAA,EAGF,4DACE,iBAAA,IACA,kBAAA,EAEA,mEACE,YAAA,KACA,kBAAA,KjCpER,yBiC4CA,0BACE,eAAA,IAGE,uDxCrCJ,0BAAA,OAZA,wBAAA,EwCsDI,sDxCtDJ,wBAAA,OAYA,0BAAA,EwC+CI,kDACE,WAAA,EAGF,4DACE,iBAAA,IACA,kBAAA,EAEA,mEACE,YAAA,KACA,kBAAA,KjCpER,yBiC4CA,0BACE,eAAA,IAGE,uDxCrCJ,0BAAA,OAZA,wBAAA,EwCsDI,sDxCtDJ,wBAAA,OAYA,0BAAA,EwC+CI,kDACE,WAAA,EAGF,4DACE,iBAAA,IACA,kBAAA,EAEA,mEACE,YAAA,KACA,kBAAA,KjCpER,0BiC4CA,0BACE,eAAA,IAGE,uDxCrCJ,0BAAA,OAZA,wBAAA,EwCsDI,sDxCtDJ,wBAAA,OAYA,0BAAA,EwC+CI,kDACE,WAAA,EAGF,4DACE,iBAAA,IACA,kBAAA,EAEA,mEACE,YAAA,KACA,kBAAA,KjCpER,0BiC4CA,2BACE,eAAA,IAGE,wDxCrCJ,0BAAA,OAZA,wBAAA,EwCsDI,uDxCtDJ,wBAAA,OAYA,0BAAA,EwC+CI,mDACE,WAAA,EAGF,6DACE,iBAAA,IACA,kBAAA,EAEA,oEACE,YAAA,KACA,kBAAA,KAcZ,kBxC9HI,cAAA,EwCiIF,mCACE,aAAA,EAAA,EAAA,IAEA,8CACE,oBAAA,ECpJJ,yBACE,MAAA,QACA,iBAAA,QAGE,sDAAA,sDAEE,MAAA,QACA,iBAAA,QAGF,uDACE,MAAA,KACA,iBAAA,QACA,aAAA,QAdN,2BACE,MAAA,QACA,iBAAA,QAGE,wDAAA,wDAEE,MAAA,QACA,iBAAA,QAGF,yDACE,MAAA,KACA,iBAAA,QACA,aAAA,QAdN,yBACE,MAAA,QACA,iBAAA,QAGE,sDAAA,sDAEE,MAAA,QACA,iBAAA,QAGF,uDACE,MAAA,KACA,iBAAA,QACA,aAAA,QAdN,sBACE,MAAA,QACA,iBAAA,QAGE,mDAAA,mDAEE,MAAA,QACA,iBAAA,QAGF,oDACE,MAAA,KACA,iBAAA,QACA,aAAA,QAdN,yBACE,MAAA,QACA,iBAAA,QAGE,sDAAA,sDAEE,MAAA,QACA,iBAAA,QAGF,uDACE,MAAA,KACA,iBAAA,QACA,aAAA,QAdN,wBACE,MAAA,QACA,iBAAA,QAGE,qDAAA,qDAEE,MAAA,QACA,iBAAA,QAGF,sDACE,MAAA,KACA,iBAAA,QACA,aAAA,QAdN,uBACE,MAAA,QACA,iBAAA,QAGE,oDAAA,oDAEE,MAAA,QACA,iBAAA,QAGF,qDACE,MAAA,KACA,iBAAA,QACA,aAAA,QAdN,sBACE,MAAA,QACA,iBAAA,QAGE,mDAAA,mDAEE,MAAA,QACA,iBAAA,QAGF,oDACE,MAAA,KACA,iBAAA,QACA,aAAA,QCbR,WACE,WAAA,YACA,MAAA,IACA,OAAA,IACA,QAAA,MAAA,MACA,MAAA,KACA,WAAA,YAAA,0TAAA,MAAA,CAAA,IAAA,KAAA,UACA,OAAA,E1COE,cAAA,O0CLF,QAAA,GAGA,iBACE,MAAA,KACA,gBAAA,KACA,QAAA,IAGF,iBACE,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,OAAA,qBACA,QAAA,EAGF,oBAAA,oBAEE,eAAA,KACA,oBAAA,KAAA,iBAAA,KAAA,YAAA,KACA,QAAA,IAIJ,iBACE,OAAA,UAAA,gBAAA,iBCtCF,OACE,MAAA,MACA,UAAA,K5CmSI,UAAA,Q4ChSJ,eAAA,KACA,iBAAA,sBACA,gBAAA,YACA,OAAA,IAAA,MAAA,eACA,WAAA,EAAA,MAAA,KAAA,gB3CUE,cAAA,O2CPF,eACE,QAAA,EAGF,kBACE,QAAA,KAIJ,iBACE,MAAA,oBAAA,MAAA,iBAAA,MAAA,YACA,UAAA,KACA,eAAA,KAEA,mCACE,cAAA,OAIJ,cACE,QAAA,KACA,YAAA,OACA,QAAA,MAAA,OACA,MAAA,QACA,iBAAA,sBACA,gBAAA,YACA,cAAA,IAAA,MAAA,gB3CVE,uBAAA,mBACA,wBAAA,mB2CYF,yBACE,aAAA,SACA,YAAA,OAIJ,YACE,QAAA,OACA,UAAA,WC1CF,OACE,SAAA,MACA,IAAA,EACA,KAAA,EACA,QAAA,KACA,QAAA,KACA,MAAA,KACA,OAAA,KACA,WAAA,OACA,WAAA,KAGA,QAAA,EAOF,cACE,SAAA,SACA,MAAA,KACA,OAAA,MAEA,eAAA,KAGA,0B7BlBI,WAAA,UAAA,IAAA,S6BoBF,UAAA,mB7BhBE,uC6BcJ,0B7BbM,WAAA,M6BiBN,0BACE,UAAA,KAIF,kCACE,UAAA,YAIJ,yBACE,OAAA,kBAEA,wCACE,WAAA,KACA,SAAA,OAGF,qCACE,WAAA,KAIJ,uBACE,QAAA,KACA,YAAA,OACA,WAAA,kBAIF,eACE,SAAA,SACA,QAAA,KACA,eAAA,OACA,MAAA,KAGA,eAAA,KACA,iBAAA,KACA,gBAAA,YACA,OAAA,IAAA,MAAA,e5C3DE,cAAA,M4C+DF,QAAA,EAIF,gBCpFE,SAAA,MACA,IAAA,EACA,KAAA,EACA,QAAA,KACA,MAAA,MACA,OAAA,MACA,iBAAA,KAGA,qBAAS,QAAA,EACT,qBAAS,QAAA,GDgFX,cACE,QAAA,KACA,YAAA,EACA,YAAA,OACA,gBAAA,cACA,QAAA,KAAA,KACA,cAAA,IAAA,MAAA,Q5CtEE,uBAAA,kBACA,wBAAA,kB4CwEF,yBACE,QAAA,MAAA,MACA,OAAA,OAAA,OAAA,OAAA,KAKJ,aACE,cAAA,EACA,YAAA,IAKF,YACE,SAAA,SAGA,KAAA,EAAA,EAAA,KACA,QAAA,KAIF,cACE,QAAA,KACA,UAAA,KACA,YAAA,EACA,YAAA,OACA,gBAAA,SACA,QAAA,OACA,WAAA,IAAA,MAAA,Q5CzFE,2BAAA,kBACA,0BAAA,kB4C8FF,gBACE,OAAA,OrC3EA,yBqCkFF,cACE,UAAA,MACA,OAAA,QAAA,KAGF,yBACE,OAAA,oBAGF,uBACE,WAAA,oBAOF,UAAY,UAAA,OrCnGV,yBqCuGF,U9CszKF,U8CpzKI,UAAA,OrCzGA,0BqC8GF,UAAY,UAAA,QASV,kBACE,MAAA,MACA,UAAA,KACA,OAAA,KACA,OAAA,EAEA,iCACE,OAAA,KACA,OAAA,E5C3KJ,cAAA,E4C+KE,gC5C/KF,cAAA,E4CmLE,8BACE,WAAA,KAGF,gC5CvLF,cAAA,EOyDA,4BqC0GA,0BACE,MAAA,MACA,UAAA,KACA,OAAA,KACA,OAAA,EAEA,yCACE,OAAA,KACA,OAAA,E5C3KJ,cAAA,E4C+KE,wC5C/KF,cAAA,E4CmLE,sCACE,WAAA,KAGF,wC5CvLF,cAAA,GOyDA,4BqC0GA,0BACE,MAAA,MACA,UAAA,KACA,OAAA,KACA,OAAA,EAEA,yCACE,OAAA,KACA,OAAA,E5C3KJ,cAAA,E4C+KE,wC5C/KF,cAAA,E4CmLE,sCACE,WAAA,KAGF,wC5CvLF,cAAA,GOyDA,4BqC0GA,0BACE,MAAA,MACA,UAAA,KACA,OAAA,KACA,OAAA,EAEA,yCACE,OAAA,KACA,OAAA,E5C3KJ,cAAA,E4C+KE,wC5C/KF,cAAA,E4CmLE,sCACE,WAAA,KAGF,wC5CvLF,cAAA,GOyDA,6BqC0GA,0BACE,MAAA,MACA,UAAA,KACA,OAAA,KACA,OAAA,EAEA,yCACE,OAAA,KACA,OAAA,E5C3KJ,cAAA,E4C+KE,wC5C/KF,cAAA,E4CmLE,sCACE,WAAA,KAGF,wC5CvLF,cAAA,GOyDA,6BqC0GA,2BACE,MAAA,MACA,UAAA,KACA,OAAA,KACA,OAAA,EAEA,0CACE,OAAA,KACA,OAAA,E5C3KJ,cAAA,E4C+KE,yC5C/KF,cAAA,E4CmLE,uCACE,WAAA,KAGF,yC5CvLF,cAAA,G8ClBJ,SACE,SAAA,SACA,QAAA,KACA,QAAA,MACA,OAAA,ECJA,YAAA,0BAEA,WAAA,OACA,YAAA,IACA,YAAA,IACA,WAAA,KACA,WAAA,MACA,gBAAA,KACA,YAAA,KACA,eAAA,KACA,eAAA,OACA,WAAA,OACA,aAAA,OACA,YAAA,OACA,WAAA,KhDsRI,UAAA,Q+C1RJ,UAAA,WACA,QAAA,EAEA,cAAS,QAAA,GAET,wBACE,SAAA,SACA,QAAA,MACA,MAAA,MACA,OAAA,MAEA,gCACE,SAAA,SACA,QAAA,GACA,aAAA,YACA,aAAA,MAKN,6CAAA,gBACE,QAAA,MAAA,EAEA,4DAAA,+BACE,OAAA,EAEA,oEAAA,uCACE,IAAA,KACA,aAAA,MAAA,MAAA,EACA,iBAAA,KAKN,+CAAA,gBACE,QAAA,EAAA,MAEA,8DAAA,+BACE,KAAA,EACA,MAAA,MACA,OAAA,MAEA,sEAAA,uCACE,MAAA,KACA,aAAA,MAAA,MAAA,MAAA,EACA,mBAAA,KAKN,gDAAA,mBACE,QAAA,MAAA,EAEA,+DAAA,kCACE,IAAA,EAEA,uEAAA,0CACE,OAAA,KACA,aAAA,EAAA,MAAA,MACA,oBAAA,KAKN,8CAAA,kBACE,QAAA,EAAA,MAEA,6DAAA,iCACE,MAAA,EACA,MAAA,MACA,OAAA,MAEA,qEAAA,yCACE,KAAA,KACA,aAAA,MAAA,EAAA,MAAA,MACA,kBAAA,KAqBN,eACE,UAAA,MACA,QAAA,OAAA,MACA,MAAA,KACA,WAAA,OACA,iBAAA,K9C7FE,cAAA,OgDnBJ,SACE,SAAA,SACA,IAAA,EACA,KAAA,EACA,QAAA,KACA,QAAA,MACA,UAAA,MDLA,YAAA,0BAEA,WAAA,OACA,YAAA,IACA,YAAA,IACA,WAAA,KACA,WAAA,MACA,gBAAA,KACA,YAAA,KACA,eAAA,KACA,eAAA,OACA,WAAA,OACA,aAAA,OACA,YAAA,OACA,WAAA,KhDsRI,UAAA,QiDzRJ,UAAA,WACA,iBAAA,KACA,gBAAA,YACA,OAAA,IAAA,MAAA,ehDIE,cAAA,MgDAF,wBACE,SAAA,SACA,QAAA,MACA,MAAA,KACA,OAAA,MAEA,+BAAA,gCAEE,SAAA,SACA,QAAA,MACA,QAAA,GACA,aAAA,YACA,aAAA,MAMJ,4DAAA,+BACE,OAAA,mBAEA,oEAAA,uCACE,OAAA,EACA,aAAA,MAAA,MAAA,EACA,iBAAA,gBAGF,mEAAA,sCACE,OAAA,IACA,aAAA,MAAA,MAAA,EACA,iBAAA,KAMJ,8DAAA,+BACE,KAAA,mBACA,MAAA,MACA,OAAA,KAEA,sEAAA,uCACE,KAAA,EACA,aAAA,MAAA,MAAA,MAAA,EACA,mBAAA,gBAGF,qEAAA,sCACE,KAAA,IACA,aAAA,MAAA,MAAA,MAAA,EACA,mBAAA,KAMJ,+DAAA,kCACE,IAAA,mBAEA,uEAAA,0CACE,IAAA,EACA,aAAA,EAAA,MAAA,MAAA,MACA,oBAAA,gBAGF,sEAAA,yCACE,IAAA,IACA,aAAA,EAAA,MAAA,MAAA,MACA,oBAAA,KAKJ,wEAAA,2CACE,SAAA,SACA,IAAA,EACA,KAAA,IACA,QAAA,MACA,MAAA,KACA,YAAA,OACA,QAAA,GACA,cAAA,IAAA,MAAA,QAKF,6DAAA,iCACE,MAAA,mBACA,MAAA,MACA,OAAA,KAEA,qEAAA,yCACE,MAAA,EACA,aAAA,MAAA,EAAA,MAAA,MACA,kBAAA,gBAGF,oEAAA,wCACE,MAAA,IACA,aAAA,MAAA,EAAA,MAAA,MACA,kBAAA,KAqBN,gBACE,QAAA,MAAA,KACA,cAAA,EjDuJI,UAAA,KiDpJJ,iBAAA,QACA,cAAA,IAAA,MAAA,ehDtHE,uBAAA,kBACA,wBAAA,kBgDwHF,sBACE,QAAA,KAIJ,cACE,QAAA,KAAA,KACA,MAAA,QC/IF,UACE,SAAA,SAGF,wBACE,aAAA,MAGF,gBACE,SAAA,SACA,MAAA,KACA,SAAA,OCtBA,uBACE,QAAA,MACA,MAAA,KACA,QAAA,GDuBJ,eACE,SAAA,SACA,QAAA,KACA,MAAA,KACA,MAAA,KACA,aAAA,MACA,4BAAA,OAAA,oBAAA,OlClBI,WAAA,UAAA,IAAA,YAIA,uCkCQN,elCPQ,WAAA,MjB61LR,oBACA,oBmD70LA,sBAGE,QAAA,MnDg1LF,0BmD50LA,8CAEE,UAAA,iBnD+0LF,4BmD50LA,4CAEE,UAAA,kBAWA,8BACE,QAAA,EACA,oBAAA,QACA,UAAA,KnDu0LJ,uDACA,qDmDr0LE,qCAGE,QAAA,EACA,QAAA,EnDs0LJ,yCmDn0LE,2CAEE,QAAA,EACA,QAAA,ElC/DE,WAAA,QAAA,GAAA,IAIA,uCjBk4LN,yCmD10LE,2ClCvDM,WAAA,MjBu4LR,uBmDn0LA,uBAEE,SAAA,SACA,IAAA,EACA,OAAA,EACA,QAAA,EAEA,QAAA,KACA,YAAA,OACA,gBAAA,OACA,MAAA,IACA,QAAA,EACA,MAAA,KACA,WAAA,OACA,WAAA,IACA,OAAA,EACA,QAAA,GlCzFI,WAAA,QAAA,KAAA,KAIA,uCjB25LN,uBmDt1LA,uBlCpEQ,WAAA,MjBg6LR,6BADA,6BmDv0LE,6BAAA,6BAEE,MAAA,KACA,gBAAA,KACA,QAAA,EACA,QAAA,GAGJ,uBACE,KAAA,EAGF,uBACE,MAAA,EnD20LF,4BmDt0LA,4BAEE,QAAA,aACA,MAAA,KACA,OAAA,KACA,kBAAA,UACA,oBAAA,IACA,gBAAA,KAAA,KAWF,4BACE,iBAAA,wPAEF,4BACE,iBAAA,yPAQF,qBACE,SAAA,SACA,MAAA,EACA,OAAA,EACA,KAAA,EACA,QAAA,EACA,QAAA,KACA,gBAAA,OACA,QAAA,EAEA,aAAA,IACA,cAAA,KACA,YAAA,IACA,WAAA,KAEA,sCACE,WAAA,YACA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,OAAA,IACA,QAAA,EACA,aAAA,IACA,YAAA,IACA,YAAA,OACA,OAAA,QACA,iBAAA,KACA,gBAAA,YACA,OAAA,EAEA,WAAA,KAAA,MAAA,YACA,cAAA,KAAA,MAAA,YACA,QAAA,GlC5KE,WAAA,QAAA,IAAA,KAIA,uCkCwJJ,sClCvJM,WAAA,MkC2KN,6BACE,QAAA,EASJ,kBACE,SAAA,SACA,MAAA,IACA,OAAA,QACA,KAAA,IACA,YAAA,QACA,eAAA,QACA,MAAA,KACA,WAAA,OnDi0LF,2CmD3zLE,2CAEE,OAAA,UAAA,eAGF,qDACE,iBAAA,KAGF,iCACE,MAAA,KE7NJ,kCACE,GAAK,UAAA,gBADP,0BACE,GAAK,UAAA,gBAIP,gBACE,QAAA,aACA,MAAA,KACA,OAAA,KACA,eAAA,QACA,OAAA,MAAA,MAAA,aACA,mBAAA,YAEA,cAAA,IACA,kBAAA,KAAA,OAAA,SAAA,eAAA,UAAA,KAAA,OAAA,SAAA,eAGF,mBACE,MAAA,KACA,OAAA,KACA,aAAA,KAQF,gCACE,GACE,UAAA,SAEF,IACE,QAAA,EACA,UAAA,MANJ,wBACE,GACE,UAAA,SAEF,IACE,QAAA,EACA,UAAA,MAKJ,cACE,QAAA,aACA,MAAA,KACA,OAAA,KACA,eAAA,QACA,iBAAA,aAEA,cAAA,IACA,QAAA,EACA,kBAAA,KAAA,OAAA,SAAA,aAAA,UAAA,KAAA,OAAA,SAAA,aAGF,iBACE,MAAA,KACA,OAAA,KAIA,uCACE,gBrDiiMJ,cqD/hMM,2BAAA,KAAA,mBAAA,MCjEN,WACE,SAAA,MACA,OAAA,EACA,QAAA,KACA,QAAA,KACA,eAAA,OACA,UAAA,KAEA,WAAA,OACA,iBAAA,KACA,gBAAA,YACA,QAAA,ErCKI,WAAA,UAAA,IAAA,YAIA,uCqCpBN,WrCqBQ,WAAA,MqCLR,oBPdE,SAAA,MACA,IAAA,EACA,KAAA,EACA,QAAA,KACA,MAAA,MACA,OAAA,MACA,iBAAA,KAGA,yBAAS,QAAA,EACT,yBAAS,QAAA,GOQX,kBACE,QAAA,KACA,YAAA,OACA,gBAAA,cACA,QAAA,KAAA,KAEA,6BACE,QAAA,MAAA,MACA,WAAA,OACA,aAAA,OACA,cAAA,OAIJ,iBACE,cAAA,EACA,YAAA,IAGF,gBACE,UAAA,EACA,QAAA,KAAA,KACA,WAAA,KAGF,iBACE,IAAA,EACA,KAAA,EACA,MAAA,MACA,aAAA,IAAA,MAAA,eACA,UAAA,kBAGF,eACE,IAAA,EACA,MAAA,EACA,MAAA,MACA,YAAA,IAAA,MAAA,eACA,UAAA,iBAGF,eACE,IAAA,EACA,MAAA,EACA,KAAA,EACA,OAAA,KACA,WAAA,KACA,cAAA,IAAA,MAAA,eACA,UAAA,kBAGF,kBACE,MAAA,EACA,KAAA,EACA,OAAA,KACA,WAAA,KACA,WAAA,IAAA,MAAA,eACA,UAAA,iBAGF,gBACE,UAAA,KCjFF,aACE,QAAA,aACA,WAAA,IACA,eAAA,OACA,OAAA,KACA,iBAAA,aACA,QAAA,GAEA,yBACE,QAAA,aACA,QAAA,GAKJ,gBACE,WAAA,KAGF,gBACE,WAAA,KAGF,gBACE,WAAA,MAKA,+BACE,kBAAA,iBAAA,GAAA,YAAA,SAAA,UAAA,iBAAA,GAAA,YAAA,SAIJ,oCACE,IACE,QAAA,IAFJ,4BACE,IACE,QAAA,IAIJ,kBACE,mBAAA,8DAAA,WAAA,8DACA,kBAAA,KAAA,KAAA,UAAA,KAAA,KACA,kBAAA,iBAAA,GAAA,OAAA,SAAA,UAAA,iBAAA,GAAA,OAAA,SAGF,oCACE,KACE,sBAAA,MAAA,GAAA,cAAA,MAAA,IAFJ,4BACE,KACE,sBAAA,MAAA,GAAA,cAAA,MAAA,IH9CF,iBACE,QAAA,MACA,MAAA,KACA,QAAA,GIJF,cACE,MAAA,QAGE,oBAAA,oBAEE,MAAA,QANN,gBACE,MAAA,QAGE,sBAAA,sBAEE,MAAA,QANN,cACE,MAAA,QAGE,oBAAA,oBAEE,MAAA,QANN,WACE,MAAA,QAGE,iBAAA,iBAEE,MAAA,QANN,cACE,MAAA,QAGE,oBAAA,oBAEE,MAAA,QANN,aACE,MAAA,QAGE,mBAAA,mBAEE,MAAA,QANN,YACE,MAAA,QAGE,kBAAA,kBAEE,MAAA,QANN,WACE,MAAA,QAGE,iBAAA,iBAEE,MAAA,QCLR,OACE,SAAA,SACA,MAAA,KAEA,eACE,QAAA,MACA,YAAA,uBACA,QAAA,GAGF,SACE,SAAA,SACA,IAAA,EACA,KAAA,EACA,MAAA,KACA,OAAA,KAKF,WACE,kBAAA,KADF,WACE,kBAAA,IADF,YACE,kBAAA,OADF,YACE,kBAAA,eCrBJ,WACE,SAAA,MACA,IAAA,EACA,MAAA,EACA,KAAA,EACA,QAAA,KAGF,cACE,SAAA,MACA,MAAA,EACA,OAAA,EACA,KAAA,EACA,QAAA,KAQE,YACE,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,KjDqCF,yBiDxCA,eACE,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,MjDqCF,yBiDxCA,eACE,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,MjDqCF,yBiDxCA,eACE,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,MjDqCF,0BiDxCA,eACE,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,MjDqCF,0BiDxCA,gBACE,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,MCzBN,QACE,QAAA,KACA,eAAA,IACA,YAAA,OACA,WAAA,QAGF,QACE,QAAA,KACA,KAAA,EAAA,EAAA,KACA,eAAA,OACA,WAAA,QCRF,iB5D+6MA,0D6D36ME,SAAA,mBACA,MAAA,cACA,OAAA,cACA,QAAA,YACA,OAAA,eACA,SAAA,iBACA,KAAA,wBACA,YAAA,iBACA,OAAA,YCXA,uBACE,SAAA,SACA,IAAA,EACA,MAAA,EACA,OAAA,EACA,KAAA,EACA,QAAA,EACA,QAAA,GCRJ,eCAE,SAAA,OACA,cAAA,SACA,YAAA,OCNF,IACE,QAAA,aACA,WAAA,QACA,MAAA,IACA,WAAA,IACA,iBAAA,aACA,QAAA,ICyDM,gBAOI,eAAA,mBAPJ,WAOI,eAAA,cAPJ,cAOI,eAAA,iBAPJ,cAOI,eAAA,iBAPJ,mBAOI,eAAA,sBAPJ,gBAOI,eAAA,mBAPJ,aAOI,MAAA,eAPJ,WAOI,MAAA,gBAPJ,YAOI,MAAA,eAPJ,WAOI,QAAA,YAPJ,YAOI,QAAA,cAPJ,YAOI,QAAA,aAPJ,YAOI,QAAA,cAPJ,aAOI,QAAA,YAPJ,eAOI,SAAA,eAPJ,iBAOI,SAAA,iBAPJ,kBAOI,SAAA,kBAPJ,iBAOI,SAAA,iBAPJ,UAOI,QAAA,iBAPJ,gBAOI,QAAA,uBAPJ,SAOI,QAAA,gBAPJ,QAOI,QAAA,eAPJ,SAOI,QAAA,gBAPJ,aAOI,QAAA,oBAPJ,cAOI,QAAA,qBAPJ,QAOI,QAAA,eAPJ,eAOI,QAAA,sBAPJ,QAOI,QAAA,eAPJ,QAOI,WAAA,EAAA,MAAA,KAAA,0BAPJ,WAOI,WAAA,EAAA,QAAA,OAAA,2BAPJ,WAOI,WAAA,EAAA,KAAA,KAAA,2BAPJ,aAOI,WAAA,eAPJ,iBAOI,SAAA,iBAPJ,mBAOI,SAAA,mBAPJ,mBAOI,SAAA,mBAPJ,gBAOI,SAAA,gBAPJ,iBAOI,SAAA,yBAAA,SAAA,iBAPJ,OAOI,IAAA,YAPJ,QAOI,IAAA,cAPJ,SAOI,IAAA,eAPJ,UAOI,OAAA,YAPJ,WAOI,OAAA,cAPJ,YAOI,OAAA,eAPJ,SAOI,KAAA,YAPJ,UAOI,KAAA,cAPJ,WAOI,KAAA,eAPJ,OAOI,MAAA,YAPJ,QAOI,MAAA,cAPJ,SAOI,MAAA,eAPJ,kBAOI,UAAA,+BAPJ,oBAOI,UAAA,2BAPJ,oBAOI,UAAA,2BAPJ,QAOI,OAAA,IAAA,MAAA,kBAPJ,UAOI,OAAA,YAPJ,YAOI,WAAA,IAAA,MAAA,kBAPJ,cAOI,WAAA,YAPJ,YAOI,aAAA,IAAA,MAAA,kBAPJ,cAOI,aAAA,YAPJ,eAOI,cAAA,IAAA,MAAA,kBAPJ,iBAOI,cAAA,YAPJ,cAOI,YAAA,IAAA,MAAA,kBAPJ,gBAOI,YAAA,YAPJ,gBAOI,aAAA,kBAPJ,kBAOI,aAAA,kBAPJ,gBAOI,aAAA,kBAPJ,aAOI,aAAA,kBAPJ,gBAOI,aAAA,kBAPJ,eAOI,aAAA,kBAPJ,cAOI,aAAA,kBAPJ,aAOI,aAAA,kBAPJ,cAOI,aAAA,eAPJ,UAOI,aAAA,cAPJ,UAOI,aAAA,cAPJ,UAOI,aAAA,cAPJ,UAOI,aAAA,cAPJ,UAOI,aAAA,cAPJ,MAOI,MAAA,cAPJ,MAOI,MAAA,cAPJ,MAOI,MAAA,cAPJ,OAOI,MAAA,eAPJ,QAOI,MAAA,eAPJ,QAOI,UAAA,eAPJ,QAOI,MAAA,gBAPJ,YAOI,UAAA,gBAPJ,MAOI,OAAA,cAPJ,MAOI,OAAA,cAPJ,MAOI,OAAA,cAPJ,OAOI,OAAA,eAPJ,QAOI,OAAA,eAPJ,QAOI,WAAA,eAPJ,QAOI,OAAA,gBAPJ,YAOI,WAAA,gBAPJ,WAOI,KAAA,EAAA,EAAA,eAPJ,UAOI,eAAA,cAPJ,aAOI,eAAA,iBAPJ,kBAOI,eAAA,sBAPJ,qBAOI,eAAA,yBAPJ,aAOI,UAAA,YAPJ,aAOI,UAAA,YAPJ,eAOI,YAAA,YAPJ,eAOI,YAAA,YAPJ,WAOI,UAAA,eAPJ,aAOI,UAAA,iBAPJ,mBAOI,UAAA,uBAPJ,OAOI,IAAA,YAPJ,OAOI,IAAA,iBAPJ,OAOI,IAAA,gBAPJ,OAOI,IAAA,eAPJ,OAOI,IAAA,iBAPJ,OAOI,IAAA,eAPJ,uBAOI,gBAAA,qBAPJ,qBAOI,gBAAA,mBAPJ,wBAOI,gBAAA,iBAPJ,yBAOI,gBAAA,wBAPJ,wBAOI,gBAAA,uBAPJ,wBAOI,gBAAA,uBAPJ,mBAOI,YAAA,qBAPJ,iBAOI,YAAA,mBAPJ,oBAOI,YAAA,iBAPJ,sBAOI,YAAA,mBAPJ,qBAOI,YAAA,kBAPJ,qBAOI,cAAA,qBAPJ,mBAOI,cAAA,mBAPJ,sBAOI,cAAA,iBAPJ,uBAOI,cAAA,wBAPJ,sBAOI,cAAA,uBAPJ,uBAOI,cAAA,kBAPJ,iBAOI,WAAA,eAPJ,kBAOI,WAAA,qBAPJ,gBAOI,WAAA,mBAPJ,mBAOI,WAAA,iBAPJ,qBAOI,WAAA,mBAPJ,oBAOI,WAAA,kBAPJ,aAOI,MAAA,aAPJ,SAOI,MAAA,YAPJ,SAOI,MAAA,YAPJ,SAOI,MAAA,YAPJ,SAOI,MAAA,YAPJ,SAOI,MAAA,YAPJ,SAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,KAOI,OAAA,YAPJ,KAOI,OAAA,iBAPJ,KAOI,OAAA,gBAPJ,KAOI,OAAA,eAPJ,KAOI,OAAA,iBAPJ,KAOI,OAAA,eAPJ,QAOI,OAAA,eAPJ,MAOI,aAAA,YAAA,YAAA,YAPJ,MAOI,aAAA,iBAAA,YAAA,iBAPJ,MAOI,aAAA,gBAAA,YAAA,gBAPJ,MAOI,aAAA,eAAA,YAAA,eAPJ,MAOI,aAAA,iBAAA,YAAA,iBAPJ,MAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,MAOI,WAAA,YAAA,cAAA,YAPJ,MAOI,WAAA,iBAAA,cAAA,iBAPJ,MAOI,WAAA,gBAAA,cAAA,gBAPJ,MAOI,WAAA,eAAA,cAAA,eAPJ,MAOI,WAAA,iBAAA,cAAA,iBAPJ,MAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,MAOI,WAAA,YAPJ,MAOI,WAAA,iBAPJ,MAOI,WAAA,gBAPJ,MAOI,WAAA,eAPJ,MAOI,WAAA,iBAPJ,MAOI,WAAA,eAPJ,SAOI,WAAA,eAPJ,MAOI,aAAA,YAPJ,MAOI,aAAA,iBAPJ,MAOI,aAAA,gBAPJ,MAOI,aAAA,eAPJ,MAOI,aAAA,iBAPJ,MAOI,aAAA,eAPJ,SAOI,aAAA,eAPJ,MAOI,cAAA,YAPJ,MAOI,cAAA,iBAPJ,MAOI,cAAA,gBAPJ,MAOI,cAAA,eAPJ,MAOI,cAAA,iBAPJ,MAOI,cAAA,eAPJ,SAOI,cAAA,eAPJ,MAOI,YAAA,YAPJ,MAOI,YAAA,iBAPJ,MAOI,YAAA,gBAPJ,MAOI,YAAA,eAPJ,MAOI,YAAA,iBAPJ,MAOI,YAAA,eAPJ,SAOI,YAAA,eAPJ,KAOI,QAAA,YAPJ,KAOI,QAAA,iBAPJ,KAOI,QAAA,gBAPJ,KAOI,QAAA,eAPJ,KAOI,QAAA,iBAPJ,KAOI,QAAA,eAPJ,MAOI,cAAA,YAAA,aAAA,YAPJ,MAOI,cAAA,iBAAA,aAAA,iBAPJ,MAOI,cAAA,gBAAA,aAAA,gBAPJ,MAOI,cAAA,eAAA,aAAA,eAPJ,MAOI,cAAA,iBAAA,aAAA,iBAPJ,MAOI,cAAA,eAAA,aAAA,eAPJ,MAOI,YAAA,YAAA,eAAA,YAPJ,MAOI,YAAA,iBAAA,eAAA,iBAPJ,MAOI,YAAA,gBAAA,eAAA,gBAPJ,MAOI,YAAA,eAAA,eAAA,eAPJ,MAOI,YAAA,iBAAA,eAAA,iBAPJ,MAOI,YAAA,eAAA,eAAA,eAPJ,MAOI,YAAA,YAPJ,MAOI,YAAA,iBAPJ,MAOI,YAAA,gBAPJ,MAOI,YAAA,eAPJ,MAOI,YAAA,iBAPJ,MAOI,YAAA,eAPJ,MAOI,cAAA,YAPJ,MAOI,cAAA,iBAPJ,MAOI,cAAA,gBAPJ,MAOI,cAAA,eAPJ,MAOI,cAAA,iBAPJ,MAOI,cAAA,eAPJ,MAOI,eAAA,YAPJ,MAOI,eAAA,iBAPJ,MAOI,eAAA,gBAPJ,MAOI,eAAA,eAPJ,MAOI,eAAA,iBAPJ,MAOI,eAAA,eAPJ,MAOI,aAAA,YAPJ,MAOI,aAAA,iBAPJ,MAOI,aAAA,gBAPJ,MAOI,aAAA,eAPJ,MAOI,aAAA,iBAPJ,MAOI,aAAA,eAPJ,gBAOI,YAAA,mCAPJ,MAOI,UAAA,iCAPJ,MAOI,UAAA,gCAPJ,MAOI,UAAA,8BAPJ,MAOI,UAAA,gCAPJ,MAOI,UAAA,kBAPJ,MAOI,UAAA,eAPJ,YAOI,WAAA,iBAPJ,YAOI,WAAA,iBAPJ,UAOI,YAAA,cAPJ,YAOI,YAAA,kBAPJ,WAOI,YAAA,cAPJ,SAOI,YAAA,cAPJ,WAOI,YAAA,iBAPJ,MAOI,YAAA,YAPJ,OAOI,YAAA,eAPJ,SAOI,YAAA,cAPJ,OAOI,YAAA,YAPJ,YAOI,WAAA,eAPJ,UAOI,WAAA,gBAPJ,aAOI,WAAA,iBAPJ,sBAOI,gBAAA,eAPJ,2BAOI,gBAAA,oBAPJ,8BAOI,gBAAA,uBAPJ,gBAOI,eAAA,oBAPJ,gBAOI,eAAA,oBAPJ,iBAOI,eAAA,qBAPJ,WAOI,YAAA,iBAPJ,aAOI,YAAA,iBAPJ,YAOI,UAAA,qBAAA,WAAA,qBAPJ,cAIQ,kBAAA,EAGJ,MAAA,6DAPJ,gBAIQ,kBAAA,EAGJ,MAAA,+DAPJ,cAIQ,kBAAA,EAGJ,MAAA,6DAPJ,WAIQ,kBAAA,EAGJ,MAAA,0DAPJ,cAIQ,kBAAA,EAGJ,MAAA,6DAPJ,aAIQ,kBAAA,EAGJ,MAAA,4DAPJ,YAIQ,kBAAA,EAGJ,MAAA,2DAPJ,WAIQ,kBAAA,EAGJ,MAAA,0DAPJ,YAIQ,kBAAA,EAGJ,MAAA,2DAPJ,YAIQ,kBAAA,EAGJ,MAAA,2DAPJ,WAIQ,kBAAA,EAGJ,MAAA,gEAPJ,YAIQ,kBAAA,EAGJ,MAAA,kBAPJ,eAIQ,kBAAA,EAGJ,MAAA,yBAPJ,eAIQ,kBAAA,EAGJ,MAAA,+BAPJ,YAIQ,kBAAA,EAGJ,MAAA,kBAjBJ,iBACE,kBAAA,KADF,iBACE,kBAAA,IADF,iBACE,kBAAA,KADF,kBACE,kBAAA,EASF,YAIQ,gBAAA,EAGJ,iBAAA,2DAPJ,cAIQ,gBAAA,EAGJ,iBAAA,6DAPJ,YAIQ,gBAAA,EAGJ,iBAAA,2DAPJ,SAIQ,gBAAA,EAGJ,iBAAA,wDAPJ,YAIQ,gBAAA,EAGJ,iBAAA,2DAPJ,WAIQ,gBAAA,EAGJ,iBAAA,0DAPJ,UAIQ,gBAAA,EAGJ,iBAAA,yDAPJ,SAIQ,gBAAA,EAGJ,iBAAA,wDAPJ,UAIQ,gBAAA,EAGJ,iBAAA,yDAPJ,UAIQ,gBAAA,EAGJ,iBAAA,yDAPJ,SAIQ,gBAAA,EAGJ,iBAAA,2DAPJ,gBAIQ,gBAAA,EAGJ,iBAAA,sBAjBJ,eACE,gBAAA,IADF,eACE,gBAAA,KADF,eACE,gBAAA,IADF,eACE,gBAAA,KADF,gBACE,gBAAA,EASF,aAOI,iBAAA,6BAPJ,iBAOI,oBAAA,cAAA,iBAAA,cAAA,YAAA,cAPJ,kBAOI,oBAAA,eAAA,iBAAA,eAAA,YAAA,eAPJ,kBAOI,oBAAA,eAAA,iBAAA,eAAA,YAAA,eAPJ,SAOI,eAAA,eAPJ,SAOI,eAAA,eAPJ,SAOI,cAAA,iBAPJ,WAOI,cAAA,YAPJ,WAOI,cAAA,gBAPJ,WAOI,cAAA,iBAPJ,WAOI,cAAA,gBAPJ,gBAOI,cAAA,cAPJ,cAOI,cAAA,gBAPJ,aAOI,uBAAA,iBAAA,wBAAA,iBAPJ,aAOI,wBAAA,iBAAA,2BAAA,iBAPJ,gBAOI,2BAAA,iBAAA,0BAAA,iBAPJ,eAOI,0BAAA,iBAAA,uBAAA,iBAPJ,SAOI,WAAA,kBAPJ,WAOI,WAAA,iBzDPR,yByDAI,gBAOI,MAAA,eAPJ,cAOI,MAAA,gBAPJ,eAOI,MAAA,eAPJ,aAOI,QAAA,iBAPJ,mBAOI,QAAA,uBAPJ,YAOI,QAAA,gBAPJ,WAOI,QAAA,eAPJ,YAOI,QAAA,gBAPJ,gBAOI,QAAA,oBAPJ,iBAOI,QAAA,qBAPJ,WAOI,QAAA,eAPJ,kBAOI,QAAA,sBAPJ,WAOI,QAAA,eAPJ,cAOI,KAAA,EAAA,EAAA,eAPJ,aAOI,eAAA,cAPJ,gBAOI,eAAA,iBAPJ,qBAOI,eAAA,sBAPJ,wBAOI,eAAA,yBAPJ,gBAOI,UAAA,YAPJ,gBAOI,UAAA,YAPJ,kBAOI,YAAA,YAPJ,kBAOI,YAAA,YAPJ,cAOI,UAAA,eAPJ,gBAOI,UAAA,iBAPJ,sBAOI,UAAA,uBAPJ,UAOI,IAAA,YAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,gBAPJ,UAOI,IAAA,eAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,eAPJ,0BAOI,gBAAA,qBAPJ,wBAOI,gBAAA,mBAPJ,2BAOI,gBAAA,iBAPJ,4BAOI,gBAAA,wBAPJ,2BAOI,gBAAA,uBAPJ,2BAOI,gBAAA,uBAPJ,sBAOI,YAAA,qBAPJ,oBAOI,YAAA,mBAPJ,uBAOI,YAAA,iBAPJ,yBAOI,YAAA,mBAPJ,wBAOI,YAAA,kBAPJ,wBAOI,cAAA,qBAPJ,sBAOI,cAAA,mBAPJ,yBAOI,cAAA,iBAPJ,0BAOI,cAAA,wBAPJ,yBAOI,cAAA,uBAPJ,0BAOI,cAAA,kBAPJ,oBAOI,WAAA,eAPJ,qBAOI,WAAA,qBAPJ,mBAOI,WAAA,mBAPJ,sBAOI,WAAA,iBAPJ,wBAOI,WAAA,mBAPJ,uBAOI,WAAA,kBAPJ,gBAOI,MAAA,aAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,eAOI,MAAA,YAPJ,QAOI,OAAA,YAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,gBAPJ,QAOI,OAAA,eAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,eAPJ,WAOI,OAAA,eAPJ,SAOI,aAAA,YAAA,YAAA,YAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,gBAAA,YAAA,gBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,YAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,WAAA,YAAA,cAAA,YAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,gBAAA,cAAA,gBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,YAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,YAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,gBAPJ,SAOI,WAAA,eAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,eAPJ,YAOI,WAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,YAOI,aAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,YAOI,cAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,YAOI,YAAA,eAPJ,QAOI,QAAA,YAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,gBAPJ,QAOI,QAAA,eAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,eAPJ,SAOI,cAAA,YAAA,aAAA,YAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,gBAAA,aAAA,gBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,YAAA,YAAA,eAAA,YAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,gBAAA,eAAA,gBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,SAOI,eAAA,YAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,gBAPJ,SAOI,eAAA,eAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,eAOI,WAAA,eAPJ,aAOI,WAAA,gBAPJ,gBAOI,WAAA,kBzDPR,yByDAI,gBAOI,MAAA,eAPJ,cAOI,MAAA,gBAPJ,eAOI,MAAA,eAPJ,aAOI,QAAA,iBAPJ,mBAOI,QAAA,uBAPJ,YAOI,QAAA,gBAPJ,WAOI,QAAA,eAPJ,YAOI,QAAA,gBAPJ,gBAOI,QAAA,oBAPJ,iBAOI,QAAA,qBAPJ,WAOI,QAAA,eAPJ,kBAOI,QAAA,sBAPJ,WAOI,QAAA,eAPJ,cAOI,KAAA,EAAA,EAAA,eAPJ,aAOI,eAAA,cAPJ,gBAOI,eAAA,iBAPJ,qBAOI,eAAA,sBAPJ,wBAOI,eAAA,yBAPJ,gBAOI,UAAA,YAPJ,gBAOI,UAAA,YAPJ,kBAOI,YAAA,YAPJ,kBAOI,YAAA,YAPJ,cAOI,UAAA,eAPJ,gBAOI,UAAA,iBAPJ,sBAOI,UAAA,uBAPJ,UAOI,IAAA,YAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,gBAPJ,UAOI,IAAA,eAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,eAPJ,0BAOI,gBAAA,qBAPJ,wBAOI,gBAAA,mBAPJ,2BAOI,gBAAA,iBAPJ,4BAOI,gBAAA,wBAPJ,2BAOI,gBAAA,uBAPJ,2BAOI,gBAAA,uBAPJ,sBAOI,YAAA,qBAPJ,oBAOI,YAAA,mBAPJ,uBAOI,YAAA,iBAPJ,yBAOI,YAAA,mBAPJ,wBAOI,YAAA,kBAPJ,wBAOI,cAAA,qBAPJ,sBAOI,cAAA,mBAPJ,yBAOI,cAAA,iBAPJ,0BAOI,cAAA,wBAPJ,yBAOI,cAAA,uBAPJ,0BAOI,cAAA,kBAPJ,oBAOI,WAAA,eAPJ,qBAOI,WAAA,qBAPJ,mBAOI,WAAA,mBAPJ,sBAOI,WAAA,iBAPJ,wBAOI,WAAA,mBAPJ,uBAOI,WAAA,kBAPJ,gBAOI,MAAA,aAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,eAOI,MAAA,YAPJ,QAOI,OAAA,YAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,gBAPJ,QAOI,OAAA,eAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,eAPJ,WAOI,OAAA,eAPJ,SAOI,aAAA,YAAA,YAAA,YAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,gBAAA,YAAA,gBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,YAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,WAAA,YAAA,cAAA,YAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,gBAAA,cAAA,gBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,YAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,YAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,gBAPJ,SAOI,WAAA,eAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,eAPJ,YAOI,WAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,YAOI,aAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,YAOI,cAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,YAOI,YAAA,eAPJ,QAOI,QAAA,YAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,gBAPJ,QAOI,QAAA,eAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,eAPJ,SAOI,cAAA,YAAA,aAAA,YAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,gBAAA,aAAA,gBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,YAAA,YAAA,eAAA,YAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,gBAAA,eAAA,gBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,SAOI,eAAA,YAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,gBAPJ,SAOI,eAAA,eAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,eAOI,WAAA,eAPJ,aAOI,WAAA,gBAPJ,gBAOI,WAAA,kBzDPR,yByDAI,gBAOI,MAAA,eAPJ,cAOI,MAAA,gBAPJ,eAOI,MAAA,eAPJ,aAOI,QAAA,iBAPJ,mBAOI,QAAA,uBAPJ,YAOI,QAAA,gBAPJ,WAOI,QAAA,eAPJ,YAOI,QAAA,gBAPJ,gBAOI,QAAA,oBAPJ,iBAOI,QAAA,qBAPJ,WAOI,QAAA,eAPJ,kBAOI,QAAA,sBAPJ,WAOI,QAAA,eAPJ,cAOI,KAAA,EAAA,EAAA,eAPJ,aAOI,eAAA,cAPJ,gBAOI,eAAA,iBAPJ,qBAOI,eAAA,sBAPJ,wBAOI,eAAA,yBAPJ,gBAOI,UAAA,YAPJ,gBAOI,UAAA,YAPJ,kBAOI,YAAA,YAPJ,kBAOI,YAAA,YAPJ,cAOI,UAAA,eAPJ,gBAOI,UAAA,iBAPJ,sBAOI,UAAA,uBAPJ,UAOI,IAAA,YAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,gBAPJ,UAOI,IAAA,eAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,eAPJ,0BAOI,gBAAA,qBAPJ,wBAOI,gBAAA,mBAPJ,2BAOI,gBAAA,iBAPJ,4BAOI,gBAAA,wBAPJ,2BAOI,gBAAA,uBAPJ,2BAOI,gBAAA,uBAPJ,sBAOI,YAAA,qBAPJ,oBAOI,YAAA,mBAPJ,uBAOI,YAAA,iBAPJ,yBAOI,YAAA,mBAPJ,wBAOI,YAAA,kBAPJ,wBAOI,cAAA,qBAPJ,sBAOI,cAAA,mBAPJ,yBAOI,cAAA,iBAPJ,0BAOI,cAAA,wBAPJ,yBAOI,cAAA,uBAPJ,0BAOI,cAAA,kBAPJ,oBAOI,WAAA,eAPJ,qBAOI,WAAA,qBAPJ,mBAOI,WAAA,mBAPJ,sBAOI,WAAA,iBAPJ,wBAOI,WAAA,mBAPJ,uBAOI,WAAA,kBAPJ,gBAOI,MAAA,aAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,eAOI,MAAA,YAPJ,QAOI,OAAA,YAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,gBAPJ,QAOI,OAAA,eAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,eAPJ,WAOI,OAAA,eAPJ,SAOI,aAAA,YAAA,YAAA,YAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,gBAAA,YAAA,gBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,YAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,WAAA,YAAA,cAAA,YAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,gBAAA,cAAA,gBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,YAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,YAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,gBAPJ,SAOI,WAAA,eAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,eAPJ,YAOI,WAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,YAOI,aAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,YAOI,cAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,YAOI,YAAA,eAPJ,QAOI,QAAA,YAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,gBAPJ,QAOI,QAAA,eAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,eAPJ,SAOI,cAAA,YAAA,aAAA,YAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,gBAAA,aAAA,gBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,YAAA,YAAA,eAAA,YAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,gBAAA,eAAA,gBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,SAOI,eAAA,YAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,gBAPJ,SAOI,eAAA,eAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,eAOI,WAAA,eAPJ,aAOI,WAAA,gBAPJ,gBAOI,WAAA,kBzDPR,0ByDAI,gBAOI,MAAA,eAPJ,cAOI,MAAA,gBAPJ,eAOI,MAAA,eAPJ,aAOI,QAAA,iBAPJ,mBAOI,QAAA,uBAPJ,YAOI,QAAA,gBAPJ,WAOI,QAAA,eAPJ,YAOI,QAAA,gBAPJ,gBAOI,QAAA,oBAPJ,iBAOI,QAAA,qBAPJ,WAOI,QAAA,eAPJ,kBAOI,QAAA,sBAPJ,WAOI,QAAA,eAPJ,cAOI,KAAA,EAAA,EAAA,eAPJ,aAOI,eAAA,cAPJ,gBAOI,eAAA,iBAPJ,qBAOI,eAAA,sBAPJ,wBAOI,eAAA,yBAPJ,gBAOI,UAAA,YAPJ,gBAOI,UAAA,YAPJ,kBAOI,YAAA,YAPJ,kBAOI,YAAA,YAPJ,cAOI,UAAA,eAPJ,gBAOI,UAAA,iBAPJ,sBAOI,UAAA,uBAPJ,UAOI,IAAA,YAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,gBAPJ,UAOI,IAAA,eAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,eAPJ,0BAOI,gBAAA,qBAPJ,wBAOI,gBAAA,mBAPJ,2BAOI,gBAAA,iBAPJ,4BAOI,gBAAA,wBAPJ,2BAOI,gBAAA,uBAPJ,2BAOI,gBAAA,uBAPJ,sBAOI,YAAA,qBAPJ,oBAOI,YAAA,mBAPJ,uBAOI,YAAA,iBAPJ,yBAOI,YAAA,mBAPJ,wBAOI,YAAA,kBAPJ,wBAOI,cAAA,qBAPJ,sBAOI,cAAA,mBAPJ,yBAOI,cAAA,iBAPJ,0BAOI,cAAA,wBAPJ,yBAOI,cAAA,uBAPJ,0BAOI,cAAA,kBAPJ,oBAOI,WAAA,eAPJ,qBAOI,WAAA,qBAPJ,mBAOI,WAAA,mBAPJ,sBAOI,WAAA,iBAPJ,wBAOI,WAAA,mBAPJ,uBAOI,WAAA,kBAPJ,gBAOI,MAAA,aAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,eAOI,MAAA,YAPJ,QAOI,OAAA,YAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,gBAPJ,QAOI,OAAA,eAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,eAPJ,WAOI,OAAA,eAPJ,SAOI,aAAA,YAAA,YAAA,YAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,gBAAA,YAAA,gBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,YAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,WAAA,YAAA,cAAA,YAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,gBAAA,cAAA,gBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,YAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,YAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,gBAPJ,SAOI,WAAA,eAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,eAPJ,YAOI,WAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,YAOI,aAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,YAOI,cAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,YAOI,YAAA,eAPJ,QAOI,QAAA,YAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,gBAPJ,QAOI,QAAA,eAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,eAPJ,SAOI,cAAA,YAAA,aAAA,YAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,gBAAA,aAAA,gBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,YAAA,YAAA,eAAA,YAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,gBAAA,eAAA,gBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,SAOI,eAAA,YAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,gBAPJ,SAOI,eAAA,eAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,eAOI,WAAA,eAPJ,aAOI,WAAA,gBAPJ,gBAOI,WAAA,kBzDPR,0ByDAI,iBAOI,MAAA,eAPJ,eAOI,MAAA,gBAPJ,gBAOI,MAAA,eAPJ,cAOI,QAAA,iBAPJ,oBAOI,QAAA,uBAPJ,aAOI,QAAA,gBAPJ,YAOI,QAAA,eAPJ,aAOI,QAAA,gBAPJ,iBAOI,QAAA,oBAPJ,kBAOI,QAAA,qBAPJ,YAOI,QAAA,eAPJ,mBAOI,QAAA,sBAPJ,YAOI,QAAA,eAPJ,eAOI,KAAA,EAAA,EAAA,eAPJ,cAOI,eAAA,cAPJ,iBAOI,eAAA,iBAPJ,sBAOI,eAAA,sBAPJ,yBAOI,eAAA,yBAPJ,iBAOI,UAAA,YAPJ,iBAOI,UAAA,YAPJ,mBAOI,YAAA,YAPJ,mBAOI,YAAA,YAPJ,eAOI,UAAA,eAPJ,iBAOI,UAAA,iBAPJ,uBAOI,UAAA,uBAPJ,WAOI,IAAA,YAPJ,WAOI,IAAA,iBAPJ,WAOI,IAAA,gBAPJ,WAOI,IAAA,eAPJ,WAOI,IAAA,iBAPJ,WAOI,IAAA,eAPJ,2BAOI,gBAAA,qBAPJ,yBAOI,gBAAA,mBAPJ,4BAOI,gBAAA,iBAPJ,6BAOI,gBAAA,wBAPJ,4BAOI,gBAAA,uBAPJ,4BAOI,gBAAA,uBAPJ,uBAOI,YAAA,qBAPJ,qBAOI,YAAA,mBAPJ,wBAOI,YAAA,iBAPJ,0BAOI,YAAA,mBAPJ,yBAOI,YAAA,kBAPJ,yBAOI,cAAA,qBAPJ,uBAOI,cAAA,mBAPJ,0BAOI,cAAA,iBAPJ,2BAOI,cAAA,wBAPJ,0BAOI,cAAA,uBAPJ,2BAOI,cAAA,kBAPJ,qBAOI,WAAA,eAPJ,sBAOI,WAAA,qBAPJ,oBAOI,WAAA,mBAPJ,uBAOI,WAAA,iBAPJ,yBAOI,WAAA,mBAPJ,wBAOI,WAAA,kBAPJ,iBAOI,MAAA,aAPJ,aAOI,MAAA,YAPJ,aAOI,MAAA,YAPJ,aAOI,MAAA,YAPJ,aAOI,MAAA,YAPJ,aAOI,MAAA,YAPJ,aAOI,MAAA,YAPJ,gBAOI,MAAA,YAPJ,SAOI,OAAA,YAPJ,SAOI,OAAA,iBAPJ,SAOI,OAAA,gBAPJ,SAOI,OAAA,eAPJ,SAOI,OAAA,iBAPJ,SAOI,OAAA,eAPJ,YAOI,OAAA,eAPJ,UAOI,aAAA,YAAA,YAAA,YAPJ,UAOI,aAAA,iBAAA,YAAA,iBAPJ,UAOI,aAAA,gBAAA,YAAA,gBAPJ,UAOI,aAAA,eAAA,YAAA,eAPJ,UAOI,aAAA,iBAAA,YAAA,iBAPJ,UAOI,aAAA,eAAA,YAAA,eAPJ,aAOI,aAAA,eAAA,YAAA,eAPJ,UAOI,WAAA,YAAA,cAAA,YAPJ,UAOI,WAAA,iBAAA,cAAA,iBAPJ,UAOI,WAAA,gBAAA,cAAA,gBAPJ,UAOI,WAAA,eAAA,cAAA,eAPJ,UAOI,WAAA,iBAAA,cAAA,iBAPJ,UAOI,WAAA,eAAA,cAAA,eAPJ,aAOI,WAAA,eAAA,cAAA,eAPJ,UAOI,WAAA,YAPJ,UAOI,WAAA,iBAPJ,UAOI,WAAA,gBAPJ,UAOI,WAAA,eAPJ,UAOI,WAAA,iBAPJ,UAOI,WAAA,eAPJ,aAOI,WAAA,eAPJ,UAOI,aAAA,YAPJ,UAOI,aAAA,iBAPJ,UAOI,aAAA,gBAPJ,UAOI,aAAA,eAPJ,UAOI,aAAA,iBAPJ,UAOI,aAAA,eAPJ,aAOI,aAAA,eAPJ,UAOI,cAAA,YAPJ,UAOI,cAAA,iBAPJ,UAOI,cAAA,gBAPJ,UAOI,cAAA,eAPJ,UAOI,cAAA,iBAPJ,UAOI,cAAA,eAPJ,aAOI,cAAA,eAPJ,UAOI,YAAA,YAPJ,UAOI,YAAA,iBAPJ,UAOI,YAAA,gBAPJ,UAOI,YAAA,eAPJ,UAOI,YAAA,iBAPJ,UAOI,YAAA,eAPJ,aAOI,YAAA,eAPJ,SAOI,QAAA,YAPJ,SAOI,QAAA,iBAPJ,SAOI,QAAA,gBAPJ,SAOI,QAAA,eAPJ,SAOI,QAAA,iBAPJ,SAOI,QAAA,eAPJ,UAOI,cAAA,YAAA,aAAA,YAPJ,UAOI,cAAA,iBAAA,aAAA,iBAPJ,UAOI,cAAA,gBAAA,aAAA,gBAPJ,UAOI,cAAA,eAAA,aAAA,eAPJ,UAOI,cAAA,iBAAA,aAAA,iBAPJ,UAOI,cAAA,eAAA,aAAA,eAPJ,UAOI,YAAA,YAAA,eAAA,YAPJ,UAOI,YAAA,iBAAA,eAAA,iBAPJ,UAOI,YAAA,gBAAA,eAAA,gBAPJ,UAOI,YAAA,eAAA,eAAA,eAPJ,UAOI,YAAA,iBAAA,eAAA,iBAPJ,UAOI,YAAA,eAAA,eAAA,eAPJ,UAOI,YAAA,YAPJ,UAOI,YAAA,iBAPJ,UAOI,YAAA,gBAPJ,UAOI,YAAA,eAPJ,UAOI,YAAA,iBAPJ,UAOI,YAAA,eAPJ,UAOI,cAAA,YAPJ,UAOI,cAAA,iBAPJ,UAOI,cAAA,gBAPJ,UAOI,cAAA,eAPJ,UAOI,cAAA,iBAPJ,UAOI,cAAA,eAPJ,UAOI,eAAA,YAPJ,UAOI,eAAA,iBAPJ,UAOI,eAAA,gBAPJ,UAOI,eAAA,eAPJ,UAOI,eAAA,iBAPJ,UAOI,eAAA,eAPJ,UAOI,aAAA,YAPJ,UAOI,aAAA,iBAPJ,UAOI,aAAA,gBAPJ,UAOI,aAAA,eAPJ,UAOI,aAAA,iBAPJ,UAOI,aAAA,eAPJ,gBAOI,WAAA,eAPJ,cAOI,WAAA,gBAPJ,iBAOI,WAAA,kBCnDZ,0BD4CQ,MAOI,UAAA,iBAPJ,MAOI,UAAA,eAPJ,MAOI,UAAA,kBAPJ,MAOI,UAAA,kBChCZ,aDyBQ,gBAOI,QAAA,iBAPJ,sBAOI,QAAA,uBAPJ,eAOI,QAAA,gBAPJ,cAOI,QAAA,eAPJ,eAOI,QAAA,gBAPJ,mBAOI,QAAA,oBAPJ,oBAOI,QAAA,qBAPJ,cAOI,QAAA,eAPJ,qBAOI,QAAA,sBAPJ,cAOI,QAAA","sourcesContent":["/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n// scss-docs-start import-stack\n// Configuration\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"utilities\";\n\n// Layout & components\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"containers\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"accordion\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"alert\";\n@import \"progress\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"offcanvas\";\n@import \"placeholders\";\n\n// Helpers\n@import \"helpers\";\n\n// Utilities\n@import \"utilities/api\";\n// scss-docs-end import-stack\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 --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$variable-prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$variable-prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$variable-prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$variable-prefix}white-rgb: #{to-rgb($white)};\n --#{$variable-prefix}black-rgb: #{to-rgb($black)};\n --#{$variable-prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$variable-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 --#{$variable-prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$variable-prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$variable-prefix}gradient: #{$gradient};\n\n // Root and body\n // stylelint-disable custom-property-empty-line-before\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$variable-prefix}root-font-size: #{$font-size-root};\n }\n --#{$variable-prefix}body-font-family: #{$font-family-base};\n --#{$variable-prefix}body-font-size: #{$font-size-base};\n --#{$variable-prefix}body-font-weight: #{$font-weight-base};\n --#{$variable-prefix}body-line-height: #{$line-height-base};\n --#{$variable-prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$variable-prefix}body-text-align: #{$body-text-align};\n }\n --#{$variable-prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n // stylelint-enable custom-property-empty-line-before\n}\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 font-size: var(--#{$variable-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(--#{$variable-prefix}body-font-family);\n @include font-size(var(--#{$variable-prefix}body-font-size));\n font-weight: var(--#{$variable-prefix}body-font-weight);\n line-height: var(--#{$variable-prefix}body-line-height);\n color: var(--#{$variable-prefix}body-color);\n text-align: var(--#{$variable-prefix}body-text-align);\n background-color: var(--#{$variable-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// 2. Set correct height and prevent the `size` attribute to make the `hr` look like an input field\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n background-color: currentColor;\n border: 0;\n opacity: $hr-opacity;\n}\n\nhr:not([size]) {\n height: $hr-height; // 2\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `<h1>`-`<h6>` 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 `<p>`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. Duplicate behavior to the data-bs-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-bs-original-title] { // 1\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n text-decoration-skip-ink: none; // 4\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: $mark-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: $link-color;\n text-decoration: $link-decoration;\n\n &:hover {\n color: $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 direction: ltr #{\"/* rtl:ignore */\"};\n unicode-bidi: bidi-override;\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: $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 `<td>` 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-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n // Remove the inheritance of word-wrap in Safari.\n // See https://github.com/twbs/bootstrap/issues/24990\n word-wrap: normal;\n\n // Undo the opacity change from Chrome\n &:disabled {\n opacity: 1;\n }\n}\n\n// Remove the dropdown arrow in Chrome from inputs built with datalists.\n// See https://stackoverflow.com/a/54997118\n\n[list]::-webkit-calendar-picker-indicator {\n display: none;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n\n @if $enable-button-pointers {\n &:not(:disabled) {\n cursor: pointer; // 3\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n// unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n// So we reset that to ensure fieldsets behave more like a standard block element.\n// See https://github.com/twbs/bootstrap/issues/12359\n// and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n min-width: 0; // 1\n padding: 0; // 2\n margin: 0; // 2\n border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n// This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n// See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n float: left; // 1\n width: 100%;\n padding: 0;\n margin-bottom: $legend-margin-bottom;\n @include font-size($legend-font-size);\n font-weight: $legend-font-weight;\n line-height: inherit;\n\n + * {\n clear: left; // 2\n }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\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// 1. Correct the outline style in Safari.\n// 2. This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\n[type=\"search\"] {\n outline-offset: -2px; // 1\n -webkit-appearance: textfield; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n\n// Inherit font family and line height for file input buttons\n\n::file-selector-button {\n font: inherit;\n}\n\n// 1. Change font properties to `inherit`\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::-webkit-file-upload-button {\n font: inherit; // 1\n -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n display: list-item; // 1\n cursor: pointer;\n}\n\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n vertical-align: baseline;\n}\n\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n display: none !important;\n}\n","@charset \"UTF-8\";\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 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-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\", Arial, \"Noto Sans\", \"Liberation Sans\", 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}\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 background-color: currentColor;\n border: 0;\n opacity: 0.25;\n}\n\nhr:not([size]) {\n height: 1px;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1, .h1 {\n font-size: 2.5rem;\n }\n}\n\nh2, .h2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2, .h2 {\n font-size: 2rem;\n }\n}\n\nh3, .h3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3, .h3 {\n font-size: 1.75rem;\n }\n}\n\nh4, .h4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4, .h4 {\n font-size: 1.5rem;\n }\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n -webkit-text-decoration-skip-ink: none;\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, .small {\n font-size: 0.875em;\n}\n\nmark, .mark {\n padding: 0.2em;\n background-color: #fcf8e3;\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: #0d6efd;\n text-decoration: underline;\n}\na:hover {\n color: #0a58ca;\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 direction: ltr /* rtl:ignore */;\n unicode-bidi: bidi-override;\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: #d63384;\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 0.875em;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n font-weight: 700;\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]::-webkit-calendar-picker-indicator {\n display: none;\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::-webkit-file-upload-button {\n font: inherit;\n}\n\n::file-selector-button {\n font: inherit;\n}\n\n::-webkit-file-upload-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.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: calc(1.625rem + 4.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-1 {\n font-size: 5rem;\n }\n}\n\n.display-2 {\n font-size: calc(1.575rem + 3.9vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-2 {\n font-size: 4.5rem;\n }\n}\n\n.display-3 {\n font-size: calc(1.525rem + 3.3vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-3 {\n font-size: 4rem;\n }\n}\n\n.display-4 {\n font-size: calc(1.475rem + 2.7vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-4 {\n font-size: 3.5rem;\n }\n}\n\n.display-5 {\n font-size: calc(1.425rem + 2.1vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-5 {\n font-size: 3rem;\n }\n}\n\n.display-6 {\n font-size: calc(1.375rem + 1.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-6 {\n font-size: 2.5rem;\n }\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 0.875em;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n.blockquote > :last-child {\n margin-bottom: 0;\n}\n\n.blockquote-footer {\n margin-top: -1rem;\n margin-bottom: 1rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n.blockquote-footer::before {\n content: \"— \";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 0.875em;\n color: #6c757d;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n width: 100%;\n padding-right: var(--bs-gutter-x, 0.75rem);\n padding-left: var(--bs-gutter-x, 0.75rem);\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 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\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-sm-0 {\n margin-left: 0;\n }\n\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-sm-3 {\n margin-left: 25%;\n }\n\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-sm-6 {\n margin-left: 50%;\n }\n\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-sm-9 {\n margin-left: 75%;\n }\n\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\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\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-md-0 {\n margin-left: 0;\n }\n\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-md-3 {\n margin-left: 25%;\n }\n\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-md-6 {\n margin-left: 50%;\n }\n\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-md-9 {\n margin-left: 75%;\n }\n\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\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\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-lg-0 {\n margin-left: 0;\n }\n\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-lg-3 {\n margin-left: 25%;\n }\n\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-lg-6 {\n margin-left: 50%;\n }\n\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-lg-9 {\n margin-left: 75%;\n }\n\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\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\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-xl-0 {\n margin-left: 0;\n }\n\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-xl-3 {\n margin-left: 25%;\n }\n\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-xl-6 {\n margin-left: 50%;\n }\n\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-xl-9 {\n margin-left: 75%;\n }\n\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\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\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n\n .offset-xxl-0 {\n margin-left: 0;\n }\n\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n\n .offset-xxl-3 {\n margin-left: 25%;\n }\n\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n\n .offset-xxl-6 {\n margin-left: 50%;\n }\n\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n\n .offset-xxl-9 {\n margin-left: 75%;\n }\n\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.table {\n --bs-table-bg: transparent;\n --bs-table-accent-bg: transparent;\n --bs-table-striped-color: #212529;\n --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n --bs-table-active-color: #212529;\n --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n --bs-table-hover-color: #212529;\n --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n vertical-align: top;\n border-color: #dee2e6;\n}\n.table > :not(caption) > * > * {\n padding: 0.5rem 0.5rem;\n background-color: var(--bs-table-bg);\n border-bottom-width: 1px;\n box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n.table > tbody {\n vertical-align: inherit;\n}\n.table > thead {\n vertical-align: bottom;\n}\n.table > :not(:first-child) {\n border-top: 2px solid currentColor;\n}\n\n.caption-top {\n caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n border-width: 1px 0;\n}\n.table-bordered > :not(caption) > * > * {\n border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-active {\n --bs-table-accent-bg: var(--bs-table-active-bg);\n color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n --bs-table-accent-bg: var(--bs-table-hover-bg);\n color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n --bs-table-bg: #cfe2ff;\n --bs-table-striped-bg: #c5d7f2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bacbe6;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfd1ec;\n --bs-table-hover-color: #000;\n color: #000;\n border-color: #bacbe6;\n}\n\n.table-secondary {\n --bs-table-bg: #e2e3e5;\n --bs-table-striped-bg: #d7d8da;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #cbccce;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #d1d2d4;\n --bs-table-hover-color: #000;\n color: #000;\n border-color: #cbccce;\n}\n\n.table-success {\n --bs-table-bg: #d1e7dd;\n --bs-table-striped-bg: #c7dbd2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bcd0c7;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #c1d6cc;\n --bs-table-hover-color: #000;\n color: #000;\n border-color: #bcd0c7;\n}\n\n.table-info {\n --bs-table-bg: #cff4fc;\n --bs-table-striped-bg: #c5e8ef;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #badce3;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfe2e9;\n --bs-table-hover-color: #000;\n color: #000;\n border-color: #badce3;\n}\n\n.table-warning {\n --bs-table-bg: #fff3cd;\n --bs-table-striped-bg: #f2e7c3;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #e6dbb9;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #ece1be;\n --bs-table-hover-color: #000;\n color: #000;\n border-color: #e6dbb9;\n}\n\n.table-danger {\n --bs-table-bg: #f8d7da;\n --bs-table-striped-bg: #eccccf;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfc2c4;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5c7ca;\n --bs-table-hover-color: #000;\n color: #000;\n border-color: #dfc2c4;\n}\n\n.table-light {\n --bs-table-bg: #f8f9fa;\n --bs-table-striped-bg: #ecedee;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfe0e1;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5e6e7;\n --bs-table-hover-color: #000;\n color: #000;\n border-color: #dfe0e1;\n}\n\n.table-dark {\n --bs-table-bg: #212529;\n --bs-table-striped-bg: #2c3034;\n --bs-table-striped-color: #fff;\n --bs-table-active-bg: #373b3e;\n --bs-table-active-color: #fff;\n --bs-table-hover-bg: #323539;\n --bs-table-hover-color: #fff;\n color: #fff;\n border-color: #373b3e;\n}\n\n.table-responsive {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 767.98px) {\n .table-responsive-md {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1399.98px) {\n .table-responsive-xxl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n.form-label {\n margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n}\n\n.form-text {\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n\n.form-control {\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n.form-control[type=file] {\n overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control:focus {\n color: #212529;\n background-color: #fff;\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n height: 1.5em;\n}\n.form-control::-moz-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n.form-control::-webkit-file-upload-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n -webkit-margin-end: 0.75rem;\n margin-inline-end: 0.75rem;\n color: #212529;\n background-color: #e9ecef;\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: 1px;\n border-radius: 0;\n -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n.form-control::file-selector-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n -webkit-margin-end: 0.75rem;\n margin-inline-end: 0.75rem;\n color: #212529;\n background-color: #e9ecef;\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: 1px;\n border-radius: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control::-webkit-file-upload-button {\n -webkit-transition: none;\n transition: none;\n }\n .form-control::file-selector-button {\n transition: none;\n }\n}\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n background-color: #dde0e3;\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: #dde0e3;\n}\n.form-control::-webkit-file-upload-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n -webkit-margin-end: 0.75rem;\n margin-inline-end: 0.75rem;\n color: #212529;\n background-color: #e9ecef;\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: 1px;\n border-radius: 0;\n -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control::-webkit-file-upload-button {\n -webkit-transition: none;\n transition: none;\n }\n}\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n background-color: #dde0e3;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n min-height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.2rem;\n}\n.form-control-sm::-webkit-file-upload-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n -webkit-margin-end: 0.5rem;\n margin-inline-end: 0.5rem;\n}\n.form-control-sm::file-selector-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n -webkit-margin-end: 0.5rem;\n margin-inline-end: 0.5rem;\n}\n.form-control-sm::-webkit-file-upload-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n -webkit-margin-end: 0.5rem;\n margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n min-height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.3rem;\n}\n.form-control-lg::-webkit-file-upload-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n -webkit-margin-end: 1rem;\n margin-inline-end: 1rem;\n}\n.form-control-lg::file-selector-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n -webkit-margin-end: 1rem;\n margin-inline-end: 1rem;\n}\n.form-control-lg::-webkit-file-upload-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n -webkit-margin-end: 1rem;\n margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n min-height: calc(1.5em + 0.75rem + 2px);\n}\ntextarea.form-control-sm {\n min-height: calc(1.5em + 0.5rem + 2px);\n}\ntextarea.form-control-lg {\n min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n width: 3rem;\n height: auto;\n padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n height: 1.5em;\n border-radius: 0.25rem;\n}\n.form-control-color::-webkit-color-swatch {\n height: 1.5em;\n border-radius: 0.25rem;\n}\n\n.form-select {\n display: block;\n width: 100%;\n padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n -moz-padding-start: calc(0.75rem - 3px);\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n background-color: #fff;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right 0.75rem center;\n background-size: 16px 12px;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-select {\n transition: none;\n }\n}\n.form-select:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n padding-right: 0.75rem;\n background-image: none;\n}\n.form-select:disabled {\n background-color: #e9ecef;\n}\n.form-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #212529;\n}\n\n.form-select-sm {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.2rem;\n}\n\n.form-select-lg {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n border-radius: 0.3rem;\n}\n\n.form-check {\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5em;\n margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n float: left;\n margin-left: -1.5em;\n}\n\n.form-check-input {\n width: 1em;\n height: 1em;\n margin-top: 0.25em;\n vertical-align: top;\n background-color: #fff;\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: 1px solid rgba(0, 0, 0, 0.25);\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n -webkit-print-color-adjust: exact;\n color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n border-radius: 50%;\n}\n.form-check-input:active {\n filter: brightness(90%);\n}\n.form-check-input:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-check-input:checked {\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.form-check-input:checked[type=checkbox] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n background-color: #0d6efd;\n border-color: #0d6efd;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n pointer-events: none;\n filter: none;\n opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n opacity: 0.5;\n}\n\n.form-switch {\n padding-left: 2.5em;\n}\n.form-switch .form-check-input {\n width: 2em;\n margin-left: -2.5em;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n background-position: left center;\n border-radius: 2em;\n transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-switch .form-check-input {\n transition: none;\n }\n}\n.form-switch .form-check-input:focus {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n background-position: right center;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: 1rem;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n pointer-events: none;\n filter: none;\n opacity: 0.65;\n}\n\n.form-range {\n width: 100%;\n height: 1.5rem;\n padding: 0;\n background-color: transparent;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n.form-range:focus {\n outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range::-moz-focus-outer {\n border: 0;\n}\n.form-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -webkit-appearance: none;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-webkit-slider-thumb {\n -webkit-transition: none;\n transition: none;\n }\n}\n.form-range::-webkit-slider-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -moz-appearance: none;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-moz-range-thumb {\n -moz-transition: none;\n transition: none;\n }\n}\n.form-range::-moz-range-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range:disabled {\n pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n.form-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.form-floating {\n position: relative;\n}\n.form-floating > .form-control,\n.form-floating > .form-select {\n height: calc(3.5rem + 2px);\n line-height: 1.25;\n}\n.form-floating > label {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n padding: 1rem 0.75rem;\n pointer-events: none;\n border: 1px solid transparent;\n transform-origin: 0 0;\n transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-floating > label {\n transition: none;\n }\n}\n.form-floating > .form-control {\n padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::-moz-placeholder {\n color: transparent;\n}\n.form-floating > .form-control::placeholder {\n color: transparent;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n z-index: 3;\n}\n.input-group .btn {\n position: relative;\n z-index: 2;\n}\n.input-group .btn:focus {\n z-index: 3;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.2rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n margin-left: -1px;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #198754;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: rgba(25, 135, 84, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #198754;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #198754;\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n border-color: #198754;\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n padding-right: 4.125rem;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n border-color: #198754;\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n border-color: #198754;\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n background-color: #198754;\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #198754;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid,\n.was-validated .input-group .form-select:valid,\n.input-group .form-select.is-valid {\n z-index: 1;\n}\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus,\n.was-validated .input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n z-index: 3;\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n border-color: #dc3545;\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n padding-right: 4.125rem;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n border-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n background-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid,\n.was-validated .input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n z-index: 2;\n}\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus,\n.was-validated .input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n z-index: 3;\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: center;\n text-decoration: none;\n vertical-align: middle;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n background-color: transparent;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n.btn:hover {\n color: #212529;\n}\n.btn-check:focus + .btn, .btn:focus {\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n pointer-events: none;\n opacity: 0.65;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.btn-primary:hover {\n color: #fff;\n background-color: #0b5ed7;\n border-color: #0a58ca;\n}\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n color: #fff;\n background-color: #0b5ed7;\n border-color: #0a58ca;\n box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5);\n}\n.btn-check:checked + .btn-primary, .btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active, .show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0a58ca;\n border-color: #0a53be;\n}\n.btn-check:checked + .btn-primary:focus, .btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus, .show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5);\n}\n.btn-primary:disabled, .btn-primary.disabled {\n color: #fff;\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n.btn-secondary:hover {\n color: #fff;\n background-color: #5c636a;\n border-color: #565e64;\n}\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n color: #fff;\n background-color: #5c636a;\n border-color: #565e64;\n box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5);\n}\n.btn-check:checked + .btn-secondary, .btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active, .show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #565e64;\n border-color: #51585e;\n}\n.btn-check:checked + .btn-secondary:focus, .btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus, .show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5);\n}\n.btn-secondary:disabled, .btn-secondary.disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-success {\n color: #fff;\n background-color: #198754;\n border-color: #198754;\n}\n.btn-success:hover {\n color: #fff;\n background-color: #157347;\n border-color: #146c43;\n}\n.btn-check:focus + .btn-success, .btn-success:focus {\n color: #fff;\n background-color: #157347;\n border-color: #146c43;\n box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5);\n}\n.btn-check:checked + .btn-success, .btn-check:active + .btn-success, .btn-success:active, .btn-success.active, .show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #146c43;\n border-color: #13653f;\n}\n.btn-check:checked + .btn-success:focus, .btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus, .show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5);\n}\n.btn-success:disabled, .btn-success.disabled {\n color: #fff;\n background-color: #198754;\n border-color: #198754;\n}\n\n.btn-info {\n color: #000;\n background-color: #0dcaf0;\n border-color: #0dcaf0;\n}\n.btn-info:hover {\n color: #000;\n background-color: #31d2f2;\n border-color: #25cff2;\n}\n.btn-check:focus + .btn-info, .btn-info:focus {\n color: #000;\n background-color: #31d2f2;\n border-color: #25cff2;\n box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5);\n}\n.btn-check:checked + .btn-info, .btn-check:active + .btn-info, .btn-info:active, .btn-info.active, .show > .btn-info.dropdown-toggle {\n color: #000;\n background-color: #3dd5f3;\n border-color: #25cff2;\n}\n.btn-check:checked + .btn-info:focus, .btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus, .show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5);\n}\n.btn-info:disabled, .btn-info.disabled {\n color: #000;\n background-color: #0dcaf0;\n border-color: #0dcaf0;\n}\n\n.btn-warning {\n color: #000;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n.btn-warning:hover {\n color: #000;\n background-color: #ffca2c;\n border-color: #ffc720;\n}\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n color: #000;\n background-color: #ffca2c;\n border-color: #ffc720;\n box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5);\n}\n.btn-check:checked + .btn-warning, .btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active, .show > .btn-warning.dropdown-toggle {\n color: #000;\n background-color: #ffcd39;\n border-color: #ffc720;\n}\n.btn-check:checked + .btn-warning:focus, .btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus, .show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5);\n}\n.btn-warning:disabled, .btn-warning.disabled {\n color: #000;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n.btn-danger:hover {\n color: #fff;\n background-color: #bb2d3b;\n border-color: #b02a37;\n}\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n color: #fff;\n background-color: #bb2d3b;\n border-color: #b02a37;\n box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5);\n}\n.btn-check:checked + .btn-danger, .btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active, .show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #b02a37;\n border-color: #a52834;\n}\n.btn-check:checked + .btn-danger:focus, .btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus, .show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5);\n}\n.btn-danger:disabled, .btn-danger.disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-light {\n color: #000;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n.btn-light:hover {\n color: #000;\n background-color: #f9fafb;\n border-color: #f9fafb;\n}\n.btn-check:focus + .btn-light, .btn-light:focus {\n color: #000;\n background-color: #f9fafb;\n border-color: #f9fafb;\n box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n.btn-check:checked + .btn-light, .btn-check:active + .btn-light, .btn-light:active, .btn-light.active, .show > .btn-light.dropdown-toggle {\n color: #000;\n background-color: #f9fafb;\n border-color: #f9fafb;\n}\n.btn-check:checked + .btn-light:focus, .btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus, .show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n.btn-light:disabled, .btn-light.disabled {\n color: #000;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-dark {\n color: #fff;\n background-color: #212529;\n border-color: #212529;\n}\n.btn-dark:hover {\n color: #fff;\n background-color: #1c1f23;\n border-color: #1a1e21;\n}\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n color: #fff;\n background-color: #1c1f23;\n border-color: #1a1e21;\n box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5);\n}\n.btn-check:checked + .btn-dark, .btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active, .show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1a1e21;\n border-color: #191c1f;\n}\n.btn-check:checked + .btn-dark:focus, .btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus, .show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5);\n}\n.btn-dark:disabled, .btn-dark.disabled {\n color: #fff;\n background-color: #212529;\n border-color: #212529;\n}\n\n.btn-outline-primary {\n color: #0d6efd;\n border-color: #0d6efd;\n}\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5);\n}\n.btn-check:checked + .btn-outline-primary, .btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n color: #fff;\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.btn-check:checked + .btn-outline-primary:focus, .btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5);\n}\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n color: #0d6efd;\n background-color: transparent;\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n border-color: #6c757d;\n}\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5);\n}\n.btn-check:checked + .btn-outline-secondary, .btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n.btn-check:checked + .btn-outline-secondary:focus, .btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5);\n}\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-success {\n color: #198754;\n border-color: #198754;\n}\n.btn-outline-success:hover {\n color: #fff;\n background-color: #198754;\n border-color: #198754;\n}\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5);\n}\n.btn-check:checked + .btn-outline-success, .btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n color: #fff;\n background-color: #198754;\n border-color: #198754;\n}\n.btn-check:checked + .btn-outline-success:focus, .btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5);\n}\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n color: #198754;\n background-color: transparent;\n}\n\n.btn-outline-info {\n color: #0dcaf0;\n border-color: #0dcaf0;\n}\n.btn-outline-info:hover {\n color: #000;\n background-color: #0dcaf0;\n border-color: #0dcaf0;\n}\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5);\n}\n.btn-check:checked + .btn-outline-info, .btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n color: #000;\n background-color: #0dcaf0;\n border-color: #0dcaf0;\n}\n.btn-check:checked + .btn-outline-info:focus, .btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5);\n}\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n color: #0dcaf0;\n background-color: transparent;\n}\n\n.btn-outline-warning {\n color: #ffc107;\n border-color: #ffc107;\n}\n.btn-outline-warning:hover {\n color: #000;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5);\n}\n.btn-check:checked + .btn-outline-warning, .btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n color: #000;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n.btn-check:checked + .btn-outline-warning:focus, .btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5);\n}\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-danger {\n color: #dc3545;\n border-color: #dc3545;\n}\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5);\n}\n.btn-check:checked + .btn-outline-danger, .btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n.btn-check:checked + .btn-outline-danger:focus, .btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5);\n}\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n border-color: #f8f9fa;\n}\n.btn-outline-light:hover {\n color: #000;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n.btn-check:checked + .btn-outline-light, .btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n color: #000;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n.btn-check:checked + .btn-outline-light:focus, .btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-dark {\n color: #212529;\n border-color: #212529;\n}\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #212529;\n border-color: #212529;\n}\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5);\n}\n.btn-check:checked + .btn-outline-dark, .btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n color: #fff;\n background-color: #212529;\n border-color: #212529;\n}\n.btn-check:checked + .btn-outline-dark:focus, .btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5);\n}\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n color: #212529;\n background-color: transparent;\n}\n\n.btn-link {\n font-weight: 400;\n color: #0d6efd;\n text-decoration: underline;\n}\n.btn-link:hover {\n color: #0a58ca;\n}\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.2rem;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n.collapsing.collapse-horizontal {\n width: 0;\n height: auto;\n transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing.collapse-horizontal {\n transition: none;\n }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n z-index: 1000;\n display: none;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n.dropdown-menu[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-end {\n --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-start {\n --bs-position: start;\n }\n .dropdown-menu-sm-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n\n .dropdown-menu-sm-end {\n --bs-position: end;\n }\n .dropdown-menu-sm-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 768px) {\n .dropdown-menu-md-start {\n --bs-position: start;\n }\n .dropdown-menu-md-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n\n .dropdown-menu-md-end {\n --bs-position: end;\n }\n .dropdown-menu-md-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 992px) {\n .dropdown-menu-lg-start {\n --bs-position: start;\n }\n .dropdown-menu-lg-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n\n .dropdown-menu-lg-end {\n --bs-position: end;\n }\n .dropdown-menu-lg-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1200px) {\n .dropdown-menu-xl-start {\n --bs-position: start;\n }\n .dropdown-menu-xl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n\n .dropdown-menu-xl-end {\n --bs-position: end;\n }\n .dropdown-menu-xl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1400px) {\n .dropdown-menu-xxl-start {\n --bs-position: start;\n }\n .dropdown-menu-xxl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n\n .dropdown-menu-xxl-end {\n --bs-position: end;\n }\n .dropdown-menu-xxl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n.dropend .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropend .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n.dropstart .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n display: none;\n}\n.dropstart .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n text-decoration: none;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n.dropdown-item:hover, .dropdown-item:focus {\n color: #1e2125;\n background-color: #e9ecef;\n}\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #0d6efd;\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #adb5bd;\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1rem;\n color: #212529;\n}\n\n.dropdown-menu-dark {\n color: #dee2e6;\n background-color: #343a40;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.dropdown-menu-dark .dropdown-item {\n color: #dee2e6;\n}\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n color: #fff;\n background-color: rgba(255, 255, 255, 0.15);\n}\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n color: #fff;\n background-color: #0d6efd;\n}\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n color: #adb5bd;\n}\n.dropdown-menu-dark .dropdown-divider {\n border-color: rgba(0, 0, 0, 0.15);\n}\n.dropdown-menu-dark .dropdown-item-text {\n color: #dee2e6;\n}\n.dropdown-menu-dark .dropdown-header {\n color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n color: #0d6efd;\n text-decoration: none;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .nav-link {\n transition: none;\n }\n}\n.nav-link:hover, .nav-link:focus {\n color: #0a58ca;\n}\n.nav-link.disabled {\n color: #6c757d;\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n.nav-tabs .nav-link {\n margin-bottom: -1px;\n background: none;\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n isolation: isolate;\n}\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n background: none;\n border: 0;\n border-radius: 0.25rem;\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #0d6efd;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n width: 100%;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n}\n.navbar-brand {\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n text-decoration: none;\n white-space: nowrap;\n}\n.navbar-nav {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n.navbar-nav .dropdown-menu {\n position: static;\n}\n\n.navbar-text {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n transition: box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .navbar-toggler {\n transition: none;\n }\n}\n.navbar-toggler:hover {\n text-decoration: none;\n}\n.navbar-toggler:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--bs-scroll-height, 75vh);\n overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n .navbar-expand-sm .offcanvas-header {\n display: none;\n }\n .navbar-expand-sm .offcanvas {\n position: inherit;\n bottom: 0;\n z-index: 1000;\n flex-grow: 1;\n visibility: visible !important;\n background-color: transparent;\n border-right: 0;\n border-left: 0;\n transition: none;\n transform: none;\n }\n .navbar-expand-sm .offcanvas-top,\n.navbar-expand-sm .offcanvas-bottom {\n height: auto;\n border-top: 0;\n border-bottom: 0;\n }\n .navbar-expand-sm .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n .navbar-expand-md .offcanvas-header {\n display: none;\n }\n .navbar-expand-md .offcanvas {\n position: inherit;\n bottom: 0;\n z-index: 1000;\n flex-grow: 1;\n visibility: visible !important;\n background-color: transparent;\n border-right: 0;\n border-left: 0;\n transition: none;\n transform: none;\n }\n .navbar-expand-md .offcanvas-top,\n.navbar-expand-md .offcanvas-bottom {\n height: auto;\n border-top: 0;\n border-bottom: 0;\n }\n .navbar-expand-md .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n .navbar-expand-lg .offcanvas-header {\n display: none;\n }\n .navbar-expand-lg .offcanvas {\n position: inherit;\n bottom: 0;\n z-index: 1000;\n flex-grow: 1;\n visibility: visible !important;\n background-color: transparent;\n border-right: 0;\n border-left: 0;\n transition: none;\n transform: none;\n }\n .navbar-expand-lg .offcanvas-top,\n.navbar-expand-lg .offcanvas-bottom {\n height: auto;\n border-top: 0;\n border-bottom: 0;\n }\n .navbar-expand-lg .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xl .offcanvas-header {\n display: none;\n }\n .navbar-expand-xl .offcanvas {\n position: inherit;\n bottom: 0;\n z-index: 1000;\n flex-grow: 1;\n visibility: visible !important;\n background-color: transparent;\n border-right: 0;\n border-left: 0;\n transition: none;\n transform: none;\n }\n .navbar-expand-xl .offcanvas-top,\n.navbar-expand-xl .offcanvas-bottom {\n height: auto;\n border-top: 0;\n border-bottom: 0;\n }\n .navbar-expand-xl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1400px) {\n .navbar-expand-xxl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xxl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xxl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xxl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xxl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xxl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xxl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xxl .offcanvas-header {\n display: none;\n }\n .navbar-expand-xxl .offcanvas {\n position: inherit;\n bottom: 0;\n z-index: 1000;\n flex-grow: 1;\n visibility: visible !important;\n background-color: transparent;\n border-right: 0;\n border-left: 0;\n transition: none;\n transform: none;\n }\n .navbar-expand-xxl .offcanvas-top,\n.navbar-expand-xxl .offcanvas-bottom {\n height: auto;\n border-top: 0;\n border-bottom: 0;\n }\n .navbar-expand-xxl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n.navbar-expand {\n flex-wrap: nowrap;\n justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n.navbar-expand .navbar-nav-scroll {\n overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n display: none;\n}\n.navbar-expand .offcanvas-header {\n display: none;\n}\n.navbar-expand .offcanvas {\n position: inherit;\n bottom: 0;\n z-index: 1000;\n flex-grow: 1;\n visibility: visible !important;\n background-color: transparent;\n border-right: 0;\n border-left: 0;\n transition: none;\n transform: none;\n}\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n height: auto;\n border-top: 0;\n border-bottom: 0;\n}\n.navbar-expand .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.55);\n}\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.55);\n border-color: rgba(0, 0, 0, 0.1);\n}\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.55);\n}\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.55);\n}\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.55);\n border-color: rgba(255, 255, 255, 0.1);\n}\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.55);\n}\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: 1rem 1rem;\n}\n\n.card-title {\n margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n margin-top: -0.25rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link + .card-link {\n margin-left: 1rem;\n}\n\n.card-header {\n padding: 0.5rem 1rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n padding: 0.5rem 1rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.5rem;\n margin-bottom: -0.5rem;\n margin-left: -0.5rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.5rem;\n margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1rem;\n border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-group > .card {\n margin-bottom: 0.75rem;\n}\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n.card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n.card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n.card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n.card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: 1rem 1.25rem;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n background-color: #fff;\n border: 0;\n border-radius: 0;\n overflow-anchor: none;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button {\n transition: none;\n }\n}\n.accordion-button:not(.collapsed) {\n color: #0c63e4;\n background-color: #e7f1ff;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n.accordion-button:not(.collapsed)::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n transform: rotate(-180deg);\n}\n.accordion-button::after {\n flex-shrink: 0;\n width: 1.25rem;\n height: 1.25rem;\n margin-left: auto;\n content: \"\";\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-size: 1.25rem;\n transition: transform 0.2s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button::after {\n transition: none;\n }\n}\n.accordion-button:hover {\n z-index: 2;\n}\n.accordion-button:focus {\n z-index: 3;\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n.accordion-item:first-of-type {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n.accordion-item:first-of-type .accordion-button {\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n.accordion-item:not(:first-of-type) {\n border-top: 0;\n}\n.accordion-item:last-of-type {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n.accordion-item:last-of-type .accordion-button.collapsed {\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n.accordion-item:last-of-type .accordion-collapse {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-body {\n padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n border-width: 0;\n}\n.accordion-flush .accordion-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n.accordion-flush .accordion-item:first-child {\n border-top: 0;\n}\n.accordion-flush .accordion-item:last-child {\n border-bottom: 0;\n}\n.accordion-flush .accordion-item .accordion-button {\n border-radius: 0;\n}\n\n.breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: 0 0;\n margin-bottom: 1rem;\n list-style: none;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n.breadcrumb-item + .breadcrumb-item::before {\n float: left;\n padding-right: 0.5rem;\n color: #6c757d;\n content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: flex;\n padding-left: 0;\n list-style: none;\n}\n\n.page-link {\n position: relative;\n display: block;\n color: #0d6efd;\n text-decoration: none;\n background-color: #fff;\n border: 1px solid #dee2e6;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .page-link {\n transition: none;\n }\n}\n.page-link:hover {\n z-index: 2;\n color: #0a58ca;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n.page-link:focus {\n z-index: 3;\n color: #0a58ca;\n background-color: #e9ecef;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n margin-left: -1px;\n}\n.page-item.active .page-link {\n z-index: 3;\n color: #fff;\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.page-link {\n padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n}\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n}\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.35em 0.65em;\n font-size: 0.75em;\n font-weight: 700;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n}\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.alert {\n position: relative;\n padding: 1rem 1rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 3rem;\n}\n.alert-dismissible .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n color: #084298;\n background-color: #cfe2ff;\n border-color: #b6d4fe;\n}\n.alert-primary .alert-link {\n color: #06357a;\n}\n\n.alert-secondary {\n color: #41464b;\n background-color: #e2e3e5;\n border-color: #d3d6d8;\n}\n.alert-secondary .alert-link {\n color: #34383c;\n}\n\n.alert-success {\n color: #0f5132;\n background-color: #d1e7dd;\n border-color: #badbcc;\n}\n.alert-success .alert-link {\n color: #0c4128;\n}\n\n.alert-info {\n color: #055160;\n background-color: #cff4fc;\n border-color: #b6effb;\n}\n.alert-info .alert-link {\n color: #04414d;\n}\n\n.alert-warning {\n color: #664d03;\n background-color: #fff3cd;\n border-color: #ffecb5;\n}\n.alert-warning .alert-link {\n color: #523e02;\n}\n\n.alert-danger {\n color: #842029;\n background-color: #f8d7da;\n border-color: #f5c2c7;\n}\n.alert-danger .alert-link {\n color: #6a1a21;\n}\n\n.alert-light {\n color: #636464;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n.alert-light .alert-link {\n color: #4f5050;\n}\n\n.alert-dark {\n color: #141619;\n background-color: #d3d3d4;\n border-color: #bcbebf;\n}\n.alert-dark .alert-link {\n color: #101214;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n 0% {\n background-position-x: 1rem;\n }\n}\n\n@keyframes progress-bar-stripes {\n 0% {\n background-position-x: 1rem;\n }\n}\n.progress {\n display: flex;\n height: 1rem;\n overflow: hidden;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #0d6efd;\n transition: width 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n -webkit-animation: 1s linear infinite progress-bar-stripes;\n animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n -webkit-animation: none;\n animation: none;\n }\n}\n\n.list-group {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n border-radius: 0.25rem;\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n}\n.list-group-numbered > li::before {\n content: counters(section, \".\") \". \";\n counter-increment: section;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.5rem 1rem;\n color: #212529;\n text-decoration: none;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n}\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n margin-top: -1px;\n border-top-width: 1px;\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n@media (min-width: 1400px) {\n .list-group-horizontal-xxl {\n flex-direction: row;\n }\n .list-group-horizontal-xxl > .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n.list-group-flush {\n border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n border-width: 0 0 1px;\n}\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n color: #084298;\n background-color: #cfe2ff;\n}\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #084298;\n background-color: #bacbe6;\n}\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #084298;\n border-color: #084298;\n}\n\n.list-group-item-secondary {\n color: #41464b;\n background-color: #e2e3e5;\n}\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #41464b;\n background-color: #cbccce;\n}\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #41464b;\n border-color: #41464b;\n}\n\n.list-group-item-success {\n color: #0f5132;\n background-color: #d1e7dd;\n}\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #0f5132;\n background-color: #bcd0c7;\n}\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #0f5132;\n border-color: #0f5132;\n}\n\n.list-group-item-info {\n color: #055160;\n background-color: #cff4fc;\n}\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #055160;\n background-color: #badce3;\n}\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #055160;\n border-color: #055160;\n}\n\n.list-group-item-warning {\n color: #664d03;\n background-color: #fff3cd;\n}\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #664d03;\n background-color: #e6dbb9;\n}\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #664d03;\n border-color: #664d03;\n}\n\n.list-group-item-danger {\n color: #842029;\n background-color: #f8d7da;\n}\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #842029;\n background-color: #dfc2c4;\n}\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #842029;\n border-color: #842029;\n}\n\n.list-group-item-light {\n color: #636464;\n background-color: #fefefe;\n}\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #636464;\n background-color: #e5e5e5;\n}\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #636464;\n border-color: #636464;\n}\n\n.list-group-item-dark {\n color: #141619;\n background-color: #d3d3d4;\n}\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #141619;\n background-color: #bebebf;\n}\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #141619;\n border-color: #141619;\n}\n\n.btn-close {\n box-sizing: content-box;\n width: 1em;\n height: 1em;\n padding: 0.25em 0.25em;\n color: #000;\n background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n border: 0;\n border-radius: 0.25rem;\n opacity: 0.5;\n}\n.btn-close:hover {\n color: #000;\n text-decoration: none;\n opacity: 0.75;\n}\n.btn-close:focus {\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n opacity: 1;\n}\n.btn-close:disabled, .btn-close.disabled {\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n opacity: 0.25;\n}\n\n.btn-close-white {\n filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n width: 350px;\n max-width: 100%;\n font-size: 0.875rem;\n pointer-events: auto;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n.toast.showing {\n opacity: 0;\n}\n.toast:not(.show) {\n display: none;\n}\n\n.toast-container {\n width: -webkit-max-content;\n width: -moz-max-content;\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n margin-bottom: 0.75rem;\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: 0.5rem 0.75rem;\n color: #6c757d;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n.toast-header .btn-close {\n margin-right: -0.375rem;\n margin-left: 0.75rem;\n}\n\n.toast-body {\n padding: 0.75rem;\n word-wrap: break-word;\n}\n\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1055;\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n.modal.show .modal-dialog {\n transform: none;\n}\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - 1rem);\n}\n.modal-dialog-scrollable .modal-content {\n max-height: 100%;\n overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1050;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n}\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between;\n padding: 1rem 1rem;\n border-bottom: 1px solid #dee2e6;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n.modal-header .btn-close {\n padding: 0.5rem 0.5rem;\n margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: flex;\n flex-wrap: wrap;\n flex-shrink: 0;\n align-items: center;\n justify-content: flex-end;\n padding: 0.75rem;\n border-top: 1px solid #dee2e6;\n border-bottom-right-radius: calc(0.3rem - 1px);\n border-bottom-left-radius: calc(0.3rem - 1px);\n}\n.modal-footer > * {\n margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n\n .modal-dialog-scrollable {\n height: calc(100% - 3.5rem);\n }\n\n .modal-dialog-centered {\n min-height: calc(100% - 3.5rem);\n }\n\n .modal-sm {\n max-width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg,\n.modal-xl {\n max-width: 800px;\n }\n}\n@media (min-width: 1200px) {\n .modal-xl {\n max-width: 1140px;\n }\n}\n.modal-fullscreen {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n}\n.modal-fullscreen .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n}\n.modal-fullscreen .modal-header {\n border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n overflow-y: auto;\n}\n.modal-fullscreen .modal-footer {\n border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n .modal-fullscreen-sm-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-sm-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-header {\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-body {\n overflow-y: auto;\n }\n .modal-fullscreen-sm-down .modal-footer {\n border-radius: 0;\n }\n}\n@media (max-width: 767.98px) {\n .modal-fullscreen-md-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-md-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-header {\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-body {\n overflow-y: auto;\n }\n .modal-fullscreen-md-down .modal-footer {\n border-radius: 0;\n }\n}\n@media (max-width: 991.98px) {\n .modal-fullscreen-lg-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-lg-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-header {\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-body {\n overflow-y: auto;\n }\n .modal-fullscreen-lg-down .modal-footer {\n border-radius: 0;\n }\n}\n@media (max-width: 1199.98px) {\n .modal-fullscreen-xl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-header {\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-body {\n overflow-y: auto;\n }\n .modal-fullscreen-xl-down .modal-footer {\n border-radius: 0;\n }\n}\n@media (max-width: 1399.98px) {\n .modal-fullscreen-xxl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xxl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-header {\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-body {\n overflow-y: auto;\n }\n .modal-fullscreen-xxl-down .modal-footer {\n border-radius: 0;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1080;\n display: block;\n margin: 0;\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n.tooltip.show {\n opacity: 0.9;\n}\n.tooltip .tooltip-arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n.tooltip .tooltip-arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=top] {\n padding: 0.4rem 0;\n}\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n bottom: 0;\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n top: -1px;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=right] {\n padding: 0 0.4rem;\n}\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n right: -1px;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=bottom] {\n padding: 0.4rem 0;\n}\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n top: 0;\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n bottom: -1px;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=left] {\n padding: 0 0.4rem;\n}\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n left: -1px;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0 /* rtl:ignore */;\n z-index: 1070;\n display: block;\n max-width: 276px;\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n.popover .popover-arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n bottom: calc(-0.5rem - 1px);\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n bottom: 0;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n bottom: 1px;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: #fff;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n left: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n left: 0;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n left: 1px;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n top: calc(-0.5rem - 1px);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n top: 0;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n top: 1px;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: #fff;\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f0f0f0;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n right: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n right: 0;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n right: 1px;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 1rem;\n margin-bottom: 0;\n font-size: 1rem;\n background-color: #f0f0f0;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 1rem 1rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n padding: 0;\n color: #fff;\n text-align: center;\n background: none;\n border: 0;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n.carousel-control-next {\n transition: none;\n }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n margin-right: 15%;\n margin-bottom: 1rem;\n margin-left: 15%;\n list-style: none;\n}\n.carousel-indicators [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n padding: 0;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: 0.5;\n transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators [data-bs-target] {\n transition: none;\n }\n}\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 1.25rem;\n left: 15%;\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n color: #fff;\n text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n.carousel-dark .carousel-caption {\n color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n to {\n transform: rotate(360deg) /* rtl:ignore */;\n }\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg) /* rtl:ignore */;\n }\n}\n.spinner-border {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: -0.125em;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n -webkit-animation: 0.75s linear infinite spinner-border;\n animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n width: 1rem;\n height: 1rem;\n border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n.spinner-grow {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: -0.125em;\n background-color: currentColor;\n border-radius: 50%;\n opacity: 0;\n -webkit-animation: 0.75s linear infinite spinner-grow;\n animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n width: 1rem;\n height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner-border,\n.spinner-grow {\n -webkit-animation-duration: 1.5s;\n animation-duration: 1.5s;\n }\n}\n.offcanvas {\n position: fixed;\n bottom: 0;\n z-index: 1045;\n display: flex;\n flex-direction: column;\n max-width: 100%;\n visibility: hidden;\n background-color: #fff;\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .offcanvas {\n transition: none;\n }\n}\n\n.offcanvas-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n.offcanvas-backdrop.fade {\n opacity: 0;\n}\n.offcanvas-backdrop.show {\n opacity: 0.5;\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 1rem 1rem;\n}\n.offcanvas-header .btn-close {\n padding: 0.5rem 0.5rem;\n margin-top: -0.5rem;\n margin-right: -0.5rem;\n margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: 1rem 1rem;\n overflow-y: auto;\n}\n\n.offcanvas-start {\n top: 0;\n left: 0;\n width: 400px;\n border-right: 1px solid rgba(0, 0, 0, 0.2);\n transform: translateX(-100%);\n}\n\n.offcanvas-end {\n top: 0;\n right: 0;\n width: 400px;\n border-left: 1px solid rgba(0, 0, 0, 0.2);\n transform: translateX(100%);\n}\n\n.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: 30vh;\n max-height: 100%;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n right: 0;\n left: 0;\n height: 30vh;\n max-height: 100%;\n border-top: 1px solid rgba(0, 0, 0, 0.2);\n transform: translateY(100%);\n}\n\n.offcanvas.show {\n transform: none;\n}\n\n.placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentColor;\n opacity: 0.5;\n}\n.placeholder.btn::before {\n display: inline-block;\n content: \"\";\n}\n\n.placeholder-xs {\n min-height: 0.6em;\n}\n\n.placeholder-sm {\n min-height: 0.8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n 50% {\n opacity: 0.2;\n }\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: 0.2;\n }\n}\n.placeholder-wave {\n -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n -webkit-mask-size: 200% 100%;\n mask-size: 200% 100%;\n -webkit-animation: placeholder-wave 2s linear infinite;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n 100% {\n -webkit-mask-position: -200% 0%;\n mask-position: -200% 0%;\n }\n}\n\n@keyframes placeholder-wave {\n 100% {\n -webkit-mask-position: -200% 0%;\n mask-position: -200% 0%;\n }\n}\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.link-primary {\n color: #0d6efd;\n}\n.link-primary:hover, .link-primary:focus {\n color: #0a58ca;\n}\n\n.link-secondary {\n color: #6c757d;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: #565e64;\n}\n\n.link-success {\n color: #198754;\n}\n.link-success:hover, .link-success:focus {\n color: #146c43;\n}\n\n.link-info {\n color: #0dcaf0;\n}\n.link-info:hover, .link-info:focus {\n color: #3dd5f3;\n}\n\n.link-warning {\n color: #ffc107;\n}\n.link-warning:hover, .link-warning:focus {\n color: #ffcd39;\n}\n\n.link-danger {\n color: #dc3545;\n}\n.link-danger:hover, .link-danger:focus {\n color: #b02a37;\n}\n\n.link-light {\n color: #f8f9fa;\n}\n.link-light:hover, .link-light:focus {\n color: #f9fafb;\n}\n\n.link-dark {\n color: #212529;\n}\n.link-dark:hover, .link-dark:focus {\n color: #1a1e21;\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentColor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\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.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: -webkit-sticky !important;\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #0d6efd !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #198754 !important;\n}\n\n.border-info {\n border-color: #0dcaf0 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #212529 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.border-1 {\n border-width: 1px !important;\n}\n\n.border-2 {\n border-width: 2px !important;\n}\n\n.border-3 {\n border-width: 3px !important;\n}\n\n.border-4 {\n border-width: 4px !important;\n}\n\n.border-5 {\n border-width: 5px !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !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.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !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.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: #6c757d !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n -webkit-user-select: all !important;\n -moz-user-select: all !important;\n user-select: all !important;\n}\n\n.user-select-auto {\n -webkit-user-select: auto !important;\n -moz-user-select: auto !important;\n user-select: auto !important;\n}\n\n.user-select-none {\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: 50rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: 0.25rem !important;\n border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n\n .float-sm-end {\n float: right !important;\n }\n\n .float-sm-none {\n float: none !important;\n }\n\n .d-sm-inline {\n display: inline !important;\n }\n\n .d-sm-inline-block {\n display: inline-block !important;\n }\n\n .d-sm-block {\n display: block !important;\n }\n\n .d-sm-grid {\n display: grid !important;\n }\n\n .d-sm-table {\n display: table !important;\n }\n\n .d-sm-table-row {\n display: table-row !important;\n }\n\n .d-sm-table-cell {\n display: table-cell !important;\n }\n\n .d-sm-flex {\n display: flex !important;\n }\n\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n\n .d-sm-none {\n display: none !important;\n }\n\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-sm-row {\n flex-direction: row !important;\n }\n\n .flex-sm-column {\n flex-direction: column !important;\n }\n\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .gap-sm-0 {\n gap: 0 !important;\n }\n\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n\n .gap-sm-3 {\n gap: 1rem !important;\n }\n\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n\n .gap-sm-5 {\n gap: 3rem !important;\n }\n\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-sm-center {\n justify-content: center !important;\n }\n\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n\n .align-items-sm-center {\n align-items: center !important;\n }\n\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n\n .align-content-sm-center {\n align-content: center !important;\n }\n\n .align-content-sm-between {\n align-content: space-between !important;\n }\n\n .align-content-sm-around {\n align-content: space-around !important;\n }\n\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n\n .align-self-sm-auto {\n align-self: auto !important;\n }\n\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n\n .align-self-sm-center {\n align-self: center !important;\n }\n\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n\n .order-sm-first {\n order: -1 !important;\n }\n\n .order-sm-0 {\n order: 0 !important;\n }\n\n .order-sm-1 {\n order: 1 !important;\n }\n\n .order-sm-2 {\n order: 2 !important;\n }\n\n .order-sm-3 {\n order: 3 !important;\n }\n\n .order-sm-4 {\n order: 4 !important;\n }\n\n .order-sm-5 {\n order: 5 !important;\n }\n\n .order-sm-last {\n order: 6 !important;\n }\n\n .m-sm-0 {\n margin: 0 !important;\n }\n\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n\n .m-sm-3 {\n margin: 1rem !important;\n }\n\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n\n .m-sm-5 {\n margin: 3rem !important;\n }\n\n .m-sm-auto {\n margin: auto !important;\n }\n\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n\n .mt-sm-auto {\n margin-top: auto !important;\n }\n\n .me-sm-0 {\n margin-right: 0 !important;\n }\n\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n\n .me-sm-auto {\n margin-right: auto !important;\n }\n\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n\n .ms-sm-auto {\n margin-left: auto !important;\n }\n\n .p-sm-0 {\n padding: 0 !important;\n }\n\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n\n .p-sm-3 {\n padding: 1rem !important;\n }\n\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n\n .p-sm-5 {\n padding: 3rem !important;\n }\n\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n\n .text-sm-start {\n text-align: left !important;\n }\n\n .text-sm-end {\n text-align: right !important;\n }\n\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n\n .float-md-end {\n float: right !important;\n }\n\n .float-md-none {\n float: none !important;\n }\n\n .d-md-inline {\n display: inline !important;\n }\n\n .d-md-inline-block {\n display: inline-block !important;\n }\n\n .d-md-block {\n display: block !important;\n }\n\n .d-md-grid {\n display: grid !important;\n }\n\n .d-md-table {\n display: table !important;\n }\n\n .d-md-table-row {\n display: table-row !important;\n }\n\n .d-md-table-cell {\n display: table-cell !important;\n }\n\n .d-md-flex {\n display: flex !important;\n }\n\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n\n .d-md-none {\n display: none !important;\n }\n\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-md-row {\n flex-direction: row !important;\n }\n\n .flex-md-column {\n flex-direction: column !important;\n }\n\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .gap-md-0 {\n gap: 0 !important;\n }\n\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n\n .gap-md-3 {\n gap: 1rem !important;\n }\n\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n\n .gap-md-5 {\n gap: 3rem !important;\n }\n\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-md-center {\n justify-content: center !important;\n }\n\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-md-start {\n align-items: flex-start !important;\n }\n\n .align-items-md-end {\n align-items: flex-end !important;\n }\n\n .align-items-md-center {\n align-items: center !important;\n }\n\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n\n .align-content-md-start {\n align-content: flex-start !important;\n }\n\n .align-content-md-end {\n align-content: flex-end !important;\n }\n\n .align-content-md-center {\n align-content: center !important;\n }\n\n .align-content-md-between {\n align-content: space-between !important;\n }\n\n .align-content-md-around {\n align-content: space-around !important;\n }\n\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n\n .align-self-md-auto {\n align-self: auto !important;\n }\n\n .align-self-md-start {\n align-self: flex-start !important;\n }\n\n .align-self-md-end {\n align-self: flex-end !important;\n }\n\n .align-self-md-center {\n align-self: center !important;\n }\n\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n\n .order-md-first {\n order: -1 !important;\n }\n\n .order-md-0 {\n order: 0 !important;\n }\n\n .order-md-1 {\n order: 1 !important;\n }\n\n .order-md-2 {\n order: 2 !important;\n }\n\n .order-md-3 {\n order: 3 !important;\n }\n\n .order-md-4 {\n order: 4 !important;\n }\n\n .order-md-5 {\n order: 5 !important;\n }\n\n .order-md-last {\n order: 6 !important;\n }\n\n .m-md-0 {\n margin: 0 !important;\n }\n\n .m-md-1 {\n margin: 0.25rem !important;\n }\n\n .m-md-2 {\n margin: 0.5rem !important;\n }\n\n .m-md-3 {\n margin: 1rem !important;\n }\n\n .m-md-4 {\n margin: 1.5rem !important;\n }\n\n .m-md-5 {\n margin: 3rem !important;\n }\n\n .m-md-auto {\n margin: auto !important;\n }\n\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-md-0 {\n margin-top: 0 !important;\n }\n\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n\n .mt-md-auto {\n margin-top: auto !important;\n }\n\n .me-md-0 {\n margin-right: 0 !important;\n }\n\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-md-3 {\n margin-right: 1rem !important;\n }\n\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-md-5 {\n margin-right: 3rem !important;\n }\n\n .me-md-auto {\n margin-right: auto !important;\n }\n\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n\n .ms-md-0 {\n margin-left: 0 !important;\n }\n\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n\n .ms-md-auto {\n margin-left: auto !important;\n }\n\n .p-md-0 {\n padding: 0 !important;\n }\n\n .p-md-1 {\n padding: 0.25rem !important;\n }\n\n .p-md-2 {\n padding: 0.5rem !important;\n }\n\n .p-md-3 {\n padding: 1rem !important;\n }\n\n .p-md-4 {\n padding: 1.5rem !important;\n }\n\n .p-md-5 {\n padding: 3rem !important;\n }\n\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-md-0 {\n padding-top: 0 !important;\n }\n\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n\n .pe-md-0 {\n padding-right: 0 !important;\n }\n\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-md-0 {\n padding-left: 0 !important;\n }\n\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n\n .text-md-start {\n text-align: left !important;\n }\n\n .text-md-end {\n text-align: right !important;\n }\n\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n\n .float-lg-end {\n float: right !important;\n }\n\n .float-lg-none {\n float: none !important;\n }\n\n .d-lg-inline {\n display: inline !important;\n }\n\n .d-lg-inline-block {\n display: inline-block !important;\n }\n\n .d-lg-block {\n display: block !important;\n }\n\n .d-lg-grid {\n display: grid !important;\n }\n\n .d-lg-table {\n display: table !important;\n }\n\n .d-lg-table-row {\n display: table-row !important;\n }\n\n .d-lg-table-cell {\n display: table-cell !important;\n }\n\n .d-lg-flex {\n display: flex !important;\n }\n\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n\n .d-lg-none {\n display: none !important;\n }\n\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-lg-row {\n flex-direction: row !important;\n }\n\n .flex-lg-column {\n flex-direction: column !important;\n }\n\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .gap-lg-0 {\n gap: 0 !important;\n }\n\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n\n .gap-lg-3 {\n gap: 1rem !important;\n }\n\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n\n .gap-lg-5 {\n gap: 3rem !important;\n }\n\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-lg-center {\n justify-content: center !important;\n }\n\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n\n .align-items-lg-center {\n align-items: center !important;\n }\n\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n\n .align-content-lg-center {\n align-content: center !important;\n }\n\n .align-content-lg-between {\n align-content: space-between !important;\n }\n\n .align-content-lg-around {\n align-content: space-around !important;\n }\n\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n\n .align-self-lg-auto {\n align-self: auto !important;\n }\n\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n\n .align-self-lg-center {\n align-self: center !important;\n }\n\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n\n .order-lg-first {\n order: -1 !important;\n }\n\n .order-lg-0 {\n order: 0 !important;\n }\n\n .order-lg-1 {\n order: 1 !important;\n }\n\n .order-lg-2 {\n order: 2 !important;\n }\n\n .order-lg-3 {\n order: 3 !important;\n }\n\n .order-lg-4 {\n order: 4 !important;\n }\n\n .order-lg-5 {\n order: 5 !important;\n }\n\n .order-lg-last {\n order: 6 !important;\n }\n\n .m-lg-0 {\n margin: 0 !important;\n }\n\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n\n .m-lg-3 {\n margin: 1rem !important;\n }\n\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n\n .m-lg-5 {\n margin: 3rem !important;\n }\n\n .m-lg-auto {\n margin: auto !important;\n }\n\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n\n .mt-lg-auto {\n margin-top: auto !important;\n }\n\n .me-lg-0 {\n margin-right: 0 !important;\n }\n\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n\n .me-lg-auto {\n margin-right: auto !important;\n }\n\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n\n .ms-lg-auto {\n margin-left: auto !important;\n }\n\n .p-lg-0 {\n padding: 0 !important;\n }\n\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n\n .p-lg-3 {\n padding: 1rem !important;\n }\n\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n\n .p-lg-5 {\n padding: 3rem !important;\n }\n\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n\n .text-lg-start {\n text-align: left !important;\n }\n\n .text-lg-end {\n text-align: right !important;\n }\n\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n\n .float-xl-end {\n float: right !important;\n }\n\n .float-xl-none {\n float: none !important;\n }\n\n .d-xl-inline {\n display: inline !important;\n }\n\n .d-xl-inline-block {\n display: inline-block !important;\n }\n\n .d-xl-block {\n display: block !important;\n }\n\n .d-xl-grid {\n display: grid !important;\n }\n\n .d-xl-table {\n display: table !important;\n }\n\n .d-xl-table-row {\n display: table-row !important;\n }\n\n .d-xl-table-cell {\n display: table-cell !important;\n }\n\n .d-xl-flex {\n display: flex !important;\n }\n\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n\n .d-xl-none {\n display: none !important;\n }\n\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-xl-row {\n flex-direction: row !important;\n }\n\n .flex-xl-column {\n flex-direction: column !important;\n }\n\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .gap-xl-0 {\n gap: 0 !important;\n }\n\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n\n .gap-xl-3 {\n gap: 1rem !important;\n }\n\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n\n .gap-xl-5 {\n gap: 3rem !important;\n }\n\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-xl-center {\n justify-content: center !important;\n }\n\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n\n .align-items-xl-center {\n align-items: center !important;\n }\n\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n\n .align-content-xl-center {\n align-content: center !important;\n }\n\n .align-content-xl-between {\n align-content: space-between !important;\n }\n\n .align-content-xl-around {\n align-content: space-around !important;\n }\n\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n\n .align-self-xl-auto {\n align-self: auto !important;\n }\n\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n\n .align-self-xl-center {\n align-self: center !important;\n }\n\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n\n .order-xl-first {\n order: -1 !important;\n }\n\n .order-xl-0 {\n order: 0 !important;\n }\n\n .order-xl-1 {\n order: 1 !important;\n }\n\n .order-xl-2 {\n order: 2 !important;\n }\n\n .order-xl-3 {\n order: 3 !important;\n }\n\n .order-xl-4 {\n order: 4 !important;\n }\n\n .order-xl-5 {\n order: 5 !important;\n }\n\n .order-xl-last {\n order: 6 !important;\n }\n\n .m-xl-0 {\n margin: 0 !important;\n }\n\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n\n .m-xl-3 {\n margin: 1rem !important;\n }\n\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n\n .m-xl-5 {\n margin: 3rem !important;\n }\n\n .m-xl-auto {\n margin: auto !important;\n }\n\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n\n .mt-xl-auto {\n margin-top: auto !important;\n }\n\n .me-xl-0 {\n margin-right: 0 !important;\n }\n\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n\n .me-xl-auto {\n margin-right: auto !important;\n }\n\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n\n .ms-xl-auto {\n margin-left: auto !important;\n }\n\n .p-xl-0 {\n padding: 0 !important;\n }\n\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n\n .p-xl-3 {\n padding: 1rem !important;\n }\n\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n\n .p-xl-5 {\n padding: 3rem !important;\n }\n\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n\n .text-xl-start {\n text-align: left !important;\n }\n\n .text-xl-end {\n text-align: right !important;\n }\n\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n\n .float-xxl-end {\n float: right !important;\n }\n\n .float-xxl-none {\n float: none !important;\n }\n\n .d-xxl-inline {\n display: inline !important;\n }\n\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n\n .d-xxl-block {\n display: block !important;\n }\n\n .d-xxl-grid {\n display: grid !important;\n }\n\n .d-xxl-table {\n display: table !important;\n }\n\n .d-xxl-table-row {\n display: table-row !important;\n }\n\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n\n .d-xxl-flex {\n display: flex !important;\n }\n\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n\n .d-xxl-none {\n display: none !important;\n }\n\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n\n .flex-xxl-row {\n flex-direction: row !important;\n }\n\n .flex-xxl-column {\n flex-direction: column !important;\n }\n\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n\n .gap-xxl-0 {\n gap: 0 !important;\n }\n\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n\n .align-items-xxl-center {\n align-items: center !important;\n }\n\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n\n .align-content-xxl-center {\n align-content: center !important;\n }\n\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n\n .align-self-xxl-center {\n align-self: center !important;\n }\n\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n\n .order-xxl-first {\n order: -1 !important;\n }\n\n .order-xxl-0 {\n order: 0 !important;\n }\n\n .order-xxl-1 {\n order: 1 !important;\n }\n\n .order-xxl-2 {\n order: 2 !important;\n }\n\n .order-xxl-3 {\n order: 3 !important;\n }\n\n .order-xxl-4 {\n order: 4 !important;\n }\n\n .order-xxl-5 {\n order: 5 !important;\n }\n\n .order-xxl-last {\n order: 6 !important;\n }\n\n .m-xxl-0 {\n margin: 0 !important;\n }\n\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n\n .m-xxl-3 {\n margin: 1rem !important;\n }\n\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n\n .m-xxl-5 {\n margin: 3rem !important;\n }\n\n .m-xxl-auto {\n margin: auto !important;\n }\n\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n\n .me-xxl-auto {\n margin-right: auto !important;\n }\n\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n\n .p-xxl-0 {\n padding: 0 !important;\n }\n\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n\n .p-xxl-3 {\n padding: 1rem !important;\n }\n\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n\n .p-xxl-5 {\n padding: 3rem !important;\n }\n\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n\n .text-xxl-start {\n text-align: left !important;\n }\n\n .text-xxl-end {\n text-align: right !important;\n }\n\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n\n .fs-2 {\n font-size: 2rem !important;\n }\n\n .fs-3 {\n font-size: 1.75rem !important;\n }\n\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n\n .d-print-inline-block {\n display: inline-block !important;\n }\n\n .d-print-block {\n display: block !important;\n }\n\n .d-print-grid {\n display: grid !important;\n }\n\n .d-print-table {\n display: table !important;\n }\n\n .d-print-table-row {\n display: table-row !important;\n }\n\n .d-print-table-cell {\n display: table-cell !important;\n }\n\n .d-print-flex {\n display: flex !important;\n }\n\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */","// 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","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n","//\n// Headings\n//\n.h1 {\n @extend h1;\n}\n\n.h2 {\n @extend h2;\n}\n\n.h3 {\n @extend h3;\n}\n\n.h4 {\n @extend h4;\n}\n\n.h5 {\n @extend h5;\n}\n\n.h6 {\n @extend h6;\n}\n\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n@each $display, $font-size in $display-font-sizes {\n .display-#{$display} {\n @include font-size($font-size);\n font-weight: $display-font-weight;\n line-height: $display-line-height;\n }\n}\n\n//\n// Emphasis\n//\n.small {\n @extend small;\n}\n\n.mark {\n @extend mark;\n}\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size($initialism-font-size);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-font-size);\n\n > :last-child {\n margin-bottom: 0;\n }\n}\n\n.blockquote-footer {\n margin-top: -$blockquote-margin-y;\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-footer-font-size);\n color: $blockquote-footer-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid();\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer * .5;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-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 width: 100%;\n padding-right: var(--#{$variable-prefix}gutter-x, #{$gutter});\n padding-left: var(--#{$variable-prefix}gutter-x, #{$gutter});\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)\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))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\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))\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))\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))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\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);\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(--#{$variable-prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$variable-prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$variable-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 --#{$variable-prefix}gutter-x: #{$gutter};\n --#{$variable-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(--#{$variable-prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$variable-prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$variable-prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\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(--#{$variable-prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$variable-prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$variable-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// numberof 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 --#{$variable-prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$variable-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","//\n// Basic Bootstrap table\n//\n\n.table {\n --#{$variable-prefix}table-bg: #{$table-bg};\n --#{$variable-prefix}table-accent-bg: #{$table-accent-bg};\n --#{$variable-prefix}table-striped-color: #{$table-striped-color};\n --#{$variable-prefix}table-striped-bg: #{$table-striped-bg};\n --#{$variable-prefix}table-active-color: #{$table-active-color};\n --#{$variable-prefix}table-active-bg: #{$table-active-bg};\n --#{$variable-prefix}table-hover-color: #{$table-hover-color};\n --#{$variable-prefix}table-hover-bg: #{$table-hover-bg};\n\n width: 100%;\n margin-bottom: $spacer;\n color: $table-color;\n vertical-align: $table-cell-vertical-align;\n border-color: $table-border-color;\n\n // Target th & td\n // We need the child combinator to prevent styles leaking to nested tables which doesn't have a `.table` class.\n // We use the universal selectors here to simplify the selector (else we would need 6 different selectors).\n // Another advantage is that this generates less code and makes the selector less specific making it easier to override.\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y $table-cell-padding-x;\n background-color: var(--#{$variable-prefix}table-bg);\n border-bottom-width: $table-border-width;\n box-shadow: inset 0 0 0 9999px var(--#{$variable-prefix}table-accent-bg);\n }\n\n > tbody {\n vertical-align: inherit;\n }\n\n > thead {\n vertical-align: bottom;\n }\n\n // Highlight border color between thead, tbody and tfoot.\n > :not(:first-child) {\n border-top: (2 * $table-border-width) solid $table-group-separator-color;\n }\n}\n\n\n//\n// Change placement of captions with a class\n//\n\n.caption-top {\n caption-side: top;\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y-sm $table-cell-padding-x-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n//\n// When borders are added on all sides of the cells, the corners can render odd when\n// these borders do not have the same color or if they are semi-transparent.\n// Therefor we add top and border bottoms to the `tr`s and left and right borders\n// to the `td`s or `th`s\n\n.table-bordered {\n > :not(caption) > * {\n border-width: $table-border-width 0;\n\n // stylelint-disable-next-line selector-max-universal\n > * {\n border-width: 0 $table-border-width;\n }\n }\n}\n\n.table-borderless {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n border-bottom-width: 0;\n }\n\n > :not(:first-child) {\n border-top-width: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(#{$table-striped-order}) > * {\n --#{$variable-prefix}table-accent-bg: var(--#{$variable-prefix}table-striped-bg);\n color: var(--#{$variable-prefix}table-striped-color);\n }\n}\n\n// Active table\n//\n// The `.table-active` class can be added to highlight rows or cells\n\n.table-active {\n --#{$variable-prefix}table-accent-bg: var(--#{$variable-prefix}table-active-bg);\n color: var(--#{$variable-prefix}table-active-color);\n}\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover > * {\n --#{$variable-prefix}table-accent-bg: var(--#{$variable-prefix}table-hover-bg);\n color: var(--#{$variable-prefix}table-hover-color);\n }\n}\n\n\n// Table variants\n//\n// Table variants set the table cell backgrounds, border colors\n// and the colors of the striped, hovered & active tables\n\n@each $color, $value in $table-variants {\n @include table-variant($color, $value);\n}\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @include media-breakpoint-down($breakpoint) {\n .table-responsive#{$infix} {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n }\n}\n","// scss-docs-start table-variant\n@mixin table-variant($state, $background) {\n .table-#{$state} {\n $color: color-contrast(opaque($body-bg, $background));\n $hover-bg: mix($color, $background, percentage($table-hover-bg-factor));\n $striped-bg: mix($color, $background, percentage($table-striped-bg-factor));\n $active-bg: mix($color, $background, percentage($table-active-bg-factor));\n\n --#{$variable-prefix}table-bg: #{$background};\n --#{$variable-prefix}table-striped-bg: #{$striped-bg};\n --#{$variable-prefix}table-striped-color: #{color-contrast($striped-bg)};\n --#{$variable-prefix}table-active-bg: #{$active-bg};\n --#{$variable-prefix}table-active-color: #{color-contrast($active-bg)};\n --#{$variable-prefix}table-hover-bg: #{$hover-bg};\n --#{$variable-prefix}table-hover-color: #{color-contrast($hover-bg)};\n\n color: $color;\n border-color: mix($color, $background, percentage($table-border-factor));\n }\n}\n// scss-docs-end table-variant\n","//\n// Labels\n//\n\n.form-label {\n margin-bottom: $form-label-margin-bottom;\n @include font-size($form-label-font-size);\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n color: $form-label-color;\n}\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: add($input-padding-y, $input-border-width);\n padding-bottom: add($input-padding-y, $input-border-width);\n margin-bottom: 0; // Override the `<legend>` default\n @include font-size(inherit); // Override the `<legend>` default\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n line-height: $input-line-height;\n color: $form-label-color;\n}\n\n.col-form-label-lg {\n padding-top: add($input-padding-y-lg, $input-border-width);\n padding-bottom: add($input-padding-y-lg, $input-border-width);\n @include font-size($input-font-size-lg);\n}\n\n.col-form-label-sm {\n padding-top: add($input-padding-y-sm, $input-border-width);\n padding-bottom: add($input-padding-y-sm, $input-border-width);\n @include font-size($input-font-size-sm);\n}\n","//\n// Form text\n//\n\n.form-text {\n margin-top: $form-text-margin-top;\n @include font-size($form-text-font-size);\n font-style: $form-text-font-style;\n font-weight: $form-text-font-weight;\n color: $form-text-color;\n}\n","//\n// General form controls (plus a few specific high-level interventions)\n//\n\n.form-control {\n display: block;\n width: 100%;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n appearance: none; // Fix appearance for date inputs in Safari\n\n // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n &[type=\"file\"] {\n overflow: hidden; // prevent pseudo element button overlap\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n }\n\n // Customize the `:focus` state to imitate native WebKit styles.\n &:focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($input-box-shadow, $input-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $input-focus-box-shadow;\n }\n }\n\n // Add some height to date inputs on iOS\n // https://github.com/twbs/bootstrap/issues/23307\n // TODO: we can remove this workaround once https://bugs.webkit.org/show_bug.cgi?id=198959 is resolved\n &::-webkit-date-and-time-value {\n // Multiply line-height by 1em if it has no unit\n height: if(unit($input-line-height) == \"\", $input-line-height * 1em, $input-line-height);\n }\n\n // Placeholder\n &::placeholder {\n color: $input-placeholder-color;\n // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.\n opacity: 1;\n }\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &:disabled,\n &[readonly] {\n background-color: $input-disabled-bg;\n border-color: $input-disabled-border-color;\n // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.\n opacity: 1;\n }\n\n // File input buttons theming\n &::file-selector-button {\n padding: $input-padding-y $input-padding-x;\n margin: (-$input-padding-y) (-$input-padding-x);\n margin-inline-end: $input-padding-x;\n color: $form-file-button-color;\n @include gradient-bg($form-file-button-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: $input-border-width;\n border-radius: 0; // stylelint-disable-line property-disallowed-list\n @include transition($btn-transition);\n }\n\n &:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: $form-file-button-hover-bg;\n }\n\n &::-webkit-file-upload-button {\n padding: $input-padding-y $input-padding-x;\n margin: (-$input-padding-y) (-$input-padding-x);\n margin-inline-end: $input-padding-x;\n color: $form-file-button-color;\n @include gradient-bg($form-file-button-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: $input-border-width;\n border-radius: 0; // stylelint-disable-line property-disallowed-list\n @include transition($btn-transition);\n }\n\n &:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n background-color: $form-file-button-hover-bg;\n }\n}\n\n// Readonly controls as plain text\n//\n// Apply class to a readonly input to make it appear like regular plain\n// text (without any border, background color, focus indicator)\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: $input-padding-y 0;\n margin-bottom: 0; // match inputs if this class comes on inputs with default margins\n line-height: $input-line-height;\n color: $input-plaintext-color;\n background-color: transparent;\n border: solid transparent;\n border-width: $input-border-width 0;\n\n &.form-control-sm,\n &.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// Repeated in `_input_group.scss` to avoid Sass extend issues.\n\n.form-control-sm {\n min-height: $input-height-sm;\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n\n &::file-selector-button {\n padding: $input-padding-y-sm $input-padding-x-sm;\n margin: (-$input-padding-y-sm) (-$input-padding-x-sm);\n margin-inline-end: $input-padding-x-sm;\n }\n\n &::-webkit-file-upload-button {\n padding: $input-padding-y-sm $input-padding-x-sm;\n margin: (-$input-padding-y-sm) (-$input-padding-x-sm);\n margin-inline-end: $input-padding-x-sm;\n }\n}\n\n.form-control-lg {\n min-height: $input-height-lg;\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n\n &::file-selector-button {\n padding: $input-padding-y-lg $input-padding-x-lg;\n margin: (-$input-padding-y-lg) (-$input-padding-x-lg);\n margin-inline-end: $input-padding-x-lg;\n }\n\n &::-webkit-file-upload-button {\n padding: $input-padding-y-lg $input-padding-x-lg;\n margin: (-$input-padding-y-lg) (-$input-padding-x-lg);\n margin-inline-end: $input-padding-x-lg;\n }\n}\n\n// Make sure textareas don't shrink too much when resized\n// https://github.com/twbs/bootstrap/pull/29124\n// stylelint-disable selector-no-qualifying-type\ntextarea {\n &.form-control {\n min-height: $input-height;\n }\n\n &.form-control-sm {\n min-height: $input-height-sm;\n }\n\n &.form-control-lg {\n min-height: $input-height-lg;\n }\n}\n// stylelint-enable selector-no-qualifying-type\n\n.form-control-color {\n width: $form-color-width;\n height: auto; // Override fixed browser height\n padding: $input-padding-y;\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n\n &::-moz-color-swatch {\n height: if(unit($input-line-height) == \"\", $input-line-height * 1em, $input-line-height);\n @include border-radius($input-border-radius);\n }\n\n &::-webkit-color-swatch {\n height: if(unit($input-line-height) == \"\", $input-line-height * 1em, $input-line-height);\n @include border-radius($input-border-radius);\n }\n}\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n","// Gradients\n\n// scss-docs-start gradient-bg-mixin\n@mixin gradient-bg($color: null) {\n background-color: $color;\n\n @if $enable-gradients {\n background-image: var(--#{$variable-prefix}gradient);\n }\n}\n// scss-docs-end gradient-bg-mixin\n\n// scss-docs-start gradient-mixins\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: null, $end-percent: null) {\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n background-image: linear-gradient($deg, $start-color, $end-color);\n}\n\n@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n}\n\n@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n// scss-docs-end gradient-mixins\n","// Select\n//\n// Replaces the browser default select with a custom one, mostly pulled from\n// https://primer.github.io/.\n\n.form-select {\n display: block;\n width: 100%;\n padding: $form-select-padding-y $form-select-indicator-padding $form-select-padding-y $form-select-padding-x;\n // stylelint-disable-next-line property-no-vendor-prefix\n -moz-padding-start: subtract($form-select-padding-x, 3px); // See https://github.com/twbs/bootstrap/issues/32636\n font-family: $form-select-font-family;\n @include font-size($form-select-font-size);\n font-weight: $form-select-font-weight;\n line-height: $form-select-line-height;\n color: $form-select-color;\n background-color: $form-select-bg;\n background-image: escape-svg($form-select-indicator);\n background-repeat: no-repeat;\n background-position: $form-select-bg-position;\n background-size: $form-select-bg-size;\n border: $form-select-border-width solid $form-select-border-color;\n @include border-radius($form-select-border-radius, 0);\n @include box-shadow($form-select-box-shadow);\n @include transition($form-select-transition);\n appearance: none;\n\n &:focus {\n border-color: $form-select-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $form-select-focus-box-shadow;\n }\n }\n\n &[multiple],\n &[size]:not([size=\"1\"]) {\n padding-right: $form-select-padding-x;\n background-image: none;\n }\n\n &:disabled {\n color: $form-select-disabled-color;\n background-color: $form-select-disabled-bg;\n border-color: $form-select-disabled-border-color;\n }\n\n // Remove outline from select box in FF\n &:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 $form-select-color;\n }\n}\n\n.form-select-sm {\n padding-top: $form-select-padding-y-sm;\n padding-bottom: $form-select-padding-y-sm;\n padding-left: $form-select-padding-x-sm;\n @include font-size($form-select-font-size-sm);\n @include border-radius($form-select-border-radius-sm);\n}\n\n.form-select-lg {\n padding-top: $form-select-padding-y-lg;\n padding-bottom: $form-select-padding-y-lg;\n padding-left: $form-select-padding-x-lg;\n @include font-size($form-select-font-size-lg);\n @include border-radius($form-select-border-radius-lg);\n}\n","//\n// Check/radio\n//\n\n.form-check {\n display: block;\n min-height: $form-check-min-height;\n padding-left: $form-check-padding-start;\n margin-bottom: $form-check-margin-bottom;\n\n .form-check-input {\n float: left;\n margin-left: $form-check-padding-start * -1;\n }\n}\n\n.form-check-input {\n width: $form-check-input-width;\n height: $form-check-input-width;\n margin-top: ($line-height-base - $form-check-input-width) * .5; // line-height minus check height\n vertical-align: top;\n background-color: $form-check-input-bg;\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: $form-check-input-border;\n appearance: none;\n color-adjust: exact; // Keep themed appearance for print\n @include transition($form-check-transition);\n\n &[type=\"checkbox\"] {\n @include border-radius($form-check-input-border-radius);\n }\n\n &[type=\"radio\"] {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $form-check-radio-border-radius;\n }\n\n &:active {\n filter: $form-check-input-active-filter;\n }\n\n &:focus {\n border-color: $form-check-input-focus-border;\n outline: 0;\n box-shadow: $form-check-input-focus-box-shadow;\n }\n\n &:checked {\n background-color: $form-check-input-checked-bg-color;\n border-color: $form-check-input-checked-border-color;\n\n &[type=\"checkbox\"] {\n @if $enable-gradients {\n background-image: escape-svg($form-check-input-checked-bg-image), var(--#{$variable-prefix}gradient);\n } @else {\n background-image: escape-svg($form-check-input-checked-bg-image);\n }\n }\n\n &[type=\"radio\"] {\n @if $enable-gradients {\n background-image: escape-svg($form-check-radio-checked-bg-image), var(--#{$variable-prefix}gradient);\n } @else {\n background-image: escape-svg($form-check-radio-checked-bg-image);\n }\n }\n }\n\n &[type=\"checkbox\"]:indeterminate {\n background-color: $form-check-input-indeterminate-bg-color;\n border-color: $form-check-input-indeterminate-border-color;\n\n @if $enable-gradients {\n background-image: escape-svg($form-check-input-indeterminate-bg-image), var(--#{$variable-prefix}gradient);\n } @else {\n background-image: escape-svg($form-check-input-indeterminate-bg-image);\n }\n }\n\n &:disabled {\n pointer-events: none;\n filter: none;\n opacity: $form-check-input-disabled-opacity;\n }\n\n // Use disabled attribute in addition of :disabled pseudo-class\n // See: https://github.com/twbs/bootstrap/issues/28247\n &[disabled],\n &:disabled {\n ~ .form-check-label {\n opacity: $form-check-label-disabled-opacity;\n }\n }\n}\n\n.form-check-label {\n color: $form-check-label-color;\n cursor: $form-check-label-cursor;\n}\n\n//\n// Switch\n//\n\n.form-switch {\n padding-left: $form-switch-padding-start;\n\n .form-check-input {\n width: $form-switch-width;\n margin-left: $form-switch-padding-start * -1;\n background-image: escape-svg($form-switch-bg-image);\n background-position: left center;\n @include border-radius($form-switch-border-radius);\n @include transition($form-switch-transition);\n\n &:focus {\n background-image: escape-svg($form-switch-focus-bg-image);\n }\n\n &:checked {\n background-position: $form-switch-checked-bg-position;\n\n @if $enable-gradients {\n background-image: escape-svg($form-switch-checked-bg-image), var(--#{$variable-prefix}gradient);\n } @else {\n background-image: escape-svg($form-switch-checked-bg-image);\n }\n }\n }\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: $form-check-inline-margin-end;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n\n &[disabled],\n &:disabled {\n + .btn {\n pointer-events: none;\n filter: none;\n opacity: $form-check-btn-check-disabled-opacity;\n }\n }\n}\n","// Range\n//\n// Style range inputs the same across browsers. Vendor-specific rules for pseudo\n// elements cannot be mixed. As such, there are no shared styles for focus or\n// active states on prefixed selectors.\n\n.form-range {\n width: 100%;\n height: add($form-range-thumb-height, $form-range-thumb-focus-box-shadow-width * 2);\n padding: 0; // Need to reset padding\n background-color: transparent;\n appearance: none;\n\n &:focus {\n outline: 0;\n\n // Pseudo-elements must be split across multiple rulesets to have an effect.\n // No box-shadow() mixin for focus accessibility.\n &::-webkit-slider-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n &::-moz-range-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n }\n\n &::-moz-focus-outer {\n border: 0;\n }\n\n &::-webkit-slider-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n margin-top: ($form-range-track-height - $form-range-thumb-height) * .5; // Webkit specific\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-webkit-slider-runnable-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent; // Why?\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent;\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &::-moz-range-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-moz-range-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent;\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent; // Firefox specific?\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &:disabled {\n pointer-events: none;\n\n &::-webkit-slider-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n\n &::-moz-range-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n }\n}\n",".form-floating {\n position: relative;\n\n > .form-control,\n > .form-select {\n height: $form-floating-height;\n line-height: $form-floating-line-height;\n }\n\n > label {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%; // allow textareas\n padding: $form-floating-padding-y $form-floating-padding-x;\n pointer-events: none;\n border: $input-border-width solid transparent; // Required for aligning label's text with the input as it affects inner box model\n transform-origin: 0 0;\n @include transition($form-floating-transition);\n }\n\n // stylelint-disable no-duplicate-selectors\n > .form-control {\n padding: $form-floating-padding-y $form-floating-padding-x;\n\n &::placeholder {\n color: transparent;\n }\n\n &:focus,\n &:not(:placeholder-shown) {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n &:-webkit-autofill {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n }\n\n > .form-select {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n\n > .form-control:focus,\n > .form-control:not(:placeholder-shown),\n > .form-select {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n > .form-control:-webkit-autofill {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n // stylelint-enable no-duplicate-selectors\n}\n","//\n// Base styles\n//\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap; // For form validation feedback\n align-items: stretch;\n width: 100%;\n\n > .form-control,\n > .form-select {\n position: relative; // For focus state's z-index\n flex: 1 1 auto;\n width: 1%;\n min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size\n }\n\n // Bring the \"active\" form control to the top of surrounding elements\n > .form-control:focus,\n > .form-select:focus {\n z-index: 3;\n }\n\n // Ensure buttons are always above inputs for more visually pleasing borders.\n // This isn't needed for `.input-group-text` since it shares the same border-color\n // as our inputs.\n .btn {\n position: relative;\n z-index: 2;\n\n &:focus {\n z-index: 3;\n }\n }\n}\n\n\n// Textual addons\n//\n// Serves as a catch-all element for any text or radio/checkbox input you wish\n// to prepend or append to an input.\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: $input-group-addon-padding-y $input-group-addon-padding-x;\n @include font-size($input-font-size); // Match inputs\n font-weight: $input-group-addon-font-weight;\n line-height: $input-line-height;\n color: $input-group-addon-color;\n text-align: center;\n white-space: nowrap;\n background-color: $input-group-addon-bg;\n border: $input-border-width solid $input-group-addon-border-color;\n @include border-radius($input-border-radius);\n}\n\n\n// Sizing\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: $form-select-padding-x + $form-select-indicator-padding;\n}\n\n\n// Rounded corners\n//\n// These rulesets must come after the sizing ones to properly override sm and lg\n// border-radius values when extending. They're more specific than we'd like\n// with the `.input-group >` part, but without it, we cannot override the sizing.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.input-group {\n &:not(.has-validation) {\n > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n > .dropdown-toggle:nth-last-child(n + 3) {\n @include border-end-radius(0);\n }\n }\n\n &.has-validation {\n > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),\n > .dropdown-toggle:nth-last-child(n + 4) {\n @include border-end-radius(0);\n }\n }\n\n $validation-messages: \"\";\n @each $state in map-keys($form-validation-states) {\n $validation-messages: $validation-messages + \":not(.\" + unquote($state) + \"-tooltip)\" + \":not(.\" + unquote($state) + \"-feedback)\";\n }\n\n > :not(:first-child):not(.dropdown-menu)#{$validation-messages} {\n margin-left: -$input-border-width;\n @include border-start-radius(0);\n }\n}\n","// This mixin uses an `if()` technique to be compatible with Dart Sass\n// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details\n\n// scss-docs-start form-validation-mixins\n@mixin form-validation-state-selector($state) {\n @if ($state == \"valid\" or $state == \"invalid\") {\n .was-validated #{if(&, \"&\", \"\")}:#{$state},\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n } @else {\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n }\n}\n\n@mixin form-validation-state(\n $state,\n $color,\n $icon,\n $tooltip-color: color-contrast($color),\n $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity),\n $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity)\n) {\n .#{$state}-feedback {\n display: none;\n width: 100%;\n margin-top: $form-feedback-margin-top;\n @include font-size($form-feedback-font-size);\n font-style: $form-feedback-font-style;\n color: $color;\n }\n\n .#{$state}-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%; // Contain to parent when possible\n padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n margin-top: .1rem;\n @include font-size($form-feedback-tooltip-font-size);\n line-height: $form-feedback-tooltip-line-height;\n color: $tooltip-color;\n background-color: $tooltip-bg-color;\n @include border-radius($form-feedback-tooltip-border-radius);\n }\n\n @include form-validation-state-selector($state) {\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n\n .form-control {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-image: escape-svg($icon);\n background-repeat: no-repeat;\n background-position: right $input-height-inner-quarter center;\n background-size: $input-height-inner-half $input-height-inner-half;\n }\n\n &:focus {\n border-color: $color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n // stylelint-disable-next-line selector-no-qualifying-type\n textarea.form-control {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-position: top $input-height-inner-quarter right $input-height-inner-quarter;\n }\n }\n }\n\n .form-select {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n &:not([multiple]):not([size]),\n &:not([multiple])[size=\"1\"] {\n padding-right: $form-select-feedback-icon-padding-end;\n background-image: escape-svg($form-select-indicator), escape-svg($icon);\n background-position: $form-select-bg-position, $form-select-feedback-icon-position;\n background-size: $form-select-bg-size, $form-select-feedback-icon-size;\n }\n }\n\n &:focus {\n border-color: $color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n .form-check-input {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n &:checked {\n background-color: $color;\n }\n\n &:focus {\n box-shadow: $focus-box-shadow;\n }\n\n ~ .form-check-label {\n color: $color;\n }\n }\n }\n .form-check-inline .form-check-input {\n ~ .#{$state}-feedback {\n margin-left: .5em;\n }\n }\n\n .input-group .form-control,\n .input-group .form-select {\n @include form-validation-state-selector($state) {\n @if $state == \"valid\" {\n z-index: 1;\n } @else if $state == \"invalid\" {\n z-index: 2;\n }\n &:focus {\n z-index: 3;\n }\n }\n }\n}\n// scss-docs-end form-validation-mixins\n","//\n// Base styles\n//\n\n.btn {\n display: inline-block;\n font-family: $btn-font-family;\n font-weight: $btn-font-weight;\n line-height: $btn-line-height;\n color: $body-color;\n text-align: center;\n text-decoration: if($link-decoration == none, null, none);\n white-space: $btn-white-space;\n vertical-align: middle;\n cursor: if($enable-button-pointers, pointer, null);\n user-select: none;\n background-color: transparent;\n border: $btn-border-width solid transparent;\n @include button-size($btn-padding-y, $btn-padding-x, $btn-font-size, $btn-border-radius);\n @include transition($btn-transition);\n\n &:hover {\n color: $body-color;\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n .btn-check:focus + &,\n &:focus {\n outline: 0;\n box-shadow: $btn-focus-box-shadow;\n }\n\n .btn-check:checked + &,\n .btn-check:active + &,\n &:active,\n &.active {\n @include box-shadow($btn-active-box-shadow);\n\n &:focus {\n @include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);\n }\n }\n\n &:disabled,\n &.disabled,\n fieldset:disabled & {\n pointer-events: none;\n opacity: $btn-disabled-opacity;\n @include box-shadow(none);\n }\n}\n\n\n//\n// Alternate buttons\n//\n\n// scss-docs-start btn-variant-loops\n@each $color, $value in $theme-colors {\n .btn-#{$color} {\n @include button-variant($value, $value);\n }\n}\n\n@each $color, $value in $theme-colors {\n .btn-outline-#{$color} {\n @include button-outline-variant($value);\n }\n}\n// scss-docs-end btn-variant-loops\n\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n font-weight: $font-weight-normal;\n color: $btn-link-color;\n text-decoration: $link-decoration;\n\n &:hover {\n color: $btn-link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n\n &:focus {\n text-decoration: $link-hover-decoration;\n }\n\n &:disabled,\n &.disabled {\n color: $btn-link-disabled-color;\n }\n\n // No need for an active state here\n}\n\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-border-radius-lg);\n}\n\n.btn-sm {\n @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-border-radius-sm);\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n// scss-docs-start btn-variant-mixin\n@mixin button-variant(\n $background,\n $border,\n $color: color-contrast($background),\n $hover-background: if($color == $color-contrast-light, shade-color($background, $btn-hover-bg-shade-amount), tint-color($background, $btn-hover-bg-tint-amount)),\n $hover-border: if($color == $color-contrast-light, shade-color($border, $btn-hover-border-shade-amount), tint-color($border, $btn-hover-border-tint-amount)),\n $hover-color: color-contrast($hover-background),\n $active-background: if($color == $color-contrast-light, shade-color($background, $btn-active-bg-shade-amount), tint-color($background, $btn-active-bg-tint-amount)),\n $active-border: if($color == $color-contrast-light, shade-color($border, $btn-active-border-shade-amount), tint-color($border, $btn-active-border-tint-amount)),\n $active-color: color-contrast($active-background),\n $disabled-background: $background,\n $disabled-border: $border,\n $disabled-color: color-contrast($disabled-background)\n) {\n color: $color;\n @include gradient-bg($background);\n border-color: $border;\n @include box-shadow($btn-box-shadow);\n\n &:hover {\n color: $hover-color;\n @include gradient-bg($hover-background);\n border-color: $hover-border;\n }\n\n .btn-check:focus + &,\n &:focus {\n color: $hover-color;\n @include gradient-bg($hover-background);\n border-color: $hover-border;\n @if $enable-shadows {\n @include box-shadow($btn-box-shadow, 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5);\n }\n }\n\n .btn-check:checked + &,\n .btn-check:active + &,\n &:active,\n &.active,\n .show > &.dropdown-toggle {\n color: $active-color;\n background-color: $active-background;\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n border-color: $active-border;\n\n &:focus {\n @if $enable-shadows {\n @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5);\n }\n }\n }\n\n &:disabled,\n &.disabled {\n color: $disabled-color;\n background-color: $disabled-background;\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n border-color: $disabled-border;\n }\n}\n// scss-docs-end btn-variant-mixin\n\n// scss-docs-start btn-outline-variant-mixin\n@mixin button-outline-variant(\n $color,\n $color-hover: color-contrast($color),\n $active-background: $color,\n $active-border: $color,\n $active-color: color-contrast($active-background)\n) {\n color: $color;\n border-color: $color;\n\n &:hover {\n color: $color-hover;\n background-color: $active-background;\n border-color: $active-border;\n }\n\n .btn-check:focus + &,\n &:focus {\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n\n .btn-check:checked + &,\n .btn-check:active + &,\n &:active,\n &.active,\n &.dropdown-toggle.show {\n color: $active-color;\n background-color: $active-background;\n border-color: $active-border;\n\n &:focus {\n @if $enable-shadows {\n @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5));\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n }\n }\n\n &:disabled,\n &.disabled {\n color: $color;\n background-color: transparent;\n }\n}\n// scss-docs-end btn-outline-variant-mixin\n\n// scss-docs-start btn-size-mixin\n@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {\n padding: $padding-y $padding-x;\n @include font-size($font-size);\n // Manually declare to provide an override to the browser default\n @include border-radius($border-radius, 0);\n}\n// scss-docs-end btn-size-mixin\n",".fade {\n @include transition($transition-fade);\n\n &:not(.show) {\n opacity: 0;\n }\n}\n\n// scss-docs-start collapse-classes\n.collapse {\n &:not(.show) {\n display: none;\n }\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n @include transition($transition-collapse);\n\n &.collapse-horizontal {\n width: 0;\n height: auto;\n @include transition($transition-collapse-width);\n }\n}\n// scss-docs-end collapse-classes\n","// The dropdown wrapper (`<div>`)\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n\n // Generate the caret automatically\n @include caret();\n}\n\n// The dropdown menu\n.dropdown-menu {\n position: absolute;\n z-index: $zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n min-width: $dropdown-min-width;\n padding: $dropdown-padding-y $dropdown-padding-x;\n margin: 0; // Override default margin of ul\n @include font-size($dropdown-font-size);\n color: $dropdown-color;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n list-style: none;\n background-color: $dropdown-bg;\n background-clip: padding-box;\n border: $dropdown-border-width solid $dropdown-border-color;\n @include border-radius($dropdown-border-radius);\n @include box-shadow($dropdown-box-shadow);\n\n &[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: $dropdown-spacer;\n }\n}\n\n// scss-docs-start responsive-breakpoints\n// We deliberately hardcode the `bs-` prefix because we check\n// this custom property in JS to determine Popper's positioning\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .dropdown-menu#{$infix}-start {\n --bs-position: start;\n\n &[data-bs-popper] {\n right: auto;\n left: 0;\n }\n }\n\n .dropdown-menu#{$infix}-end {\n --bs-position: end;\n\n &[data-bs-popper] {\n right: 0;\n left: auto;\n }\n }\n }\n}\n// scss-docs-end responsive-breakpoints\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n// Just add .dropup after the standard .dropdown class and you're set.\n.dropup {\n .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(up);\n }\n}\n\n.dropend {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(end);\n &::after {\n vertical-align: 0;\n }\n }\n}\n\n.dropstart {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(start);\n &::before {\n vertical-align: 0;\n }\n }\n}\n\n\n// Dividers (basically an `<hr>`) within the dropdown\n.dropdown-divider {\n height: 0;\n margin: $dropdown-divider-margin-y 0;\n overflow: hidden;\n border-top: 1px solid $dropdown-divider-bg;\n}\n\n// Links, buttons, and more within the dropdown menu\n//\n// `<button>`-specific styles are denoted with `// For <button>s`\n.dropdown-item {\n display: block;\n width: 100%; // For `<button>`s\n padding: $dropdown-item-padding-y $dropdown-item-padding-x;\n clear: both;\n font-weight: $font-weight-normal;\n color: $dropdown-link-color;\n text-align: inherit; // For `<button>`s\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n background-color: transparent; // For `<button>`s\n border: 0; // For `<button>`s\n\n // Prevent dropdown overflow if there's no padding\n // See https://github.com/twbs/bootstrap/pull/27703\n @if $dropdown-padding-y == 0 {\n &:first-child {\n @include border-top-radius($dropdown-inner-border-radius);\n }\n\n &:last-child {\n @include border-bottom-radius($dropdown-inner-border-radius);\n }\n }\n\n &:hover,\n &:focus {\n color: $dropdown-link-hover-color;\n text-decoration: if($link-hover-decoration == underline, none, null);\n @include gradient-bg($dropdown-link-hover-bg);\n }\n\n &.active,\n &:active {\n color: $dropdown-link-active-color;\n text-decoration: none;\n @include gradient-bg($dropdown-link-active-bg);\n }\n\n &.disabled,\n &:disabled {\n color: $dropdown-link-disabled-color;\n pointer-events: none;\n background-color: transparent;\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n }\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: $dropdown-header-padding;\n margin-bottom: 0; // for use with heading elements\n @include font-size($font-size-sm);\n color: $dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Dropdown text\n.dropdown-item-text {\n display: block;\n padding: $dropdown-item-padding-y $dropdown-item-padding-x;\n color: $dropdown-link-color;\n}\n\n// Dark dropdowns\n.dropdown-menu-dark {\n color: $dropdown-dark-color;\n background-color: $dropdown-dark-bg;\n border-color: $dropdown-dark-border-color;\n @include box-shadow($dropdown-dark-box-shadow);\n\n .dropdown-item {\n color: $dropdown-dark-link-color;\n\n &:hover,\n &:focus {\n color: $dropdown-dark-link-hover-color;\n @include gradient-bg($dropdown-dark-link-hover-bg);\n }\n\n &.active,\n &:active {\n color: $dropdown-dark-link-active-color;\n @include gradient-bg($dropdown-dark-link-active-bg);\n }\n\n &.disabled,\n &:disabled {\n color: $dropdown-dark-link-disabled-color;\n }\n }\n\n .dropdown-divider {\n border-color: $dropdown-dark-divider-bg;\n }\n\n .dropdown-item-text {\n color: $dropdown-dark-link-color;\n }\n\n .dropdown-header {\n color: $dropdown-dark-header-color;\n }\n}\n","// scss-docs-start caret-mixins\n@mixin caret-down {\n border-top: $caret-width solid;\n border-right: $caret-width solid transparent;\n border-bottom: 0;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-up {\n border-top: 0;\n border-right: $caret-width solid transparent;\n border-bottom: $caret-width solid;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-end {\n border-top: $caret-width solid transparent;\n border-right: 0;\n border-bottom: $caret-width solid transparent;\n border-left: $caret-width solid;\n}\n\n@mixin caret-start {\n border-top: $caret-width solid transparent;\n border-right: $caret-width solid;\n border-bottom: $caret-width solid transparent;\n}\n\n@mixin caret($direction: down) {\n @if $enable-caret {\n &::after {\n display: inline-block;\n margin-left: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @if $direction == down {\n @include caret-down();\n } @else if $direction == up {\n @include caret-up();\n } @else if $direction == end {\n @include caret-end();\n }\n }\n\n @if $direction == start {\n &::after {\n display: none;\n }\n\n &::before {\n display: inline-block;\n margin-right: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @include caret-start();\n }\n }\n\n &:empty::after {\n margin-left: 0;\n }\n }\n}\n// scss-docs-end caret-mixins\n","// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle; // match .btn alignment given font-size hack above\n\n > .btn {\n position: relative;\n flex: 1 1 auto;\n }\n\n // Bring the hover, focused, and \"active\" buttons to the front to overlay\n // the borders properly\n > .btn-check:checked + .btn,\n > .btn-check:focus + .btn,\n > .btn:hover,\n > .btn:focus,\n > .btn:active,\n > .btn.active {\n z-index: 1;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n\n .input-group {\n width: auto;\n }\n}\n\n.btn-group {\n // Prevent double borders when buttons are next to each other\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-left: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-end-radius(0);\n }\n\n // The left radius should be 0 if the button is:\n // - the \"third or more\" child\n // - the second child and the previous element isn't `.btn-check` (making it the first child visually)\n // - part of a btn-group which isn't the first child\n > .btn:nth-child(n + 3),\n > :not(.btn-check) + .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-start-radius(0);\n }\n}\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n//\n// Split button dropdowns\n//\n\n.dropdown-toggle-split {\n padding-right: $btn-padding-x * .75;\n padding-left: $btn-padding-x * .75;\n\n &::after,\n .dropup &::after,\n .dropend &::after {\n margin-left: 0;\n }\n\n .dropstart &::before {\n margin-right: 0;\n }\n}\n\n.btn-sm + .dropdown-toggle-split {\n padding-right: $btn-padding-x-sm * .75;\n padding-left: $btn-padding-x-sm * .75;\n}\n\n.btn-lg + .dropdown-toggle-split {\n padding-right: $btn-padding-x-lg * .75;\n padding-left: $btn-padding-x-lg * .75;\n}\n\n\n// The clickable button for toggling the menu\n// Set the same inset shadow as the :active state\n.btn-group.show .dropdown-toggle {\n @include box-shadow($btn-active-box-shadow);\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n @include box-shadow(none);\n }\n}\n\n\n//\n// Vertical button groups\n//\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n > .btn,\n > .btn-group {\n width: 100%;\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-top: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-bottom-radius(0);\n }\n\n > .btn ~ .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-top-radius(0);\n }\n}\n","// Base class\n//\n// Kickstart any navigation component with a set of style resets. Works with\n// `<nav>`s, `<ul>`s or `<ol>`s.\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: $nav-link-padding-y $nav-link-padding-x;\n @include font-size($nav-link-font-size);\n font-weight: $nav-link-font-weight;\n color: $nav-link-color;\n text-decoration: if($link-decoration == none, null, none);\n @include transition($nav-link-transition);\n\n &:hover,\n &:focus {\n color: $nav-link-hover-color;\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n // Disabled state lightens text\n &.disabled {\n color: $nav-link-disabled-color;\n pointer-events: none;\n cursor: default;\n }\n}\n\n//\n// Tabs\n//\n\n.nav-tabs {\n border-bottom: $nav-tabs-border-width solid $nav-tabs-border-color;\n\n .nav-link {\n margin-bottom: -$nav-tabs-border-width;\n background: none;\n border: $nav-tabs-border-width solid transparent;\n @include border-top-radius($nav-tabs-border-radius);\n\n &:hover,\n &:focus {\n border-color: $nav-tabs-link-hover-border-color;\n // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link\n isolation: isolate;\n }\n\n &.disabled {\n color: $nav-link-disabled-color;\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .nav-item.show .nav-link {\n color: $nav-tabs-link-active-color;\n background-color: $nav-tabs-link-active-bg;\n border-color: $nav-tabs-link-active-border-color;\n }\n\n .dropdown-menu {\n // Make dropdown border overlap tab border\n margin-top: -$nav-tabs-border-width;\n // Remove the top rounded corners here since there is a hard edge above the menu\n @include border-top-radius(0);\n }\n}\n\n\n//\n// Pills\n//\n\n.nav-pills {\n .nav-link {\n background: none;\n border: 0;\n @include border-radius($nav-pills-border-radius);\n }\n\n .nav-link.active,\n .show > .nav-link {\n color: $nav-pills-link-active-color;\n @include gradient-bg($nav-pills-link-active-bg);\n }\n}\n\n\n//\n// Justified variants\n//\n\n.nav-fill {\n > .nav-link,\n .nav-item {\n flex: 1 1 auto;\n text-align: center;\n }\n}\n\n.nav-justified {\n > .nav-link,\n .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n }\n}\n\n.nav-fill,\n.nav-justified {\n .nav-item .nav-link {\n width: 100%; // Make sure button will grow\n }\n}\n\n\n// Tabbable tabs\n//\n// Hide tabbable panes to start, show them when `.active`\n\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n","// Contents\n//\n// Navbar\n// Navbar brand\n// Navbar nav\n// Navbar text\n// Responsive navbar\n// Navbar position\n// Navbar themes\n\n\n// Navbar\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap; // allow us to do the line break for collapsing content\n align-items: center;\n justify-content: space-between; // space out brand from logo\n padding-top: $navbar-padding-y;\n padding-right: $navbar-padding-x; // default: null\n padding-bottom: $navbar-padding-y;\n padding-left: $navbar-padding-x; // default: null\n @include gradient-bg();\n\n // Because flex properties aren't inherited, we need to redeclare these first\n // few properties so that content nested within behave properly.\n // The `flex-wrap` property is inherited to simplify the expanded navbars\n %container-flex-properties {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n }\n\n > .container,\n > .container-fluid {\n @extend %container-flex-properties;\n }\n\n @each $breakpoint, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($breakpoint, $container-max-widths)} {\n @extend %container-flex-properties;\n }\n }\n}\n\n\n// Navbar brand\n//\n// Used for brand, project, or site names.\n\n.navbar-brand {\n padding-top: $navbar-brand-padding-y;\n padding-bottom: $navbar-brand-padding-y;\n margin-right: $navbar-brand-margin-end;\n @include font-size($navbar-brand-font-size);\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap;\n\n &:hover,\n &:focus {\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n}\n\n\n// Navbar nav\n//\n// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).\n\n.navbar-nav {\n display: flex;\n flex-direction: column; // cannot use `inherit` to get the `.navbar`s value\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-link {\n padding-right: 0;\n padding-left: 0;\n }\n\n .dropdown-menu {\n position: static;\n }\n}\n\n\n// Navbar text\n//\n//\n\n.navbar-text {\n padding-top: $nav-link-padding-y;\n padding-bottom: $nav-link-padding-y;\n}\n\n\n// Responsive navbar\n//\n// Custom styles for responsive collapsing and toggling of navbar contents.\n// Powered by the collapse Bootstrap JavaScript plugin.\n\n// When collapsed, prevent the toggleable navbar contents from appearing in\n// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`\n// on the `.navbar` parent.\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n // For always expanded or extra full navbars, ensure content aligns itself\n // properly vertically. Can be easily overridden with flex utilities.\n align-items: center;\n}\n\n// Button for toggling the navbar when in its collapsed state\n.navbar-toggler {\n padding: $navbar-toggler-padding-y $navbar-toggler-padding-x;\n @include font-size($navbar-toggler-font-size);\n line-height: 1;\n background-color: transparent; // remove default button style\n border: $border-width solid transparent; // remove default button style\n @include border-radius($navbar-toggler-border-radius);\n @include transition($navbar-toggler-transition);\n\n &:hover {\n text-decoration: none;\n }\n\n &:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 $navbar-toggler-focus-width;\n }\n}\n\n// Keep as a separate element so folks can easily override it with another icon\n// or image file as needed.\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--#{$variable-prefix}scroll-height, 75vh);\n overflow-y: auto;\n}\n\n// scss-docs-start navbar-expand-loop\n// Generate series of `.navbar-expand-*` responsive classes for configuring\n// where your navbar collapses.\n.navbar-expand {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n // stylelint-disable-next-line scss/selector-no-union-class-name\n &#{$infix} {\n @include media-breakpoint-up($next) {\n flex-wrap: nowrap;\n justify-content: flex-start;\n\n .navbar-nav {\n flex-direction: row;\n\n .dropdown-menu {\n position: absolute;\n }\n\n .nav-link {\n padding-right: $navbar-nav-link-padding-x;\n padding-left: $navbar-nav-link-padding-x;\n }\n }\n\n .navbar-nav-scroll {\n overflow: visible;\n }\n\n .navbar-collapse {\n display: flex !important; // stylelint-disable-line declaration-no-important\n flex-basis: auto;\n }\n\n .navbar-toggler {\n display: none;\n }\n\n .offcanvas-header {\n display: none;\n }\n\n .offcanvas {\n position: inherit;\n bottom: 0;\n z-index: 1000;\n flex-grow: 1;\n visibility: visible !important; // stylelint-disable-line declaration-no-important\n background-color: transparent;\n border-right: 0;\n border-left: 0;\n @include transition(none);\n transform: none;\n }\n .offcanvas-top,\n .offcanvas-bottom {\n height: auto;\n border-top: 0;\n border-bottom: 0;\n }\n\n .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n }\n }\n }\n}\n// scss-docs-end navbar-expand-loop\n\n// Navbar themes\n//\n// Styles for switching between navbars with light or dark background.\n\n// Dark links against a light background\n.navbar-light {\n .navbar-brand {\n color: $navbar-light-brand-color;\n\n &:hover,\n &:focus {\n color: $navbar-light-brand-hover-color;\n }\n }\n\n .navbar-nav {\n .nav-link {\n color: $navbar-light-color;\n\n &:hover,\n &:focus {\n color: $navbar-light-hover-color;\n }\n\n &.disabled {\n color: $navbar-light-disabled-color;\n }\n }\n\n .show > .nav-link,\n .nav-link.active {\n color: $navbar-light-active-color;\n }\n }\n\n .navbar-toggler {\n color: $navbar-light-color;\n border-color: $navbar-light-toggler-border-color;\n }\n\n .navbar-toggler-icon {\n background-image: escape-svg($navbar-light-toggler-icon-bg);\n }\n\n .navbar-text {\n color: $navbar-light-color;\n\n a,\n a:hover,\n a:focus {\n color: $navbar-light-active-color;\n }\n }\n}\n\n// White links against a dark background\n.navbar-dark {\n .navbar-brand {\n color: $navbar-dark-brand-color;\n\n &:hover,\n &:focus {\n color: $navbar-dark-brand-hover-color;\n }\n }\n\n .navbar-nav {\n .nav-link {\n color: $navbar-dark-color;\n\n &:hover,\n &:focus {\n color: $navbar-dark-hover-color;\n }\n\n &.disabled {\n color: $navbar-dark-disabled-color;\n }\n }\n\n .show > .nav-link,\n .nav-link.active {\n color: $navbar-dark-active-color;\n }\n }\n\n .navbar-toggler {\n color: $navbar-dark-color;\n border-color: $navbar-dark-toggler-border-color;\n }\n\n .navbar-toggler-icon {\n background-image: escape-svg($navbar-dark-toggler-icon-bg);\n }\n\n .navbar-text {\n color: $navbar-dark-color;\n a,\n a:hover,\n a:focus {\n color: $navbar-dark-active-color;\n }\n }\n}\n","//\n// Base styles\n//\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106\n height: $card-height;\n word-wrap: break-word;\n background-color: $card-bg;\n background-clip: border-box;\n border: $card-border-width solid $card-border-color;\n @include border-radius($card-border-radius);\n @include box-shadow($card-box-shadow);\n\n > hr {\n margin-right: 0;\n margin-left: 0;\n }\n\n > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n\n &:first-child {\n border-top-width: 0;\n @include border-top-radius($card-inner-border-radius);\n }\n\n &:last-child {\n border-bottom-width: 0;\n @include border-bottom-radius($card-inner-border-radius);\n }\n }\n\n // Due to specificity of the above selector (`.card > .list-group`), we must\n // use a child selector here to prevent double borders.\n > .card-header + .list-group,\n > .list-group + .card-footer {\n border-top: 0;\n }\n}\n\n.card-body {\n // Enable `flex-grow: 1` for decks and groups so that card blocks take up\n // as much space as possible, ensuring footers are aligned to the bottom.\n flex: 1 1 auto;\n padding: $card-spacer-y $card-spacer-x;\n color: $card-color;\n}\n\n.card-title {\n margin-bottom: $card-title-spacer-y;\n}\n\n.card-subtitle {\n margin-top: -$card-title-spacer-y * .5;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link {\n &:hover {\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n + .card-link {\n margin-left: $card-spacer-x;\n }\n}\n\n//\n// Optional textual caps\n//\n\n.card-header {\n padding: $card-cap-padding-y $card-cap-padding-x;\n margin-bottom: 0; // Removes the default margin-bottom of <hN>\n color: $card-cap-color;\n background-color: $card-cap-bg;\n border-bottom: $card-border-width solid $card-border-color;\n\n &:first-child {\n @include border-radius($card-inner-border-radius $card-inner-border-radius 0 0);\n }\n}\n\n.card-footer {\n padding: $card-cap-padding-y $card-cap-padding-x;\n color: $card-cap-color;\n background-color: $card-cap-bg;\n border-top: $card-border-width solid $card-border-color;\n\n &:last-child {\n @include border-radius(0 0 $card-inner-border-radius $card-inner-border-radius);\n }\n}\n\n\n//\n// Header navs\n//\n\n.card-header-tabs {\n margin-right: -$card-cap-padding-x * .5;\n margin-bottom: -$card-cap-padding-y;\n margin-left: -$card-cap-padding-x * .5;\n border-bottom: 0;\n\n @if $nav-tabs-link-active-bg != $card-bg {\n .nav-link.active {\n background-color: $card-bg;\n border-bottom-color: $card-bg;\n }\n }\n}\n\n.card-header-pills {\n margin-right: -$card-cap-padding-x * .5;\n margin-left: -$card-cap-padding-x * .5;\n}\n\n// Card image\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: $card-img-overlay-padding;\n @include border-radius($card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch\n}\n\n.card-img,\n.card-img-top {\n @include border-top-radius($card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n @include border-bottom-radius($card-inner-border-radius);\n}\n\n\n//\n// Card groups\n//\n\n.card-group {\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n margin-bottom: $card-group-margin;\n }\n\n @include media-breakpoint-up(sm) {\n display: flex;\n flex-flow: row wrap;\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n flex: 1 0 0%;\n margin-bottom: 0;\n\n + .card {\n margin-left: 0;\n border-left: 0;\n }\n\n // Handle rounded corners\n @if $enable-rounded {\n &:not(:last-child) {\n @include border-end-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-right-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-right-radius: 0;\n }\n }\n\n &:not(:first-child) {\n @include border-start-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-left-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-left-radius: 0;\n }\n }\n }\n }\n }\n}\n","//\n// Base styles\n//\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: $accordion-button-padding-y $accordion-button-padding-x;\n @include font-size($font-size-base);\n color: $accordion-button-color;\n text-align: left; // Reset button style\n background-color: $accordion-button-bg;\n border: 0;\n @include border-radius(0);\n overflow-anchor: none;\n @include transition($accordion-transition);\n\n &:not(.collapsed) {\n color: $accordion-button-active-color;\n background-color: $accordion-button-active-bg;\n box-shadow: inset 0 ($accordion-border-width * -1) 0 $accordion-border-color;\n\n &::after {\n background-image: escape-svg($accordion-button-active-icon);\n transform: $accordion-icon-transform;\n }\n }\n\n // Accordion icon\n &::after {\n flex-shrink: 0;\n width: $accordion-icon-width;\n height: $accordion-icon-width;\n margin-left: auto;\n content: \"\";\n background-image: escape-svg($accordion-button-icon);\n background-repeat: no-repeat;\n background-size: $accordion-icon-width;\n @include transition($accordion-icon-transition);\n }\n\n &:hover {\n z-index: 2;\n }\n\n &:focus {\n z-index: 3;\n border-color: $accordion-button-focus-border-color;\n outline: 0;\n box-shadow: $accordion-button-focus-box-shadow;\n }\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n background-color: $accordion-bg;\n border: $accordion-border-width solid $accordion-border-color;\n\n &:first-of-type {\n @include border-top-radius($accordion-border-radius);\n\n .accordion-button {\n @include border-top-radius($accordion-inner-border-radius);\n }\n }\n\n &:not(:first-of-type) {\n border-top: 0;\n }\n\n // Only set a border-radius on the last item if the accordion is collapsed\n &:last-of-type {\n @include border-bottom-radius($accordion-border-radius);\n\n .accordion-button {\n &.collapsed {\n @include border-bottom-radius($accordion-inner-border-radius);\n }\n }\n\n .accordion-collapse {\n @include border-bottom-radius($accordion-border-radius);\n }\n }\n}\n\n.accordion-body {\n padding: $accordion-body-padding-y $accordion-body-padding-x;\n}\n\n\n// Flush accordion items\n//\n// Remove borders and border-radius to keep accordion items edge-to-edge.\n\n.accordion-flush {\n .accordion-collapse {\n border-width: 0;\n }\n\n .accordion-item {\n border-right: 0;\n border-left: 0;\n @include border-radius(0);\n\n &:first-child { border-top: 0; }\n &:last-child { border-bottom: 0; }\n\n .accordion-button {\n @include border-radius(0);\n }\n }\n}\n",".breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: $breadcrumb-padding-y $breadcrumb-padding-x;\n margin-bottom: $breadcrumb-margin-bottom;\n @include font-size($breadcrumb-font-size);\n list-style: none;\n background-color: $breadcrumb-bg;\n @include border-radius($breadcrumb-border-radius);\n}\n\n.breadcrumb-item {\n // The separator between breadcrumbs (by default, a forward-slash: \"/\")\n + .breadcrumb-item {\n padding-left: $breadcrumb-item-padding-x;\n\n &::before {\n float: left; // Suppress inline spacings and underlining of the separator\n padding-right: $breadcrumb-item-padding-x;\n color: $breadcrumb-divider-color;\n content: var(--#{$variable-prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{\"/* rtl:\"} var(--#{$variable-prefix}breadcrumb-divider, escape-svg($breadcrumb-divider-flipped)) #{\"*/\"};\n }\n }\n\n &.active {\n color: $breadcrumb-active-color;\n }\n}\n",".pagination {\n display: flex;\n @include list-unstyled();\n}\n\n.page-link {\n position: relative;\n display: block;\n color: $pagination-color;\n text-decoration: if($link-decoration == none, null, none);\n background-color: $pagination-bg;\n border: $pagination-border-width solid $pagination-border-color;\n @include transition($pagination-transition);\n\n &:hover {\n z-index: 2;\n color: $pagination-hover-color;\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: $pagination-hover-bg;\n border-color: $pagination-hover-border-color;\n }\n\n &:focus {\n z-index: 3;\n color: $pagination-focus-color;\n background-color: $pagination-focus-bg;\n outline: $pagination-focus-outline;\n box-shadow: $pagination-focus-box-shadow;\n }\n}\n\n.page-item {\n &:not(:first-child) .page-link {\n margin-left: $pagination-margin-start;\n }\n\n &.active .page-link {\n z-index: 3;\n color: $pagination-active-color;\n @include gradient-bg($pagination-active-bg);\n border-color: $pagination-active-border-color;\n }\n\n &.disabled .page-link {\n color: $pagination-disabled-color;\n pointer-events: none;\n background-color: $pagination-disabled-bg;\n border-color: $pagination-disabled-border-color;\n }\n}\n\n\n//\n// Sizing\n//\n@include pagination-size($pagination-padding-y, $pagination-padding-x, null, $pagination-border-radius);\n\n.pagination-lg {\n @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $pagination-border-radius-lg);\n}\n\n.pagination-sm {\n @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $pagination-border-radius-sm);\n}\n","// Pagination\n\n// scss-docs-start pagination-mixin\n@mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) {\n .page-link {\n padding: $padding-y $padding-x;\n @include font-size($font-size);\n }\n\n .page-item {\n @if $pagination-margin-start == (-$pagination-border-width) {\n &:first-child {\n .page-link {\n @include border-start-radius($border-radius);\n }\n }\n\n &:last-child {\n .page-link {\n @include border-end-radius($border-radius);\n }\n }\n } @else {\n //Add border-radius to all pageLinks in case they have left margin\n .page-link {\n @include border-radius($border-radius);\n }\n }\n }\n}\n// scss-docs-end pagination-mixin\n","// Base class\n//\n// Requires one of the contextual, color modifier classes for `color` and\n// `background-color`.\n\n.badge {\n display: inline-block;\n padding: $badge-padding-y $badge-padding-x;\n @include font-size($badge-font-size);\n font-weight: $badge-font-weight;\n line-height: 1;\n color: $badge-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n @include border-radius($badge-border-radius);\n @include gradient-bg();\n\n // Empty badges collapse automatically\n &:empty {\n display: none;\n }\n}\n\n// Quick fix for badges in buttons\n.btn .badge {\n position: relative;\n top: -1px;\n}\n","//\n// Base styles\n//\n\n.alert {\n position: relative;\n padding: $alert-padding-y $alert-padding-x;\n margin-bottom: $alert-margin-bottom;\n border: $alert-border-width solid transparent;\n @include border-radius($alert-border-radius);\n}\n\n// Headings for larger alerts\n.alert-heading {\n // Specified to prevent conflicts of changing $headings-color\n color: inherit;\n}\n\n// Provide class for links that match alerts\n.alert-link {\n font-weight: $alert-link-font-weight;\n}\n\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissible {\n padding-right: $alert-dismissible-padding-r;\n\n // Adjust close link position\n .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: $stretched-link-z-index + 1;\n padding: $alert-padding-y * 1.25 $alert-padding-x;\n }\n}\n\n\n// scss-docs-start alert-modifiers\n// Generate contextual modifier classes for colorizing the alert.\n\n@each $state, $value in $theme-colors {\n $alert-background: shift-color($value, $alert-bg-scale);\n $alert-border: shift-color($value, $alert-border-scale);\n $alert-color: shift-color($value, $alert-color-scale);\n @if (contrast-ratio($alert-background, $alert-color) < $min-contrast-ratio) {\n $alert-color: mix($value, color-contrast($alert-background), abs($alert-color-scale));\n }\n .alert-#{$state} {\n @include alert-variant($alert-background, $alert-border, $alert-color);\n }\n}\n// scss-docs-end alert-modifiers\n","// scss-docs-start alert-variant-mixin\n@mixin alert-variant($background, $border, $color) {\n color: $color;\n @include gradient-bg($background);\n border-color: $border;\n\n .alert-link {\n color: shade-color($color, 20%);\n }\n}\n// scss-docs-end alert-variant-mixin\n","// Disable animation if transitions are disabled\n\n// scss-docs-start progress-keyframes\n@if $enable-transitions {\n @keyframes progress-bar-stripes {\n 0% { background-position-x: $progress-height; }\n }\n}\n// scss-docs-end progress-keyframes\n\n.progress {\n display: flex;\n height: $progress-height;\n overflow: hidden; // force rounded corners by cropping it\n @include font-size($progress-font-size);\n background-color: $progress-bg;\n @include border-radius($progress-border-radius);\n @include box-shadow($progress-box-shadow);\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: $progress-bar-color;\n text-align: center;\n white-space: nowrap;\n background-color: $progress-bar-bg;\n @include transition($progress-bar-transition);\n}\n\n.progress-bar-striped {\n @include gradient-striped();\n background-size: $progress-height $progress-height;\n}\n\n@if $enable-transitions {\n .progress-bar-animated {\n animation: $progress-bar-animation-timing progress-bar-stripes;\n\n @if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n }\n}\n","// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n display: flex;\n flex-direction: column;\n\n // No need to set list-style: none; since .list-group-item is block level\n padding-left: 0; // reset padding because ul and ol\n margin-bottom: 0;\n @include border-radius($list-group-border-radius);\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n\n > li::before {\n // Increments only this instance of the section counter\n content: counters(section, \".\") \". \";\n counter-increment: section;\n }\n}\n\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive\n// list items. Includes an extra `.active` modifier class for selected items.\n\n.list-group-item-action {\n width: 100%; // For `<button>`s (anchors become 100% by default though)\n color: $list-group-action-color;\n text-align: inherit; // For `<button>`s (anchors inherit)\n\n // Hover state\n &:hover,\n &:focus {\n z-index: 1; // Place hover/focus items above their siblings for proper border styling\n color: $list-group-action-hover-color;\n text-decoration: none;\n background-color: $list-group-hover-bg;\n }\n\n &:active {\n color: $list-group-action-active-color;\n background-color: $list-group-action-active-bg;\n }\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: $list-group-item-padding-y $list-group-item-padding-x;\n color: $list-group-color;\n text-decoration: if($link-decoration == none, null, none);\n background-color: $list-group-bg;\n border: $list-group-border-width solid $list-group-border-color;\n\n &:first-child {\n @include border-top-radius(inherit);\n }\n\n &:last-child {\n @include border-bottom-radius(inherit);\n }\n\n &.disabled,\n &:disabled {\n color: $list-group-disabled-color;\n pointer-events: none;\n background-color: $list-group-disabled-bg;\n }\n\n // Include both here for `<a>`s and `<button>`s\n &.active {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: $list-group-active-color;\n background-color: $list-group-active-bg;\n border-color: $list-group-active-border-color;\n }\n\n & + & {\n border-top-width: 0;\n\n &.active {\n margin-top: -$list-group-border-width;\n border-top-width: $list-group-border-width;\n }\n }\n}\n\n\n// Horizontal\n//\n// Change the layout of list group items from vertical (default) to horizontal.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .list-group-horizontal#{$infix} {\n flex-direction: row;\n\n > .list-group-item {\n &:first-child {\n @include border-bottom-start-radius($list-group-border-radius);\n @include border-top-end-radius(0);\n }\n\n &:last-child {\n @include border-top-end-radius($list-group-border-radius);\n @include border-bottom-start-radius(0);\n }\n\n &.active {\n margin-top: 0;\n }\n\n + .list-group-item {\n border-top-width: $list-group-border-width;\n border-left-width: 0;\n\n &.active {\n margin-left: -$list-group-border-width;\n border-left-width: $list-group-border-width;\n }\n }\n }\n }\n }\n}\n\n\n// Flush list items\n//\n// Remove borders and border-radius to keep list group items edge-to-edge. Most\n// useful within other components (e.g., cards).\n\n.list-group-flush {\n @include border-radius(0);\n\n > .list-group-item {\n border-width: 0 0 $list-group-border-width;\n\n &:last-child {\n border-bottom-width: 0;\n }\n }\n}\n\n\n// scss-docs-start list-group-modifiers\n// List group contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n@each $state, $value in $theme-colors {\n $list-group-variant-bg: shift-color($value, $list-group-item-bg-scale);\n $list-group-variant-color: shift-color($value, $list-group-item-color-scale);\n @if (contrast-ratio($list-group-variant-bg, $list-group-variant-color) < $min-contrast-ratio) {\n $list-group-variant-color: mix($value, color-contrast($list-group-variant-bg), abs($list-group-item-color-scale));\n }\n\n @include list-group-item-variant($state, $list-group-variant-bg, $list-group-variant-color);\n}\n// scss-docs-end list-group-modifiers\n","// List Groups\n\n// scss-docs-start list-group-mixin\n@mixin list-group-item-variant($state, $background, $color) {\n .list-group-item-#{$state} {\n color: $color;\n background-color: $background;\n\n &.list-group-item-action {\n &:hover,\n &:focus {\n color: $color;\n background-color: shade-color($background, 10%);\n }\n\n &.active {\n color: $white;\n background-color: $color;\n border-color: $color;\n }\n }\n }\n}\n// scss-docs-end list-group-mixin\n","// transparent background and border properties included for button version.\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n.btn-close {\n box-sizing: content-box;\n width: $btn-close-width;\n height: $btn-close-height;\n padding: $btn-close-padding-y $btn-close-padding-x;\n color: $btn-close-color;\n background: transparent escape-svg($btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements\n border: 0; // for button elements\n @include border-radius();\n opacity: $btn-close-opacity;\n\n // Override <a>'s hover style\n &:hover {\n color: $btn-close-color;\n text-decoration: none;\n opacity: $btn-close-hover-opacity;\n }\n\n &:focus {\n outline: 0;\n box-shadow: $btn-close-focus-shadow;\n opacity: $btn-close-focus-opacity;\n }\n\n &:disabled,\n &.disabled {\n pointer-events: none;\n user-select: none;\n opacity: $btn-close-disabled-opacity;\n }\n}\n\n.btn-close-white {\n filter: $btn-close-white-filter;\n}\n",".toast {\n width: $toast-max-width;\n max-width: 100%;\n @include font-size($toast-font-size);\n color: $toast-color;\n pointer-events: auto;\n background-color: $toast-background-color;\n background-clip: padding-box;\n border: $toast-border-width solid $toast-border-color;\n box-shadow: $toast-box-shadow;\n @include border-radius($toast-border-radius);\n\n &.showing {\n opacity: 0;\n }\n\n &:not(.show) {\n display: none;\n }\n}\n\n.toast-container {\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n\n > :not(:last-child) {\n margin-bottom: $toast-spacing;\n }\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: $toast-padding-y $toast-padding-x;\n color: $toast-header-color;\n background-color: $toast-header-background-color;\n background-clip: padding-box;\n border-bottom: $toast-border-width solid $toast-header-border-color;\n @include border-top-radius(subtract($toast-border-radius, $toast-border-width));\n\n .btn-close {\n margin-right: $toast-padding-x * -.5;\n margin-left: $toast-padding-x;\n }\n}\n\n.toast-body {\n padding: $toast-padding-x; // apply to both vertical and horizontal\n word-wrap: break-word;\n}\n","// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and stuff\n\n\n// Container that the modal scrolls within\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex-modal;\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a\n // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342\n // See also https://github.com/twbs/bootstrap/issues/17695\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: $modal-dialog-margin;\n // allow clicks to pass through for custom click handling to close modal\n pointer-events: none;\n\n // When fading in the modal, animate it to slide down\n .modal.fade & {\n @include transition($modal-transition);\n transform: $modal-fade-transform;\n }\n .modal.show & {\n transform: $modal-show-transform;\n }\n\n // When trying to close, animate focus to scale\n .modal.modal-static & {\n transform: $modal-scale-transform;\n }\n}\n\n.modal-dialog-scrollable {\n height: subtract(100%, $modal-dialog-margin * 2);\n\n .modal-content {\n max-height: 100%;\n overflow: hidden;\n }\n\n .modal-body {\n overflow-y: auto;\n }\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: subtract(100%, $modal-dialog-margin * 2);\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`\n // counteract the pointer-events: none; in the .modal-dialog\n color: $modal-content-color;\n pointer-events: auto;\n background-color: $modal-content-bg;\n background-clip: padding-box;\n border: $modal-content-border-width solid $modal-content-border-color;\n @include border-radius($modal-content-border-radius);\n @include box-shadow($modal-content-box-shadow-xs);\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n @include overlay-backdrop($zindex-modal-backdrop, $modal-backdrop-bg, $modal-backdrop-opacity);\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends\n padding: $modal-header-padding;\n border-bottom: $modal-header-border-width solid $modal-header-border-color;\n @include border-top-radius($modal-content-inner-border-radius);\n\n .btn-close {\n padding: ($modal-header-padding-y * .5) ($modal-header-padding-x * .5);\n margin: ($modal-header-padding-y * -.5) ($modal-header-padding-x * -.5) ($modal-header-padding-y * -.5) auto;\n }\n}\n\n// Title text within header\n.modal-title {\n margin-bottom: 0;\n line-height: $modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n // Enable `flex-grow: 1` so that the body take up as much space as possible\n // when there should be a fixed height on `.modal-dialog`.\n flex: 1 1 auto;\n padding: $modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n display: flex;\n flex-wrap: wrap;\n flex-shrink: 0;\n align-items: center; // vertically center\n justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items\n padding: $modal-inner-padding - $modal-footer-margin-between * .5;\n border-top: $modal-footer-border-width solid $modal-footer-border-color;\n @include border-bottom-radius($modal-content-inner-border-radius);\n\n // Place margin between footer elements\n // This solution is far from ideal because of the universal selector usage,\n // but is needed to fix https://github.com/twbs/bootstrap/issues/24800\n > * {\n margin: $modal-footer-margin-between * .5;\n }\n}\n\n// Scale up the modal\n@include media-breakpoint-up(sm) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n max-width: $modal-md;\n margin: $modal-dialog-margin-y-sm-up auto;\n }\n\n .modal-dialog-scrollable {\n height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);\n }\n\n .modal-dialog-centered {\n min-height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);\n }\n\n .modal-content {\n @include box-shadow($modal-content-box-shadow-sm-up);\n }\n\n .modal-sm { max-width: $modal-sm; }\n}\n\n@include media-breakpoint-up(lg) {\n .modal-lg,\n .modal-xl {\n max-width: $modal-lg;\n }\n}\n\n@include media-breakpoint-up(xl) {\n .modal-xl { max-width: $modal-xl; }\n}\n\n// scss-docs-start modal-fullscreen-loop\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n $postfix: if($infix != \"\", $infix + \"-down\", \"\");\n\n @include media-breakpoint-down($breakpoint) {\n .modal-fullscreen#{$postfix} {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n\n .modal-content {\n height: 100%;\n border: 0;\n @include border-radius(0);\n }\n\n .modal-header {\n @include border-radius(0);\n }\n\n .modal-body {\n overflow-y: auto;\n }\n\n .modal-footer {\n @include border-radius(0);\n }\n }\n }\n}\n// scss-docs-end modal-fullscreen-loop\n","// Shared between modals and offcanvases\n@mixin overlay-backdrop($zindex, $backdrop-bg, $backdrop-opacity) {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex;\n width: 100vw;\n height: 100vh;\n background-color: $backdrop-bg;\n\n // Fade for backdrop\n &.fade { opacity: 0; }\n &.show { opacity: $backdrop-opacity; }\n}\n","// Base class\n.tooltip {\n position: absolute;\n z-index: $zindex-tooltip;\n display: block;\n margin: $tooltip-margin;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size($tooltip-font-size);\n // Allow breaking very long words so they don't overflow the tooltip's bounds\n word-wrap: break-word;\n opacity: 0;\n\n &.show { opacity: $tooltip-opacity; }\n\n .tooltip-arrow {\n position: absolute;\n display: block;\n width: $tooltip-arrow-width;\n height: $tooltip-arrow-height;\n\n &::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-tooltip-top {\n padding: $tooltip-arrow-height 0;\n\n .tooltip-arrow {\n bottom: 0;\n\n &::before {\n top: -1px;\n border-width: $tooltip-arrow-height ($tooltip-arrow-width * .5) 0;\n border-top-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-end {\n padding: 0 $tooltip-arrow-height;\n\n .tooltip-arrow {\n left: 0;\n width: $tooltip-arrow-height;\n height: $tooltip-arrow-width;\n\n &::before {\n right: -1px;\n border-width: ($tooltip-arrow-width * .5) $tooltip-arrow-height ($tooltip-arrow-width * .5) 0;\n border-right-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-bottom {\n padding: $tooltip-arrow-height 0;\n\n .tooltip-arrow {\n top: 0;\n\n &::before {\n bottom: -1px;\n border-width: 0 ($tooltip-arrow-width * .5) $tooltip-arrow-height;\n border-bottom-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-start {\n padding: 0 $tooltip-arrow-height;\n\n .tooltip-arrow {\n right: 0;\n width: $tooltip-arrow-height;\n height: $tooltip-arrow-width;\n\n &::before {\n left: -1px;\n border-width: ($tooltip-arrow-width * .5) 0 ($tooltip-arrow-width * .5) $tooltip-arrow-height;\n border-left-color: $tooltip-arrow-color;\n }\n }\n}\n\n.bs-tooltip-auto {\n &[data-popper-placement^=\"top\"] {\n @extend .bs-tooltip-top;\n }\n &[data-popper-placement^=\"right\"] {\n @extend .bs-tooltip-end;\n }\n &[data-popper-placement^=\"bottom\"] {\n @extend .bs-tooltip-bottom;\n }\n &[data-popper-placement^=\"left\"] {\n @extend .bs-tooltip-start;\n }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: $tooltip-max-width;\n padding: $tooltip-padding-y $tooltip-padding-x;\n color: $tooltip-color;\n text-align: center;\n background-color: $tooltip-bg;\n @include border-radius($tooltip-border-radius);\n}\n","@mixin reset-text {\n font-family: $font-family-base;\n // We deliberately do NOT reset font-size or overflow-wrap / word-wrap.\n font-style: normal;\n font-weight: $font-weight-normal;\n line-height: $line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n}\n",".popover {\n position: absolute;\n top: 0;\n left: 0 #{\"/* rtl:ignore */\"};\n z-index: $zindex-popover;\n display: block;\n max-width: $popover-max-width;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size($popover-font-size);\n // Allow breaking very long words so they don't overflow the popover's bounds\n word-wrap: break-word;\n background-color: $popover-bg;\n background-clip: padding-box;\n border: $popover-border-width solid $popover-border-color;\n @include border-radius($popover-border-radius);\n @include box-shadow($popover-box-shadow);\n\n .popover-arrow {\n position: absolute;\n display: block;\n width: $popover-arrow-width;\n height: $popover-arrow-height;\n\n &::before,\n &::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-popover-top {\n > .popover-arrow {\n bottom: subtract(-$popover-arrow-height, $popover-border-width);\n\n &::before {\n bottom: 0;\n border-width: $popover-arrow-height ($popover-arrow-width * .5) 0;\n border-top-color: $popover-arrow-outer-color;\n }\n\n &::after {\n bottom: $popover-border-width;\n border-width: $popover-arrow-height ($popover-arrow-width * .5) 0;\n border-top-color: $popover-arrow-color;\n }\n }\n}\n\n.bs-popover-end {\n > .popover-arrow {\n left: subtract(-$popover-arrow-height, $popover-border-width);\n width: $popover-arrow-height;\n height: $popover-arrow-width;\n\n &::before {\n left: 0;\n border-width: ($popover-arrow-width * .5) $popover-arrow-height ($popover-arrow-width * .5) 0;\n border-right-color: $popover-arrow-outer-color;\n }\n\n &::after {\n left: $popover-border-width;\n border-width: ($popover-arrow-width * .5) $popover-arrow-height ($popover-arrow-width * .5) 0;\n border-right-color: $popover-arrow-color;\n }\n }\n}\n\n.bs-popover-bottom {\n > .popover-arrow {\n top: subtract(-$popover-arrow-height, $popover-border-width);\n\n &::before {\n top: 0;\n border-width: 0 ($popover-arrow-width * .5) $popover-arrow-height ($popover-arrow-width * .5);\n border-bottom-color: $popover-arrow-outer-color;\n }\n\n &::after {\n top: $popover-border-width;\n border-width: 0 ($popover-arrow-width * .5) $popover-arrow-height ($popover-arrow-width * .5);\n border-bottom-color: $popover-arrow-color;\n }\n }\n\n // This will remove the popover-header's border just below the arrow\n .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: $popover-arrow-width;\n margin-left: -$popover-arrow-width * .5;\n content: \"\";\n border-bottom: $popover-border-width solid $popover-header-bg;\n }\n}\n\n.bs-popover-start {\n > .popover-arrow {\n right: subtract(-$popover-arrow-height, $popover-border-width);\n width: $popover-arrow-height;\n height: $popover-arrow-width;\n\n &::before {\n right: 0;\n border-width: ($popover-arrow-width * .5) 0 ($popover-arrow-width * .5) $popover-arrow-height;\n border-left-color: $popover-arrow-outer-color;\n }\n\n &::after {\n right: $popover-border-width;\n border-width: ($popover-arrow-width * .5) 0 ($popover-arrow-width * .5) $popover-arrow-height;\n border-left-color: $popover-arrow-color;\n }\n }\n}\n\n.bs-popover-auto {\n &[data-popper-placement^=\"top\"] {\n @extend .bs-popover-top;\n }\n &[data-popper-placement^=\"right\"] {\n @extend .bs-popover-end;\n }\n &[data-popper-placement^=\"bottom\"] {\n @extend .bs-popover-bottom;\n }\n &[data-popper-placement^=\"left\"] {\n @extend .bs-popover-start;\n }\n}\n\n// Offset the popover to account for the popover arrow\n.popover-header {\n padding: $popover-header-padding-y $popover-header-padding-x;\n margin-bottom: 0; // Reset the default from Reboot\n @include font-size($font-size-base);\n color: $popover-header-color;\n background-color: $popover-header-bg;\n border-bottom: $popover-border-width solid $popover-border-color;\n @include border-top-radius($popover-inner-border-radius);\n\n &:empty {\n display: none;\n }\n}\n\n.popover-body {\n padding: $popover-body-padding-y $popover-body-padding-x;\n color: $popover-body-color;\n}\n","// Notes on the classes:\n//\n// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)\n// even when their scroll action started on a carousel, but for compatibility (with Firefox)\n// we're preventing all actions instead\n// 2. The .carousel-item-start and .carousel-item-end is used to indicate where\n// the active slide is heading.\n// 3. .active.carousel-item is the current slide.\n// 4. .active.carousel-item-start and .active.carousel-item-end is the current\n// slide in its in-transition state. Only one of these occurs at a time.\n// 5. .carousel-item-next.carousel-item-start and .carousel-item-prev.carousel-item-end\n// is the upcoming slide in transition.\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n @include clearfix();\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n @include transition($carousel-transition);\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n\n\n//\n// Alternate transitions\n//\n\n.carousel-fade {\n .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n }\n\n .carousel-item.active,\n .carousel-item-next.carousel-item-start,\n .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n }\n\n .active.carousel-item-start,\n .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n @include transition(opacity 0s $carousel-transition-duration);\n }\n}\n\n\n//\n// Left/right controls for nav\n//\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n // Use flex for alignment (1-3)\n display: flex; // 1. allow flex styles\n align-items: center; // 2. vertically center contents\n justify-content: center; // 3. horizontally center contents\n width: $carousel-control-width;\n padding: 0;\n color: $carousel-control-color;\n text-align: center;\n background: none;\n border: 0;\n opacity: $carousel-control-opacity;\n @include transition($carousel-control-transition);\n\n // Hover/focus state\n &:hover,\n &:focus {\n color: $carousel-control-color;\n text-decoration: none;\n outline: 0;\n opacity: $carousel-control-hover-opacity;\n }\n}\n.carousel-control-prev {\n left: 0;\n background-image: if($enable-gradients, linear-gradient(90deg, rgba($black, .25), rgba($black, .001)), null);\n}\n.carousel-control-next {\n right: 0;\n background-image: if($enable-gradients, linear-gradient(270deg, rgba($black, .25), rgba($black, .001)), null);\n}\n\n// Icons for within\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: $carousel-control-icon-width;\n height: $carousel-control-icon-width;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: escape-svg($carousel-control-prev-icon-bg);\n}\n.carousel-control-next-icon {\n background-image: escape-svg($carousel-control-next-icon-bg);\n}\n\n// Optional indicator pips/controls\n//\n// Add a container (such as a list) with the following class and add an item (ideally a focusable control,\n// like a button) with data-bs-target for each slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n // Use the .carousel-control's width as margin so we don't overlay those\n margin-right: $carousel-control-width;\n margin-bottom: 1rem;\n margin-left: $carousel-control-width;\n list-style: none;\n\n [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: $carousel-indicator-width;\n height: $carousel-indicator-height;\n padding: 0;\n margin-right: $carousel-indicator-spacer;\n margin-left: $carousel-indicator-spacer;\n text-indent: -999px;\n cursor: pointer;\n background-color: $carousel-indicator-active-bg;\n background-clip: padding-box;\n border: 0;\n // Use transparent borders to increase the hit area by 10px on top and bottom.\n border-top: $carousel-indicator-hit-area-height solid transparent;\n border-bottom: $carousel-indicator-hit-area-height solid transparent;\n opacity: $carousel-indicator-opacity;\n @include transition($carousel-indicator-transition);\n }\n\n .active {\n opacity: $carousel-indicator-active-opacity;\n }\n}\n\n\n// Optional captions\n//\n//\n\n.carousel-caption {\n position: absolute;\n right: (100% - $carousel-caption-width) * .5;\n bottom: $carousel-caption-spacer;\n left: (100% - $carousel-caption-width) * .5;\n padding-top: $carousel-caption-padding-y;\n padding-bottom: $carousel-caption-padding-y;\n color: $carousel-caption-color;\n text-align: center;\n}\n\n// Dark mode carousel\n\n.carousel-dark {\n .carousel-control-prev-icon,\n .carousel-control-next-icon {\n filter: $carousel-dark-control-icon-filter;\n }\n\n .carousel-indicators [data-bs-target] {\n background-color: $carousel-dark-indicator-active-bg;\n }\n\n .carousel-caption {\n color: $carousel-dark-caption-color;\n }\n}\n","// scss-docs-start clearfix\n@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n// scss-docs-end clearfix\n","//\n// Rotating border\n//\n\n// scss-docs-start spinner-border-keyframes\n@keyframes spinner-border {\n to { transform: rotate(360deg) #{\"/* rtl:ignore */\"}; }\n}\n// scss-docs-end spinner-border-keyframes\n\n.spinner-border {\n display: inline-block;\n width: $spinner-width;\n height: $spinner-height;\n vertical-align: $spinner-vertical-align;\n border: $spinner-border-width solid currentColor;\n border-right-color: transparent;\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 50%;\n animation: $spinner-animation-speed linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n width: $spinner-width-sm;\n height: $spinner-height-sm;\n border-width: $spinner-border-width-sm;\n}\n\n//\n// Growing circle\n//\n\n// scss-docs-start spinner-grow-keyframes\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n// scss-docs-end spinner-grow-keyframes\n\n.spinner-grow {\n display: inline-block;\n width: $spinner-width;\n height: $spinner-height;\n vertical-align: $spinner-vertical-align;\n background-color: currentColor;\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 50%;\n opacity: 0;\n animation: $spinner-animation-speed linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n width: $spinner-width-sm;\n height: $spinner-height-sm;\n}\n\n@if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n animation-duration: $spinner-animation-speed * 2;\n }\n }\n}\n",".offcanvas {\n position: fixed;\n bottom: 0;\n z-index: $zindex-offcanvas;\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: $offcanvas-color;\n visibility: hidden;\n background-color: $offcanvas-bg-color;\n background-clip: padding-box;\n outline: 0;\n @include box-shadow($offcanvas-box-shadow);\n @include transition(transform $offcanvas-transition-duration ease-in-out);\n}\n\n.offcanvas-backdrop {\n @include overlay-backdrop($zindex-offcanvas-backdrop, $offcanvas-backdrop-bg, $offcanvas-backdrop-opacity);\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: $offcanvas-padding-y $offcanvas-padding-x;\n\n .btn-close {\n padding: ($offcanvas-padding-y * .5) ($offcanvas-padding-x * .5);\n margin-top: $offcanvas-padding-y * -.5;\n margin-right: $offcanvas-padding-x * -.5;\n margin-bottom: $offcanvas-padding-y * -.5;\n }\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: $offcanvas-title-line-height;\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: $offcanvas-padding-y $offcanvas-padding-x;\n overflow-y: auto;\n}\n\n.offcanvas-start {\n top: 0;\n left: 0;\n width: $offcanvas-horizontal-width;\n border-right: $offcanvas-border-width solid $offcanvas-border-color;\n transform: translateX(-100%);\n}\n\n.offcanvas-end {\n top: 0;\n right: 0;\n width: $offcanvas-horizontal-width;\n border-left: $offcanvas-border-width solid $offcanvas-border-color;\n transform: translateX(100%);\n}\n\n.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: $offcanvas-vertical-height;\n max-height: 100%;\n border-bottom: $offcanvas-border-width solid $offcanvas-border-color;\n transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n right: 0;\n left: 0;\n height: $offcanvas-vertical-height;\n max-height: 100%;\n border-top: $offcanvas-border-width solid $offcanvas-border-color;\n transform: translateY(100%);\n}\n\n.offcanvas.show {\n transform: none;\n}\n",".placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentColor;\n opacity: $placeholder-opacity-max;\n\n &.btn::before {\n display: inline-block;\n content: \"\";\n }\n}\n\n// Sizing\n.placeholder-xs {\n min-height: .6em;\n}\n\n.placeholder-sm {\n min-height: .8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n// Animation\n.placeholder-glow {\n .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n }\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: $placeholder-opacity-min;\n }\n}\n\n.placeholder-wave {\n mask-image: linear-gradient(130deg, $black 55%, rgba(0, 0, 0, (1 - $placeholder-opacity-min)) 75%, $black 95%);\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n mask-position: -200% 0%;\n }\n}\n","@each $color, $value in $theme-colors {\n .link-#{$color} {\n color: $value;\n\n @if $link-shade-percentage != 0 {\n &:hover,\n &:focus {\n color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage));\n }\n }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n position: relative;\n width: 100%;\n\n &::before {\n display: block;\n padding-top: var(--#{$variable-prefix}aspect-ratio);\n content: \"\";\n }\n\n > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n@each $key, $ratio in $aspect-ratios {\n .ratio-#{$key} {\n --#{$variable-prefix}aspect-ratio: #{$ratio};\n }\n}\n","// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n// Responsive sticky top\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .sticky#{$infix}-top {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n }\n}\n","// scss-docs-start stacks\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n// scss-docs-end stacks\n","//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n @include visually-hidden();\n}\n","// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n &:not(:focus):not(:focus-within) {\n @include visually-hidden();\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::#{$stretched-link-pseudo-element} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $stretched-link-z-index;\n content: \"\";\n }\n}\n","//\n// Text truncation\n//\n\n.text-truncate {\n @include text-truncate();\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n",".vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentColor;\n opacity: $hr-opacity;\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 // 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 (eg. 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 --#{$variable-prefix}#{$property-class}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$variable-prefix}#{$property-class}: #{$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, $value in $is-local-vars {\n --#{$variable-prefix}#{$local-var}: #{$value};\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 #{$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"]}
|
js/bootstrap/fonts/glyphicons-halflings-regular.woff2
ADDED
Binary file
|
js/bootstrap/js/bootstrap.bundle.js
ADDED
@@ -0,0 +1,6812 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* Bootstrap v5.1.3 (https://getbootstrap.com/)
|
3 |
+
* Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
4 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
5 |
+
*/
|
6 |
+
(function (global, factory) {
|
7 |
+
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
8 |
+
typeof define === 'function' && define.amd ? define(factory) :
|
9 |
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());
|
10 |
+
})(this, (function () { 'use strict';
|
11 |
+
|
12 |
+
/**
|
13 |
+
* --------------------------------------------------------------------------
|
14 |
+
* Bootstrap (v5.1.3): util/index.js
|
15 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
16 |
+
* --------------------------------------------------------------------------
|
17 |
+
*/
|
18 |
+
const MAX_UID = 1000000;
|
19 |
+
const MILLISECONDS_MULTIPLIER = 1000;
|
20 |
+
const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
|
21 |
+
|
22 |
+
const toType = obj => {
|
23 |
+
if (obj === null || obj === undefined) {
|
24 |
+
return `${obj}`;
|
25 |
+
}
|
26 |
+
|
27 |
+
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
|
28 |
+
};
|
29 |
+
/**
|
30 |
+
* --------------------------------------------------------------------------
|
31 |
+
* Public Util Api
|
32 |
+
* --------------------------------------------------------------------------
|
33 |
+
*/
|
34 |
+
|
35 |
+
|
36 |
+
const getUID = prefix => {
|
37 |
+
do {
|
38 |
+
prefix += Math.floor(Math.random() * MAX_UID);
|
39 |
+
} while (document.getElementById(prefix));
|
40 |
+
|
41 |
+
return prefix;
|
42 |
+
};
|
43 |
+
|
44 |
+
const getSelector = element => {
|
45 |
+
let selector = element.getAttribute('data-bs-target');
|
46 |
+
|
47 |
+
if (!selector || selector === '#') {
|
48 |
+
let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
|
49 |
+
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
|
50 |
+
// `document.querySelector` will rightfully complain it is invalid.
|
51 |
+
// See https://github.com/twbs/bootstrap/issues/32273
|
52 |
+
|
53 |
+
if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
|
54 |
+
return null;
|
55 |
+
} // Just in case some CMS puts out a full URL with the anchor appended
|
56 |
+
|
57 |
+
|
58 |
+
if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
|
59 |
+
hrefAttr = `#${hrefAttr.split('#')[1]}`;
|
60 |
+
}
|
61 |
+
|
62 |
+
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
|
63 |
+
}
|
64 |
+
|
65 |
+
return selector;
|
66 |
+
};
|
67 |
+
|
68 |
+
const getSelectorFromElement = element => {
|
69 |
+
const selector = getSelector(element);
|
70 |
+
|
71 |
+
if (selector) {
|
72 |
+
return document.querySelector(selector) ? selector : null;
|
73 |
+
}
|
74 |
+
|
75 |
+
return null;
|
76 |
+
};
|
77 |
+
|
78 |
+
const getElementFromSelector = element => {
|
79 |
+
const selector = getSelector(element);
|
80 |
+
return selector ? document.querySelector(selector) : null;
|
81 |
+
};
|
82 |
+
|
83 |
+
const getTransitionDurationFromElement = element => {
|
84 |
+
if (!element) {
|
85 |
+
return 0;
|
86 |
+
} // Get transition-duration of the element
|
87 |
+
|
88 |
+
|
89 |
+
let {
|
90 |
+
transitionDuration,
|
91 |
+
transitionDelay
|
92 |
+
} = window.getComputedStyle(element);
|
93 |
+
const floatTransitionDuration = Number.parseFloat(transitionDuration);
|
94 |
+
const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
|
95 |
+
|
96 |
+
if (!floatTransitionDuration && !floatTransitionDelay) {
|
97 |
+
return 0;
|
98 |
+
} // If multiple durations are defined, take the first
|
99 |
+
|
100 |
+
|
101 |
+
transitionDuration = transitionDuration.split(',')[0];
|
102 |
+
transitionDelay = transitionDelay.split(',')[0];
|
103 |
+
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
|
104 |
+
};
|
105 |
+
|
106 |
+
const triggerTransitionEnd = element => {
|
107 |
+
element.dispatchEvent(new Event(TRANSITION_END));
|
108 |
+
};
|
109 |
+
|
110 |
+
const isElement$1 = obj => {
|
111 |
+
if (!obj || typeof obj !== 'object') {
|
112 |
+
return false;
|
113 |
+
}
|
114 |
+
|
115 |
+
if (typeof obj.jquery !== 'undefined') {
|
116 |
+
obj = obj[0];
|
117 |
+
}
|
118 |
+
|
119 |
+
return typeof obj.nodeType !== 'undefined';
|
120 |
+
};
|
121 |
+
|
122 |
+
const getElement = obj => {
|
123 |
+
if (isElement$1(obj)) {
|
124 |
+
// it's a jQuery object or a node element
|
125 |
+
return obj.jquery ? obj[0] : obj;
|
126 |
+
}
|
127 |
+
|
128 |
+
if (typeof obj === 'string' && obj.length > 0) {
|
129 |
+
return document.querySelector(obj);
|
130 |
+
}
|
131 |
+
|
132 |
+
return null;
|
133 |
+
};
|
134 |
+
|
135 |
+
const typeCheckConfig = (componentName, config, configTypes) => {
|
136 |
+
Object.keys(configTypes).forEach(property => {
|
137 |
+
const expectedTypes = configTypes[property];
|
138 |
+
const value = config[property];
|
139 |
+
const valueType = value && isElement$1(value) ? 'element' : toType(value);
|
140 |
+
|
141 |
+
if (!new RegExp(expectedTypes).test(valueType)) {
|
142 |
+
throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
|
143 |
+
}
|
144 |
+
});
|
145 |
+
};
|
146 |
+
|
147 |
+
const isVisible = element => {
|
148 |
+
if (!isElement$1(element) || element.getClientRects().length === 0) {
|
149 |
+
return false;
|
150 |
+
}
|
151 |
+
|
152 |
+
return getComputedStyle(element).getPropertyValue('visibility') === 'visible';
|
153 |
+
};
|
154 |
+
|
155 |
+
const isDisabled = element => {
|
156 |
+
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
|
157 |
+
return true;
|
158 |
+
}
|
159 |
+
|
160 |
+
if (element.classList.contains('disabled')) {
|
161 |
+
return true;
|
162 |
+
}
|
163 |
+
|
164 |
+
if (typeof element.disabled !== 'undefined') {
|
165 |
+
return element.disabled;
|
166 |
+
}
|
167 |
+
|
168 |
+
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
|
169 |
+
};
|
170 |
+
|
171 |
+
const findShadowRoot = element => {
|
172 |
+
if (!document.documentElement.attachShadow) {
|
173 |
+
return null;
|
174 |
+
} // Can find the shadow root otherwise it'll return the document
|
175 |
+
|
176 |
+
|
177 |
+
if (typeof element.getRootNode === 'function') {
|
178 |
+
const root = element.getRootNode();
|
179 |
+
return root instanceof ShadowRoot ? root : null;
|
180 |
+
}
|
181 |
+
|
182 |
+
if (element instanceof ShadowRoot) {
|
183 |
+
return element;
|
184 |
+
} // when we don't find a shadow root
|
185 |
+
|
186 |
+
|
187 |
+
if (!element.parentNode) {
|
188 |
+
return null;
|
189 |
+
}
|
190 |
+
|
191 |
+
return findShadowRoot(element.parentNode);
|
192 |
+
};
|
193 |
+
|
194 |
+
const noop = () => {};
|
195 |
+
/**
|
196 |
+
* Trick to restart an element's animation
|
197 |
+
*
|
198 |
+
* @param {HTMLElement} element
|
199 |
+
* @return void
|
200 |
+
*
|
201 |
+
* @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
|
202 |
+
*/
|
203 |
+
|
204 |
+
|
205 |
+
const reflow = element => {
|
206 |
+
// eslint-disable-next-line no-unused-expressions
|
207 |
+
element.offsetHeight;
|
208 |
+
};
|
209 |
+
|
210 |
+
const getjQuery = () => {
|
211 |
+
const {
|
212 |
+
jQuery
|
213 |
+
} = window;
|
214 |
+
|
215 |
+
if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
|
216 |
+
return jQuery;
|
217 |
+
}
|
218 |
+
|
219 |
+
return null;
|
220 |
+
};
|
221 |
+
|
222 |
+
const DOMContentLoadedCallbacks = [];
|
223 |
+
|
224 |
+
const onDOMContentLoaded = callback => {
|
225 |
+
if (document.readyState === 'loading') {
|
226 |
+
// add listener on the first call when the document is in loading state
|
227 |
+
if (!DOMContentLoadedCallbacks.length) {
|
228 |
+
document.addEventListener('DOMContentLoaded', () => {
|
229 |
+
DOMContentLoadedCallbacks.forEach(callback => callback());
|
230 |
+
});
|
231 |
+
}
|
232 |
+
|
233 |
+
DOMContentLoadedCallbacks.push(callback);
|
234 |
+
} else {
|
235 |
+
callback();
|
236 |
+
}
|
237 |
+
};
|
238 |
+
|
239 |
+
const isRTL = () => document.documentElement.dir === 'rtl';
|
240 |
+
|
241 |
+
const defineJQueryPlugin = plugin => {
|
242 |
+
onDOMContentLoaded(() => {
|
243 |
+
const $ = getjQuery();
|
244 |
+
/* istanbul ignore if */
|
245 |
+
|
246 |
+
if ($) {
|
247 |
+
const name = plugin.NAME;
|
248 |
+
const JQUERY_NO_CONFLICT = $.fn[name];
|
249 |
+
$.fn[name] = plugin.jQueryInterface;
|
250 |
+
$.fn[name].Constructor = plugin;
|
251 |
+
|
252 |
+
$.fn[name].noConflict = () => {
|
253 |
+
$.fn[name] = JQUERY_NO_CONFLICT;
|
254 |
+
return plugin.jQueryInterface;
|
255 |
+
};
|
256 |
+
}
|
257 |
+
});
|
258 |
+
};
|
259 |
+
|
260 |
+
const execute = callback => {
|
261 |
+
if (typeof callback === 'function') {
|
262 |
+
callback();
|
263 |
+
}
|
264 |
+
};
|
265 |
+
|
266 |
+
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
|
267 |
+
if (!waitForTransition) {
|
268 |
+
execute(callback);
|
269 |
+
return;
|
270 |
+
}
|
271 |
+
|
272 |
+
const durationPadding = 5;
|
273 |
+
const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
|
274 |
+
let called = false;
|
275 |
+
|
276 |
+
const handler = ({
|
277 |
+
target
|
278 |
+
}) => {
|
279 |
+
if (target !== transitionElement) {
|
280 |
+
return;
|
281 |
+
}
|
282 |
+
|
283 |
+
called = true;
|
284 |
+
transitionElement.removeEventListener(TRANSITION_END, handler);
|
285 |
+
execute(callback);
|
286 |
+
};
|
287 |
+
|
288 |
+
transitionElement.addEventListener(TRANSITION_END, handler);
|
289 |
+
setTimeout(() => {
|
290 |
+
if (!called) {
|
291 |
+
triggerTransitionEnd(transitionElement);
|
292 |
+
}
|
293 |
+
}, emulatedDuration);
|
294 |
+
};
|
295 |
+
/**
|
296 |
+
* Return the previous/next element of a list.
|
297 |
+
*
|
298 |
+
* @param {array} list The list of elements
|
299 |
+
* @param activeElement The active element
|
300 |
+
* @param shouldGetNext Choose to get next or previous element
|
301 |
+
* @param isCycleAllowed
|
302 |
+
* @return {Element|elem} The proper element
|
303 |
+
*/
|
304 |
+
|
305 |
+
|
306 |
+
const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
|
307 |
+
let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed
|
308 |
+
|
309 |
+
if (index === -1) {
|
310 |
+
return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];
|
311 |
+
}
|
312 |
+
|
313 |
+
const listLength = list.length;
|
314 |
+
index += shouldGetNext ? 1 : -1;
|
315 |
+
|
316 |
+
if (isCycleAllowed) {
|
317 |
+
index = (index + listLength) % listLength;
|
318 |
+
}
|
319 |
+
|
320 |
+
return list[Math.max(0, Math.min(index, listLength - 1))];
|
321 |
+
};
|
322 |
+
|
323 |
+
/**
|
324 |
+
* --------------------------------------------------------------------------
|
325 |
+
* Bootstrap (v5.1.3): dom/event-handler.js
|
326 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
327 |
+
* --------------------------------------------------------------------------
|
328 |
+
*/
|
329 |
+
/**
|
330 |
+
* ------------------------------------------------------------------------
|
331 |
+
* Constants
|
332 |
+
* ------------------------------------------------------------------------
|
333 |
+
*/
|
334 |
+
|
335 |
+
const namespaceRegex = /[^.]*(?=\..*)\.|.*/;
|
336 |
+
const stripNameRegex = /\..*/;
|
337 |
+
const stripUidRegex = /::\d+$/;
|
338 |
+
const eventRegistry = {}; // Events storage
|
339 |
+
|
340 |
+
let uidEvent = 1;
|
341 |
+
const customEvents = {
|
342 |
+
mouseenter: 'mouseover',
|
343 |
+
mouseleave: 'mouseout'
|
344 |
+
};
|
345 |
+
const customEventsRegex = /^(mouseenter|mouseleave)/i;
|
346 |
+
const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);
|
347 |
+
/**
|
348 |
+
* ------------------------------------------------------------------------
|
349 |
+
* Private methods
|
350 |
+
* ------------------------------------------------------------------------
|
351 |
+
*/
|
352 |
+
|
353 |
+
function getUidEvent(element, uid) {
|
354 |
+
return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
|
355 |
+
}
|
356 |
+
|
357 |
+
function getEvent(element) {
|
358 |
+
const uid = getUidEvent(element);
|
359 |
+
element.uidEvent = uid;
|
360 |
+
eventRegistry[uid] = eventRegistry[uid] || {};
|
361 |
+
return eventRegistry[uid];
|
362 |
+
}
|
363 |
+
|
364 |
+
function bootstrapHandler(element, fn) {
|
365 |
+
return function handler(event) {
|
366 |
+
event.delegateTarget = element;
|
367 |
+
|
368 |
+
if (handler.oneOff) {
|
369 |
+
EventHandler.off(element, event.type, fn);
|
370 |
+
}
|
371 |
+
|
372 |
+
return fn.apply(element, [event]);
|
373 |
+
};
|
374 |
+
}
|
375 |
+
|
376 |
+
function bootstrapDelegationHandler(element, selector, fn) {
|
377 |
+
return function handler(event) {
|
378 |
+
const domElements = element.querySelectorAll(selector);
|
379 |
+
|
380 |
+
for (let {
|
381 |
+
target
|
382 |
+
} = event; target && target !== this; target = target.parentNode) {
|
383 |
+
for (let i = domElements.length; i--;) {
|
384 |
+
if (domElements[i] === target) {
|
385 |
+
event.delegateTarget = target;
|
386 |
+
|
387 |
+
if (handler.oneOff) {
|
388 |
+
EventHandler.off(element, event.type, selector, fn);
|
389 |
+
}
|
390 |
+
|
391 |
+
return fn.apply(target, [event]);
|
392 |
+
}
|
393 |
+
}
|
394 |
+
} // To please ESLint
|
395 |
+
|
396 |
+
|
397 |
+
return null;
|
398 |
+
};
|
399 |
+
}
|
400 |
+
|
401 |
+
function findHandler(events, handler, delegationSelector = null) {
|
402 |
+
const uidEventList = Object.keys(events);
|
403 |
+
|
404 |
+
for (let i = 0, len = uidEventList.length; i < len; i++) {
|
405 |
+
const event = events[uidEventList[i]];
|
406 |
+
|
407 |
+
if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {
|
408 |
+
return event;
|
409 |
+
}
|
410 |
+
}
|
411 |
+
|
412 |
+
return null;
|
413 |
+
}
|
414 |
+
|
415 |
+
function normalizeParams(originalTypeEvent, handler, delegationFn) {
|
416 |
+
const delegation = typeof handler === 'string';
|
417 |
+
const originalHandler = delegation ? delegationFn : handler;
|
418 |
+
let typeEvent = getTypeEvent(originalTypeEvent);
|
419 |
+
const isNative = nativeEvents.has(typeEvent);
|
420 |
+
|
421 |
+
if (!isNative) {
|
422 |
+
typeEvent = originalTypeEvent;
|
423 |
+
}
|
424 |
+
|
425 |
+
return [delegation, originalHandler, typeEvent];
|
426 |
+
}
|
427 |
+
|
428 |
+
function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {
|
429 |
+
if (typeof originalTypeEvent !== 'string' || !element) {
|
430 |
+
return;
|
431 |
+
}
|
432 |
+
|
433 |
+
if (!handler) {
|
434 |
+
handler = delegationFn;
|
435 |
+
delegationFn = null;
|
436 |
+
} // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
|
437 |
+
// this prevents the handler from being dispatched the same way as mouseover or mouseout does
|
438 |
+
|
439 |
+
|
440 |
+
if (customEventsRegex.test(originalTypeEvent)) {
|
441 |
+
const wrapFn = fn => {
|
442 |
+
return function (event) {
|
443 |
+
if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {
|
444 |
+
return fn.call(this, event);
|
445 |
+
}
|
446 |
+
};
|
447 |
+
};
|
448 |
+
|
449 |
+
if (delegationFn) {
|
450 |
+
delegationFn = wrapFn(delegationFn);
|
451 |
+
} else {
|
452 |
+
handler = wrapFn(handler);
|
453 |
+
}
|
454 |
+
}
|
455 |
+
|
456 |
+
const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);
|
457 |
+
const events = getEvent(element);
|
458 |
+
const handlers = events[typeEvent] || (events[typeEvent] = {});
|
459 |
+
const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);
|
460 |
+
|
461 |
+
if (previousFn) {
|
462 |
+
previousFn.oneOff = previousFn.oneOff && oneOff;
|
463 |
+
return;
|
464 |
+
}
|
465 |
+
|
466 |
+
const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));
|
467 |
+
const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);
|
468 |
+
fn.delegationSelector = delegation ? handler : null;
|
469 |
+
fn.originalHandler = originalHandler;
|
470 |
+
fn.oneOff = oneOff;
|
471 |
+
fn.uidEvent = uid;
|
472 |
+
handlers[uid] = fn;
|
473 |
+
element.addEventListener(typeEvent, fn, delegation);
|
474 |
+
}
|
475 |
+
|
476 |
+
function removeHandler(element, events, typeEvent, handler, delegationSelector) {
|
477 |
+
const fn = findHandler(events[typeEvent], handler, delegationSelector);
|
478 |
+
|
479 |
+
if (!fn) {
|
480 |
+
return;
|
481 |
+
}
|
482 |
+
|
483 |
+
element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
|
484 |
+
delete events[typeEvent][fn.uidEvent];
|
485 |
+
}
|
486 |
+
|
487 |
+
function removeNamespacedHandlers(element, events, typeEvent, namespace) {
|
488 |
+
const storeElementEvent = events[typeEvent] || {};
|
489 |
+
Object.keys(storeElementEvent).forEach(handlerKey => {
|
490 |
+
if (handlerKey.includes(namespace)) {
|
491 |
+
const event = storeElementEvent[handlerKey];
|
492 |
+
removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
|
493 |
+
}
|
494 |
+
});
|
495 |
+
}
|
496 |
+
|
497 |
+
function getTypeEvent(event) {
|
498 |
+
// allow to get the native events from namespaced events ('click.bs.button' --> 'click')
|
499 |
+
event = event.replace(stripNameRegex, '');
|
500 |
+
return customEvents[event] || event;
|
501 |
+
}
|
502 |
+
|
503 |
+
const EventHandler = {
|
504 |
+
on(element, event, handler, delegationFn) {
|
505 |
+
addHandler(element, event, handler, delegationFn, false);
|
506 |
+
},
|
507 |
+
|
508 |
+
one(element, event, handler, delegationFn) {
|
509 |
+
addHandler(element, event, handler, delegationFn, true);
|
510 |
+
},
|
511 |
+
|
512 |
+
off(element, originalTypeEvent, handler, delegationFn) {
|
513 |
+
if (typeof originalTypeEvent !== 'string' || !element) {
|
514 |
+
return;
|
515 |
+
}
|
516 |
+
|
517 |
+
const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);
|
518 |
+
const inNamespace = typeEvent !== originalTypeEvent;
|
519 |
+
const events = getEvent(element);
|
520 |
+
const isNamespace = originalTypeEvent.startsWith('.');
|
521 |
+
|
522 |
+
if (typeof originalHandler !== 'undefined') {
|
523 |
+
// Simplest case: handler is passed, remove that listener ONLY.
|
524 |
+
if (!events || !events[typeEvent]) {
|
525 |
+
return;
|
526 |
+
}
|
527 |
+
|
528 |
+
removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);
|
529 |
+
return;
|
530 |
+
}
|
531 |
+
|
532 |
+
if (isNamespace) {
|
533 |
+
Object.keys(events).forEach(elementEvent => {
|
534 |
+
removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
|
535 |
+
});
|
536 |
+
}
|
537 |
+
|
538 |
+
const storeElementEvent = events[typeEvent] || {};
|
539 |
+
Object.keys(storeElementEvent).forEach(keyHandlers => {
|
540 |
+
const handlerKey = keyHandlers.replace(stripUidRegex, '');
|
541 |
+
|
542 |
+
if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
|
543 |
+
const event = storeElementEvent[keyHandlers];
|
544 |
+
removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
|
545 |
+
}
|
546 |
+
});
|
547 |
+
},
|
548 |
+
|
549 |
+
trigger(element, event, args) {
|
550 |
+
if (typeof event !== 'string' || !element) {
|
551 |
+
return null;
|
552 |
+
}
|
553 |
+
|
554 |
+
const $ = getjQuery();
|
555 |
+
const typeEvent = getTypeEvent(event);
|
556 |
+
const inNamespace = event !== typeEvent;
|
557 |
+
const isNative = nativeEvents.has(typeEvent);
|
558 |
+
let jQueryEvent;
|
559 |
+
let bubbles = true;
|
560 |
+
let nativeDispatch = true;
|
561 |
+
let defaultPrevented = false;
|
562 |
+
let evt = null;
|
563 |
+
|
564 |
+
if (inNamespace && $) {
|
565 |
+
jQueryEvent = $.Event(event, args);
|
566 |
+
$(element).trigger(jQueryEvent);
|
567 |
+
bubbles = !jQueryEvent.isPropagationStopped();
|
568 |
+
nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
|
569 |
+
defaultPrevented = jQueryEvent.isDefaultPrevented();
|
570 |
+
}
|
571 |
+
|
572 |
+
if (isNative) {
|
573 |
+
evt = document.createEvent('HTMLEvents');
|
574 |
+
evt.initEvent(typeEvent, bubbles, true);
|
575 |
+
} else {
|
576 |
+
evt = new CustomEvent(event, {
|
577 |
+
bubbles,
|
578 |
+
cancelable: true
|
579 |
+
});
|
580 |
+
} // merge custom information in our event
|
581 |
+
|
582 |
+
|
583 |
+
if (typeof args !== 'undefined') {
|
584 |
+
Object.keys(args).forEach(key => {
|
585 |
+
Object.defineProperty(evt, key, {
|
586 |
+
get() {
|
587 |
+
return args[key];
|
588 |
+
}
|
589 |
+
|
590 |
+
});
|
591 |
+
});
|
592 |
+
}
|
593 |
+
|
594 |
+
if (defaultPrevented) {
|
595 |
+
evt.preventDefault();
|
596 |
+
}
|
597 |
+
|
598 |
+
if (nativeDispatch) {
|
599 |
+
element.dispatchEvent(evt);
|
600 |
+
}
|
601 |
+
|
602 |
+
if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {
|
603 |
+
jQueryEvent.preventDefault();
|
604 |
+
}
|
605 |
+
|
606 |
+
return evt;
|
607 |
+
}
|
608 |
+
|
609 |
+
};
|
610 |
+
|
611 |
+
/**
|
612 |
+
* --------------------------------------------------------------------------
|
613 |
+
* Bootstrap (v5.1.3): dom/data.js
|
614 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
615 |
+
* --------------------------------------------------------------------------
|
616 |
+
*/
|
617 |
+
|
618 |
+
/**
|
619 |
+
* ------------------------------------------------------------------------
|
620 |
+
* Constants
|
621 |
+
* ------------------------------------------------------------------------
|
622 |
+
*/
|
623 |
+
const elementMap = new Map();
|
624 |
+
const Data = {
|
625 |
+
set(element, key, instance) {
|
626 |
+
if (!elementMap.has(element)) {
|
627 |
+
elementMap.set(element, new Map());
|
628 |
+
}
|
629 |
+
|
630 |
+
const instanceMap = elementMap.get(element); // make it clear we only want one instance per element
|
631 |
+
// can be removed later when multiple key/instances are fine to be used
|
632 |
+
|
633 |
+
if (!instanceMap.has(key) && instanceMap.size !== 0) {
|
634 |
+
// eslint-disable-next-line no-console
|
635 |
+
console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
|
636 |
+
return;
|
637 |
+
}
|
638 |
+
|
639 |
+
instanceMap.set(key, instance);
|
640 |
+
},
|
641 |
+
|
642 |
+
get(element, key) {
|
643 |
+
if (elementMap.has(element)) {
|
644 |
+
return elementMap.get(element).get(key) || null;
|
645 |
+
}
|
646 |
+
|
647 |
+
return null;
|
648 |
+
},
|
649 |
+
|
650 |
+
remove(element, key) {
|
651 |
+
if (!elementMap.has(element)) {
|
652 |
+
return;
|
653 |
+
}
|
654 |
+
|
655 |
+
const instanceMap = elementMap.get(element);
|
656 |
+
instanceMap.delete(key); // free up element references if there are no instances left for an element
|
657 |
+
|
658 |
+
if (instanceMap.size === 0) {
|
659 |
+
elementMap.delete(element);
|
660 |
+
}
|
661 |
+
}
|
662 |
+
|
663 |
+
};
|
664 |
+
|
665 |
+
/**
|
666 |
+
* --------------------------------------------------------------------------
|
667 |
+
* Bootstrap (v5.1.3): base-component.js
|
668 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
669 |
+
* --------------------------------------------------------------------------
|
670 |
+
*/
|
671 |
+
/**
|
672 |
+
* ------------------------------------------------------------------------
|
673 |
+
* Constants
|
674 |
+
* ------------------------------------------------------------------------
|
675 |
+
*/
|
676 |
+
|
677 |
+
const VERSION = '5.1.3';
|
678 |
+
|
679 |
+
class BaseComponent {
|
680 |
+
constructor(element) {
|
681 |
+
element = getElement(element);
|
682 |
+
|
683 |
+
if (!element) {
|
684 |
+
return;
|
685 |
+
}
|
686 |
+
|
687 |
+
this._element = element;
|
688 |
+
Data.set(this._element, this.constructor.DATA_KEY, this);
|
689 |
+
}
|
690 |
+
|
691 |
+
dispose() {
|
692 |
+
Data.remove(this._element, this.constructor.DATA_KEY);
|
693 |
+
EventHandler.off(this._element, this.constructor.EVENT_KEY);
|
694 |
+
Object.getOwnPropertyNames(this).forEach(propertyName => {
|
695 |
+
this[propertyName] = null;
|
696 |
+
});
|
697 |
+
}
|
698 |
+
|
699 |
+
_queueCallback(callback, element, isAnimated = true) {
|
700 |
+
executeAfterTransition(callback, element, isAnimated);
|
701 |
+
}
|
702 |
+
/** Static */
|
703 |
+
|
704 |
+
|
705 |
+
static getInstance(element) {
|
706 |
+
return Data.get(getElement(element), this.DATA_KEY);
|
707 |
+
}
|
708 |
+
|
709 |
+
static getOrCreateInstance(element, config = {}) {
|
710 |
+
return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);
|
711 |
+
}
|
712 |
+
|
713 |
+
static get VERSION() {
|
714 |
+
return VERSION;
|
715 |
+
}
|
716 |
+
|
717 |
+
static get NAME() {
|
718 |
+
throw new Error('You have to implement the static method "NAME", for each component!');
|
719 |
+
}
|
720 |
+
|
721 |
+
static get DATA_KEY() {
|
722 |
+
return `bs.${this.NAME}`;
|
723 |
+
}
|
724 |
+
|
725 |
+
static get EVENT_KEY() {
|
726 |
+
return `.${this.DATA_KEY}`;
|
727 |
+
}
|
728 |
+
|
729 |
+
}
|
730 |
+
|
731 |
+
/**
|
732 |
+
* --------------------------------------------------------------------------
|
733 |
+
* Bootstrap (v5.1.3): util/component-functions.js
|
734 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
735 |
+
* --------------------------------------------------------------------------
|
736 |
+
*/
|
737 |
+
|
738 |
+
const enableDismissTrigger = (component, method = 'hide') => {
|
739 |
+
const clickEvent = `click.dismiss${component.EVENT_KEY}`;
|
740 |
+
const name = component.NAME;
|
741 |
+
EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
|
742 |
+
if (['A', 'AREA'].includes(this.tagName)) {
|
743 |
+
event.preventDefault();
|
744 |
+
}
|
745 |
+
|
746 |
+
if (isDisabled(this)) {
|
747 |
+
return;
|
748 |
+
}
|
749 |
+
|
750 |
+
const target = getElementFromSelector(this) || this.closest(`.${name}`);
|
751 |
+
const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
|
752 |
+
|
753 |
+
instance[method]();
|
754 |
+
});
|
755 |
+
};
|
756 |
+
|
757 |
+
/**
|
758 |
+
* --------------------------------------------------------------------------
|
759 |
+
* Bootstrap (v5.1.3): alert.js
|
760 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
761 |
+
* --------------------------------------------------------------------------
|
762 |
+
*/
|
763 |
+
/**
|
764 |
+
* ------------------------------------------------------------------------
|
765 |
+
* Constants
|
766 |
+
* ------------------------------------------------------------------------
|
767 |
+
*/
|
768 |
+
|
769 |
+
const NAME$d = 'alert';
|
770 |
+
const DATA_KEY$c = 'bs.alert';
|
771 |
+
const EVENT_KEY$c = `.${DATA_KEY$c}`;
|
772 |
+
const EVENT_CLOSE = `close${EVENT_KEY$c}`;
|
773 |
+
const EVENT_CLOSED = `closed${EVENT_KEY$c}`;
|
774 |
+
const CLASS_NAME_FADE$5 = 'fade';
|
775 |
+
const CLASS_NAME_SHOW$8 = 'show';
|
776 |
+
/**
|
777 |
+
* ------------------------------------------------------------------------
|
778 |
+
* Class Definition
|
779 |
+
* ------------------------------------------------------------------------
|
780 |
+
*/
|
781 |
+
|
782 |
+
class Alert extends BaseComponent {
|
783 |
+
// Getters
|
784 |
+
static get NAME() {
|
785 |
+
return NAME$d;
|
786 |
+
} // Public
|
787 |
+
|
788 |
+
|
789 |
+
close() {
|
790 |
+
const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
|
791 |
+
|
792 |
+
if (closeEvent.defaultPrevented) {
|
793 |
+
return;
|
794 |
+
}
|
795 |
+
|
796 |
+
this._element.classList.remove(CLASS_NAME_SHOW$8);
|
797 |
+
|
798 |
+
const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);
|
799 |
+
|
800 |
+
this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
|
801 |
+
} // Private
|
802 |
+
|
803 |
+
|
804 |
+
_destroyElement() {
|
805 |
+
this._element.remove();
|
806 |
+
|
807 |
+
EventHandler.trigger(this._element, EVENT_CLOSED);
|
808 |
+
this.dispose();
|
809 |
+
} // Static
|
810 |
+
|
811 |
+
|
812 |
+
static jQueryInterface(config) {
|
813 |
+
return this.each(function () {
|
814 |
+
const data = Alert.getOrCreateInstance(this);
|
815 |
+
|
816 |
+
if (typeof config !== 'string') {
|
817 |
+
return;
|
818 |
+
}
|
819 |
+
|
820 |
+
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
821 |
+
throw new TypeError(`No method named "${config}"`);
|
822 |
+
}
|
823 |
+
|
824 |
+
data[config](this);
|
825 |
+
});
|
826 |
+
}
|
827 |
+
|
828 |
+
}
|
829 |
+
/**
|
830 |
+
* ------------------------------------------------------------------------
|
831 |
+
* Data Api implementation
|
832 |
+
* ------------------------------------------------------------------------
|
833 |
+
*/
|
834 |
+
|
835 |
+
|
836 |
+
enableDismissTrigger(Alert, 'close');
|
837 |
+
/**
|
838 |
+
* ------------------------------------------------------------------------
|
839 |
+
* jQuery
|
840 |
+
* ------------------------------------------------------------------------
|
841 |
+
* add .Alert to jQuery only if jQuery is present
|
842 |
+
*/
|
843 |
+
|
844 |
+
defineJQueryPlugin(Alert);
|
845 |
+
|
846 |
+
/**
|
847 |
+
* --------------------------------------------------------------------------
|
848 |
+
* Bootstrap (v5.1.3): button.js
|
849 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
850 |
+
* --------------------------------------------------------------------------
|
851 |
+
*/
|
852 |
+
/**
|
853 |
+
* ------------------------------------------------------------------------
|
854 |
+
* Constants
|
855 |
+
* ------------------------------------------------------------------------
|
856 |
+
*/
|
857 |
+
|
858 |
+
const NAME$c = 'button';
|
859 |
+
const DATA_KEY$b = 'bs.button';
|
860 |
+
const EVENT_KEY$b = `.${DATA_KEY$b}`;
|
861 |
+
const DATA_API_KEY$7 = '.data-api';
|
862 |
+
const CLASS_NAME_ACTIVE$3 = 'active';
|
863 |
+
const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]';
|
864 |
+
const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$b}${DATA_API_KEY$7}`;
|
865 |
+
/**
|
866 |
+
* ------------------------------------------------------------------------
|
867 |
+
* Class Definition
|
868 |
+
* ------------------------------------------------------------------------
|
869 |
+
*/
|
870 |
+
|
871 |
+
class Button extends BaseComponent {
|
872 |
+
// Getters
|
873 |
+
static get NAME() {
|
874 |
+
return NAME$c;
|
875 |
+
} // Public
|
876 |
+
|
877 |
+
|
878 |
+
toggle() {
|
879 |
+
// Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
|
880 |
+
this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
|
881 |
+
} // Static
|
882 |
+
|
883 |
+
|
884 |
+
static jQueryInterface(config) {
|
885 |
+
return this.each(function () {
|
886 |
+
const data = Button.getOrCreateInstance(this);
|
887 |
+
|
888 |
+
if (config === 'toggle') {
|
889 |
+
data[config]();
|
890 |
+
}
|
891 |
+
});
|
892 |
+
}
|
893 |
+
|
894 |
+
}
|
895 |
+
/**
|
896 |
+
* ------------------------------------------------------------------------
|
897 |
+
* Data Api implementation
|
898 |
+
* ------------------------------------------------------------------------
|
899 |
+
*/
|
900 |
+
|
901 |
+
|
902 |
+
EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {
|
903 |
+
event.preventDefault();
|
904 |
+
const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);
|
905 |
+
const data = Button.getOrCreateInstance(button);
|
906 |
+
data.toggle();
|
907 |
+
});
|
908 |
+
/**
|
909 |
+
* ------------------------------------------------------------------------
|
910 |
+
* jQuery
|
911 |
+
* ------------------------------------------------------------------------
|
912 |
+
* add .Button to jQuery only if jQuery is present
|
913 |
+
*/
|
914 |
+
|
915 |
+
defineJQueryPlugin(Button);
|
916 |
+
|
917 |
+
/**
|
918 |
+
* --------------------------------------------------------------------------
|
919 |
+
* Bootstrap (v5.1.3): dom/manipulator.js
|
920 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
921 |
+
* --------------------------------------------------------------------------
|
922 |
+
*/
|
923 |
+
function normalizeData(val) {
|
924 |
+
if (val === 'true') {
|
925 |
+
return true;
|
926 |
+
}
|
927 |
+
|
928 |
+
if (val === 'false') {
|
929 |
+
return false;
|
930 |
+
}
|
931 |
+
|
932 |
+
if (val === Number(val).toString()) {
|
933 |
+
return Number(val);
|
934 |
+
}
|
935 |
+
|
936 |
+
if (val === '' || val === 'null') {
|
937 |
+
return null;
|
938 |
+
}
|
939 |
+
|
940 |
+
return val;
|
941 |
+
}
|
942 |
+
|
943 |
+
function normalizeDataKey(key) {
|
944 |
+
return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);
|
945 |
+
}
|
946 |
+
|
947 |
+
const Manipulator = {
|
948 |
+
setDataAttribute(element, key, value) {
|
949 |
+
element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
|
950 |
+
},
|
951 |
+
|
952 |
+
removeDataAttribute(element, key) {
|
953 |
+
element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
|
954 |
+
},
|
955 |
+
|
956 |
+
getDataAttributes(element) {
|
957 |
+
if (!element) {
|
958 |
+
return {};
|
959 |
+
}
|
960 |
+
|
961 |
+
const attributes = {};
|
962 |
+
Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {
|
963 |
+
let pureKey = key.replace(/^bs/, '');
|
964 |
+
pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
|
965 |
+
attributes[pureKey] = normalizeData(element.dataset[key]);
|
966 |
+
});
|
967 |
+
return attributes;
|
968 |
+
},
|
969 |
+
|
970 |
+
getDataAttribute(element, key) {
|
971 |
+
return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
|
972 |
+
},
|
973 |
+
|
974 |
+
offset(element) {
|
975 |
+
const rect = element.getBoundingClientRect();
|
976 |
+
return {
|
977 |
+
top: rect.top + window.pageYOffset,
|
978 |
+
left: rect.left + window.pageXOffset
|
979 |
+
};
|
980 |
+
},
|
981 |
+
|
982 |
+
position(element) {
|
983 |
+
return {
|
984 |
+
top: element.offsetTop,
|
985 |
+
left: element.offsetLeft
|
986 |
+
};
|
987 |
+
}
|
988 |
+
|
989 |
+
};
|
990 |
+
|
991 |
+
/**
|
992 |
+
* --------------------------------------------------------------------------
|
993 |
+
* Bootstrap (v5.1.3): dom/selector-engine.js
|
994 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
995 |
+
* --------------------------------------------------------------------------
|
996 |
+
*/
|
997 |
+
const NODE_TEXT = 3;
|
998 |
+
const SelectorEngine = {
|
999 |
+
find(selector, element = document.documentElement) {
|
1000 |
+
return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
|
1001 |
+
},
|
1002 |
+
|
1003 |
+
findOne(selector, element = document.documentElement) {
|
1004 |
+
return Element.prototype.querySelector.call(element, selector);
|
1005 |
+
},
|
1006 |
+
|
1007 |
+
children(element, selector) {
|
1008 |
+
return [].concat(...element.children).filter(child => child.matches(selector));
|
1009 |
+
},
|
1010 |
+
|
1011 |
+
parents(element, selector) {
|
1012 |
+
const parents = [];
|
1013 |
+
let ancestor = element.parentNode;
|
1014 |
+
|
1015 |
+
while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
|
1016 |
+
if (ancestor.matches(selector)) {
|
1017 |
+
parents.push(ancestor);
|
1018 |
+
}
|
1019 |
+
|
1020 |
+
ancestor = ancestor.parentNode;
|
1021 |
+
}
|
1022 |
+
|
1023 |
+
return parents;
|
1024 |
+
},
|
1025 |
+
|
1026 |
+
prev(element, selector) {
|
1027 |
+
let previous = element.previousElementSibling;
|
1028 |
+
|
1029 |
+
while (previous) {
|
1030 |
+
if (previous.matches(selector)) {
|
1031 |
+
return [previous];
|
1032 |
+
}
|
1033 |
+
|
1034 |
+
previous = previous.previousElementSibling;
|
1035 |
+
}
|
1036 |
+
|
1037 |
+
return [];
|
1038 |
+
},
|
1039 |
+
|
1040 |
+
next(element, selector) {
|
1041 |
+
let next = element.nextElementSibling;
|
1042 |
+
|
1043 |
+
while (next) {
|
1044 |
+
if (next.matches(selector)) {
|
1045 |
+
return [next];
|
1046 |
+
}
|
1047 |
+
|
1048 |
+
next = next.nextElementSibling;
|
1049 |
+
}
|
1050 |
+
|
1051 |
+
return [];
|
1052 |
+
},
|
1053 |
+
|
1054 |
+
focusableChildren(element) {
|
1055 |
+
const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(', ');
|
1056 |
+
return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
|
1057 |
+
}
|
1058 |
+
|
1059 |
+
};
|
1060 |
+
|
1061 |
+
/**
|
1062 |
+
* --------------------------------------------------------------------------
|
1063 |
+
* Bootstrap (v5.1.3): carousel.js
|
1064 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
1065 |
+
* --------------------------------------------------------------------------
|
1066 |
+
*/
|
1067 |
+
/**
|
1068 |
+
* ------------------------------------------------------------------------
|
1069 |
+
* Constants
|
1070 |
+
* ------------------------------------------------------------------------
|
1071 |
+
*/
|
1072 |
+
|
1073 |
+
const NAME$b = 'carousel';
|
1074 |
+
const DATA_KEY$a = 'bs.carousel';
|
1075 |
+
const EVENT_KEY$a = `.${DATA_KEY$a}`;
|
1076 |
+
const DATA_API_KEY$6 = '.data-api';
|
1077 |
+
const ARROW_LEFT_KEY = 'ArrowLeft';
|
1078 |
+
const ARROW_RIGHT_KEY = 'ArrowRight';
|
1079 |
+
const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
|
1080 |
+
|
1081 |
+
const SWIPE_THRESHOLD = 40;
|
1082 |
+
const Default$a = {
|
1083 |
+
interval: 5000,
|
1084 |
+
keyboard: true,
|
1085 |
+
slide: false,
|
1086 |
+
pause: 'hover',
|
1087 |
+
wrap: true,
|
1088 |
+
touch: true
|
1089 |
+
};
|
1090 |
+
const DefaultType$a = {
|
1091 |
+
interval: '(number|boolean)',
|
1092 |
+
keyboard: 'boolean',
|
1093 |
+
slide: '(boolean|string)',
|
1094 |
+
pause: '(string|boolean)',
|
1095 |
+
wrap: 'boolean',
|
1096 |
+
touch: 'boolean'
|
1097 |
+
};
|
1098 |
+
const ORDER_NEXT = 'next';
|
1099 |
+
const ORDER_PREV = 'prev';
|
1100 |
+
const DIRECTION_LEFT = 'left';
|
1101 |
+
const DIRECTION_RIGHT = 'right';
|
1102 |
+
const KEY_TO_DIRECTION = {
|
1103 |
+
[ARROW_LEFT_KEY]: DIRECTION_RIGHT,
|
1104 |
+
[ARROW_RIGHT_KEY]: DIRECTION_LEFT
|
1105 |
+
};
|
1106 |
+
const EVENT_SLIDE = `slide${EVENT_KEY$a}`;
|
1107 |
+
const EVENT_SLID = `slid${EVENT_KEY$a}`;
|
1108 |
+
const EVENT_KEYDOWN = `keydown${EVENT_KEY$a}`;
|
1109 |
+
const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$a}`;
|
1110 |
+
const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$a}`;
|
1111 |
+
const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$a}`;
|
1112 |
+
const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$a}`;
|
1113 |
+
const EVENT_TOUCHEND = `touchend${EVENT_KEY$a}`;
|
1114 |
+
const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$a}`;
|
1115 |
+
const EVENT_POINTERUP = `pointerup${EVENT_KEY$a}`;
|
1116 |
+
const EVENT_DRAG_START = `dragstart${EVENT_KEY$a}`;
|
1117 |
+
const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$a}${DATA_API_KEY$6}`;
|
1118 |
+
const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;
|
1119 |
+
const CLASS_NAME_CAROUSEL = 'carousel';
|
1120 |
+
const CLASS_NAME_ACTIVE$2 = 'active';
|
1121 |
+
const CLASS_NAME_SLIDE = 'slide';
|
1122 |
+
const CLASS_NAME_END = 'carousel-item-end';
|
1123 |
+
const CLASS_NAME_START = 'carousel-item-start';
|
1124 |
+
const CLASS_NAME_NEXT = 'carousel-item-next';
|
1125 |
+
const CLASS_NAME_PREV = 'carousel-item-prev';
|
1126 |
+
const CLASS_NAME_POINTER_EVENT = 'pointer-event';
|
1127 |
+
const SELECTOR_ACTIVE$1 = '.active';
|
1128 |
+
const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';
|
1129 |
+
const SELECTOR_ITEM = '.carousel-item';
|
1130 |
+
const SELECTOR_ITEM_IMG = '.carousel-item img';
|
1131 |
+
const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';
|
1132 |
+
const SELECTOR_INDICATORS = '.carousel-indicators';
|
1133 |
+
const SELECTOR_INDICATOR = '[data-bs-target]';
|
1134 |
+
const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';
|
1135 |
+
const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]';
|
1136 |
+
const POINTER_TYPE_TOUCH = 'touch';
|
1137 |
+
const POINTER_TYPE_PEN = 'pen';
|
1138 |
+
/**
|
1139 |
+
* ------------------------------------------------------------------------
|
1140 |
+
* Class Definition
|
1141 |
+
* ------------------------------------------------------------------------
|
1142 |
+
*/
|
1143 |
+
|
1144 |
+
class Carousel extends BaseComponent {
|
1145 |
+
constructor(element, config) {
|
1146 |
+
super(element);
|
1147 |
+
this._items = null;
|
1148 |
+
this._interval = null;
|
1149 |
+
this._activeElement = null;
|
1150 |
+
this._isPaused = false;
|
1151 |
+
this._isSliding = false;
|
1152 |
+
this.touchTimeout = null;
|
1153 |
+
this.touchStartX = 0;
|
1154 |
+
this.touchDeltaX = 0;
|
1155 |
+
this._config = this._getConfig(config);
|
1156 |
+
this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);
|
1157 |
+
this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
|
1158 |
+
this._pointerEvent = Boolean(window.PointerEvent);
|
1159 |
+
|
1160 |
+
this._addEventListeners();
|
1161 |
+
} // Getters
|
1162 |
+
|
1163 |
+
|
1164 |
+
static get Default() {
|
1165 |
+
return Default$a;
|
1166 |
+
}
|
1167 |
+
|
1168 |
+
static get NAME() {
|
1169 |
+
return NAME$b;
|
1170 |
+
} // Public
|
1171 |
+
|
1172 |
+
|
1173 |
+
next() {
|
1174 |
+
this._slide(ORDER_NEXT);
|
1175 |
+
}
|
1176 |
+
|
1177 |
+
nextWhenVisible() {
|
1178 |
+
// Don't call next when the page isn't visible
|
1179 |
+
// or the carousel or its parent isn't visible
|
1180 |
+
if (!document.hidden && isVisible(this._element)) {
|
1181 |
+
this.next();
|
1182 |
+
}
|
1183 |
+
}
|
1184 |
+
|
1185 |
+
prev() {
|
1186 |
+
this._slide(ORDER_PREV);
|
1187 |
+
}
|
1188 |
+
|
1189 |
+
pause(event) {
|
1190 |
+
if (!event) {
|
1191 |
+
this._isPaused = true;
|
1192 |
+
}
|
1193 |
+
|
1194 |
+
if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {
|
1195 |
+
triggerTransitionEnd(this._element);
|
1196 |
+
this.cycle(true);
|
1197 |
+
}
|
1198 |
+
|
1199 |
+
clearInterval(this._interval);
|
1200 |
+
this._interval = null;
|
1201 |
+
}
|
1202 |
+
|
1203 |
+
cycle(event) {
|
1204 |
+
if (!event) {
|
1205 |
+
this._isPaused = false;
|
1206 |
+
}
|
1207 |
+
|
1208 |
+
if (this._interval) {
|
1209 |
+
clearInterval(this._interval);
|
1210 |
+
this._interval = null;
|
1211 |
+
}
|
1212 |
+
|
1213 |
+
if (this._config && this._config.interval && !this._isPaused) {
|
1214 |
+
this._updateInterval();
|
1215 |
+
|
1216 |
+
this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
|
1217 |
+
}
|
1218 |
+
}
|
1219 |
+
|
1220 |
+
to(index) {
|
1221 |
+
this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
|
1222 |
+
|
1223 |
+
const activeIndex = this._getItemIndex(this._activeElement);
|
1224 |
+
|
1225 |
+
if (index > this._items.length - 1 || index < 0) {
|
1226 |
+
return;
|
1227 |
+
}
|
1228 |
+
|
1229 |
+
if (this._isSliding) {
|
1230 |
+
EventHandler.one(this._element, EVENT_SLID, () => this.to(index));
|
1231 |
+
return;
|
1232 |
+
}
|
1233 |
+
|
1234 |
+
if (activeIndex === index) {
|
1235 |
+
this.pause();
|
1236 |
+
this.cycle();
|
1237 |
+
return;
|
1238 |
+
}
|
1239 |
+
|
1240 |
+
const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;
|
1241 |
+
|
1242 |
+
this._slide(order, this._items[index]);
|
1243 |
+
} // Private
|
1244 |
+
|
1245 |
+
|
1246 |
+
_getConfig(config) {
|
1247 |
+
config = { ...Default$a,
|
1248 |
+
...Manipulator.getDataAttributes(this._element),
|
1249 |
+
...(typeof config === 'object' ? config : {})
|
1250 |
+
};
|
1251 |
+
typeCheckConfig(NAME$b, config, DefaultType$a);
|
1252 |
+
return config;
|
1253 |
+
}
|
1254 |
+
|
1255 |
+
_handleSwipe() {
|
1256 |
+
const absDeltax = Math.abs(this.touchDeltaX);
|
1257 |
+
|
1258 |
+
if (absDeltax <= SWIPE_THRESHOLD) {
|
1259 |
+
return;
|
1260 |
+
}
|
1261 |
+
|
1262 |
+
const direction = absDeltax / this.touchDeltaX;
|
1263 |
+
this.touchDeltaX = 0;
|
1264 |
+
|
1265 |
+
if (!direction) {
|
1266 |
+
return;
|
1267 |
+
}
|
1268 |
+
|
1269 |
+
this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);
|
1270 |
+
}
|
1271 |
+
|
1272 |
+
_addEventListeners() {
|
1273 |
+
if (this._config.keyboard) {
|
1274 |
+
EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
|
1275 |
+
}
|
1276 |
+
|
1277 |
+
if (this._config.pause === 'hover') {
|
1278 |
+
EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));
|
1279 |
+
EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));
|
1280 |
+
}
|
1281 |
+
|
1282 |
+
if (this._config.touch && this._touchSupported) {
|
1283 |
+
this._addTouchEventListeners();
|
1284 |
+
}
|
1285 |
+
}
|
1286 |
+
|
1287 |
+
_addTouchEventListeners() {
|
1288 |
+
const hasPointerPenTouch = event => {
|
1289 |
+
return this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);
|
1290 |
+
};
|
1291 |
+
|
1292 |
+
const start = event => {
|
1293 |
+
if (hasPointerPenTouch(event)) {
|
1294 |
+
this.touchStartX = event.clientX;
|
1295 |
+
} else if (!this._pointerEvent) {
|
1296 |
+
this.touchStartX = event.touches[0].clientX;
|
1297 |
+
}
|
1298 |
+
};
|
1299 |
+
|
1300 |
+
const move = event => {
|
1301 |
+
// ensure swiping with one touch and not pinching
|
1302 |
+
this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;
|
1303 |
+
};
|
1304 |
+
|
1305 |
+
const end = event => {
|
1306 |
+
if (hasPointerPenTouch(event)) {
|
1307 |
+
this.touchDeltaX = event.clientX - this.touchStartX;
|
1308 |
+
}
|
1309 |
+
|
1310 |
+
this._handleSwipe();
|
1311 |
+
|
1312 |
+
if (this._config.pause === 'hover') {
|
1313 |
+
// If it's a touch-enabled device, mouseenter/leave are fired as
|
1314 |
+
// part of the mouse compatibility events on first tap - the carousel
|
1315 |
+
// would stop cycling until user tapped out of it;
|
1316 |
+
// here, we listen for touchend, explicitly pause the carousel
|
1317 |
+
// (as if it's the second time we tap on it, mouseenter compat event
|
1318 |
+
// is NOT fired) and after a timeout (to allow for mouse compatibility
|
1319 |
+
// events to fire) we explicitly restart cycling
|
1320 |
+
this.pause();
|
1321 |
+
|
1322 |
+
if (this.touchTimeout) {
|
1323 |
+
clearTimeout(this.touchTimeout);
|
1324 |
+
}
|
1325 |
+
|
1326 |
+
this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);
|
1327 |
+
}
|
1328 |
+
};
|
1329 |
+
|
1330 |
+
SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {
|
1331 |
+
EventHandler.on(itemImg, EVENT_DRAG_START, event => event.preventDefault());
|
1332 |
+
});
|
1333 |
+
|
1334 |
+
if (this._pointerEvent) {
|
1335 |
+
EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));
|
1336 |
+
EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));
|
1337 |
+
|
1338 |
+
this._element.classList.add(CLASS_NAME_POINTER_EVENT);
|
1339 |
+
} else {
|
1340 |
+
EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));
|
1341 |
+
EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));
|
1342 |
+
EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));
|
1343 |
+
}
|
1344 |
+
}
|
1345 |
+
|
1346 |
+
_keydown(event) {
|
1347 |
+
if (/input|textarea/i.test(event.target.tagName)) {
|
1348 |
+
return;
|
1349 |
+
}
|
1350 |
+
|
1351 |
+
const direction = KEY_TO_DIRECTION[event.key];
|
1352 |
+
|
1353 |
+
if (direction) {
|
1354 |
+
event.preventDefault();
|
1355 |
+
|
1356 |
+
this._slide(direction);
|
1357 |
+
}
|
1358 |
+
}
|
1359 |
+
|
1360 |
+
_getItemIndex(element) {
|
1361 |
+
this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];
|
1362 |
+
return this._items.indexOf(element);
|
1363 |
+
}
|
1364 |
+
|
1365 |
+
_getItemByOrder(order, activeElement) {
|
1366 |
+
const isNext = order === ORDER_NEXT;
|
1367 |
+
return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);
|
1368 |
+
}
|
1369 |
+
|
1370 |
+
_triggerSlideEvent(relatedTarget, eventDirectionName) {
|
1371 |
+
const targetIndex = this._getItemIndex(relatedTarget);
|
1372 |
+
|
1373 |
+
const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));
|
1374 |
+
|
1375 |
+
return EventHandler.trigger(this._element, EVENT_SLIDE, {
|
1376 |
+
relatedTarget,
|
1377 |
+
direction: eventDirectionName,
|
1378 |
+
from: fromIndex,
|
1379 |
+
to: targetIndex
|
1380 |
+
});
|
1381 |
+
}
|
1382 |
+
|
1383 |
+
_setActiveIndicatorElement(element) {
|
1384 |
+
if (this._indicatorsElement) {
|
1385 |
+
const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);
|
1386 |
+
activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);
|
1387 |
+
activeIndicator.removeAttribute('aria-current');
|
1388 |
+
const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);
|
1389 |
+
|
1390 |
+
for (let i = 0; i < indicators.length; i++) {
|
1391 |
+
if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {
|
1392 |
+
indicators[i].classList.add(CLASS_NAME_ACTIVE$2);
|
1393 |
+
indicators[i].setAttribute('aria-current', 'true');
|
1394 |
+
break;
|
1395 |
+
}
|
1396 |
+
}
|
1397 |
+
}
|
1398 |
+
}
|
1399 |
+
|
1400 |
+
_updateInterval() {
|
1401 |
+
const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
|
1402 |
+
|
1403 |
+
if (!element) {
|
1404 |
+
return;
|
1405 |
+
}
|
1406 |
+
|
1407 |
+
const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);
|
1408 |
+
|
1409 |
+
if (elementInterval) {
|
1410 |
+
this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
|
1411 |
+
this._config.interval = elementInterval;
|
1412 |
+
} else {
|
1413 |
+
this._config.interval = this._config.defaultInterval || this._config.interval;
|
1414 |
+
}
|
1415 |
+
}
|
1416 |
+
|
1417 |
+
_slide(directionOrOrder, element) {
|
1418 |
+
const order = this._directionToOrder(directionOrOrder);
|
1419 |
+
|
1420 |
+
const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
|
1421 |
+
|
1422 |
+
const activeElementIndex = this._getItemIndex(activeElement);
|
1423 |
+
|
1424 |
+
const nextElement = element || this._getItemByOrder(order, activeElement);
|
1425 |
+
|
1426 |
+
const nextElementIndex = this._getItemIndex(nextElement);
|
1427 |
+
|
1428 |
+
const isCycling = Boolean(this._interval);
|
1429 |
+
const isNext = order === ORDER_NEXT;
|
1430 |
+
const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;
|
1431 |
+
const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;
|
1432 |
+
|
1433 |
+
const eventDirectionName = this._orderToDirection(order);
|
1434 |
+
|
1435 |
+
if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {
|
1436 |
+
this._isSliding = false;
|
1437 |
+
return;
|
1438 |
+
}
|
1439 |
+
|
1440 |
+
if (this._isSliding) {
|
1441 |
+
return;
|
1442 |
+
}
|
1443 |
+
|
1444 |
+
const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
|
1445 |
+
|
1446 |
+
if (slideEvent.defaultPrevented) {
|
1447 |
+
return;
|
1448 |
+
}
|
1449 |
+
|
1450 |
+
if (!activeElement || !nextElement) {
|
1451 |
+
// Some weirdness is happening, so we bail
|
1452 |
+
return;
|
1453 |
+
}
|
1454 |
+
|
1455 |
+
this._isSliding = true;
|
1456 |
+
|
1457 |
+
if (isCycling) {
|
1458 |
+
this.pause();
|
1459 |
+
}
|
1460 |
+
|
1461 |
+
this._setActiveIndicatorElement(nextElement);
|
1462 |
+
|
1463 |
+
this._activeElement = nextElement;
|
1464 |
+
|
1465 |
+
const triggerSlidEvent = () => {
|
1466 |
+
EventHandler.trigger(this._element, EVENT_SLID, {
|
1467 |
+
relatedTarget: nextElement,
|
1468 |
+
direction: eventDirectionName,
|
1469 |
+
from: activeElementIndex,
|
1470 |
+
to: nextElementIndex
|
1471 |
+
});
|
1472 |
+
};
|
1473 |
+
|
1474 |
+
if (this._element.classList.contains(CLASS_NAME_SLIDE)) {
|
1475 |
+
nextElement.classList.add(orderClassName);
|
1476 |
+
reflow(nextElement);
|
1477 |
+
activeElement.classList.add(directionalClassName);
|
1478 |
+
nextElement.classList.add(directionalClassName);
|
1479 |
+
|
1480 |
+
const completeCallBack = () => {
|
1481 |
+
nextElement.classList.remove(directionalClassName, orderClassName);
|
1482 |
+
nextElement.classList.add(CLASS_NAME_ACTIVE$2);
|
1483 |
+
activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);
|
1484 |
+
this._isSliding = false;
|
1485 |
+
setTimeout(triggerSlidEvent, 0);
|
1486 |
+
};
|
1487 |
+
|
1488 |
+
this._queueCallback(completeCallBack, activeElement, true);
|
1489 |
+
} else {
|
1490 |
+
activeElement.classList.remove(CLASS_NAME_ACTIVE$2);
|
1491 |
+
nextElement.classList.add(CLASS_NAME_ACTIVE$2);
|
1492 |
+
this._isSliding = false;
|
1493 |
+
triggerSlidEvent();
|
1494 |
+
}
|
1495 |
+
|
1496 |
+
if (isCycling) {
|
1497 |
+
this.cycle();
|
1498 |
+
}
|
1499 |
+
}
|
1500 |
+
|
1501 |
+
_directionToOrder(direction) {
|
1502 |
+
if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {
|
1503 |
+
return direction;
|
1504 |
+
}
|
1505 |
+
|
1506 |
+
if (isRTL()) {
|
1507 |
+
return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;
|
1508 |
+
}
|
1509 |
+
|
1510 |
+
return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;
|
1511 |
+
}
|
1512 |
+
|
1513 |
+
_orderToDirection(order) {
|
1514 |
+
if (![ORDER_NEXT, ORDER_PREV].includes(order)) {
|
1515 |
+
return order;
|
1516 |
+
}
|
1517 |
+
|
1518 |
+
if (isRTL()) {
|
1519 |
+
return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;
|
1520 |
+
}
|
1521 |
+
|
1522 |
+
return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
|
1523 |
+
} // Static
|
1524 |
+
|
1525 |
+
|
1526 |
+
static carouselInterface(element, config) {
|
1527 |
+
const data = Carousel.getOrCreateInstance(element, config);
|
1528 |
+
let {
|
1529 |
+
_config
|
1530 |
+
} = data;
|
1531 |
+
|
1532 |
+
if (typeof config === 'object') {
|
1533 |
+
_config = { ..._config,
|
1534 |
+
...config
|
1535 |
+
};
|
1536 |
+
}
|
1537 |
+
|
1538 |
+
const action = typeof config === 'string' ? config : _config.slide;
|
1539 |
+
|
1540 |
+
if (typeof config === 'number') {
|
1541 |
+
data.to(config);
|
1542 |
+
} else if (typeof action === 'string') {
|
1543 |
+
if (typeof data[action] === 'undefined') {
|
1544 |
+
throw new TypeError(`No method named "${action}"`);
|
1545 |
+
}
|
1546 |
+
|
1547 |
+
data[action]();
|
1548 |
+
} else if (_config.interval && _config.ride) {
|
1549 |
+
data.pause();
|
1550 |
+
data.cycle();
|
1551 |
+
}
|
1552 |
+
}
|
1553 |
+
|
1554 |
+
static jQueryInterface(config) {
|
1555 |
+
return this.each(function () {
|
1556 |
+
Carousel.carouselInterface(this, config);
|
1557 |
+
});
|
1558 |
+
}
|
1559 |
+
|
1560 |
+
static dataApiClickHandler(event) {
|
1561 |
+
const target = getElementFromSelector(this);
|
1562 |
+
|
1563 |
+
if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
|
1564 |
+
return;
|
1565 |
+
}
|
1566 |
+
|
1567 |
+
const config = { ...Manipulator.getDataAttributes(target),
|
1568 |
+
...Manipulator.getDataAttributes(this)
|
1569 |
+
};
|
1570 |
+
const slideIndex = this.getAttribute('data-bs-slide-to');
|
1571 |
+
|
1572 |
+
if (slideIndex) {
|
1573 |
+
config.interval = false;
|
1574 |
+
}
|
1575 |
+
|
1576 |
+
Carousel.carouselInterface(target, config);
|
1577 |
+
|
1578 |
+
if (slideIndex) {
|
1579 |
+
Carousel.getInstance(target).to(slideIndex);
|
1580 |
+
}
|
1581 |
+
|
1582 |
+
event.preventDefault();
|
1583 |
+
}
|
1584 |
+
|
1585 |
+
}
|
1586 |
+
/**
|
1587 |
+
* ------------------------------------------------------------------------
|
1588 |
+
* Data Api implementation
|
1589 |
+
* ------------------------------------------------------------------------
|
1590 |
+
*/
|
1591 |
+
|
1592 |
+
|
1593 |
+
EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);
|
1594 |
+
EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {
|
1595 |
+
const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);
|
1596 |
+
|
1597 |
+
for (let i = 0, len = carousels.length; i < len; i++) {
|
1598 |
+
Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));
|
1599 |
+
}
|
1600 |
+
});
|
1601 |
+
/**
|
1602 |
+
* ------------------------------------------------------------------------
|
1603 |
+
* jQuery
|
1604 |
+
* ------------------------------------------------------------------------
|
1605 |
+
* add .Carousel to jQuery only if jQuery is present
|
1606 |
+
*/
|
1607 |
+
|
1608 |
+
defineJQueryPlugin(Carousel);
|
1609 |
+
|
1610 |
+
/**
|
1611 |
+
* --------------------------------------------------------------------------
|
1612 |
+
* Bootstrap (v5.1.3): collapse.js
|
1613 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
1614 |
+
* --------------------------------------------------------------------------
|
1615 |
+
*/
|
1616 |
+
/**
|
1617 |
+
* ------------------------------------------------------------------------
|
1618 |
+
* Constants
|
1619 |
+
* ------------------------------------------------------------------------
|
1620 |
+
*/
|
1621 |
+
|
1622 |
+
const NAME$a = 'collapse';
|
1623 |
+
const DATA_KEY$9 = 'bs.collapse';
|
1624 |
+
const EVENT_KEY$9 = `.${DATA_KEY$9}`;
|
1625 |
+
const DATA_API_KEY$5 = '.data-api';
|
1626 |
+
const Default$9 = {
|
1627 |
+
toggle: true,
|
1628 |
+
parent: null
|
1629 |
+
};
|
1630 |
+
const DefaultType$9 = {
|
1631 |
+
toggle: 'boolean',
|
1632 |
+
parent: '(null|element)'
|
1633 |
+
};
|
1634 |
+
const EVENT_SHOW$5 = `show${EVENT_KEY$9}`;
|
1635 |
+
const EVENT_SHOWN$5 = `shown${EVENT_KEY$9}`;
|
1636 |
+
const EVENT_HIDE$5 = `hide${EVENT_KEY$9}`;
|
1637 |
+
const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$9}`;
|
1638 |
+
const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$9}${DATA_API_KEY$5}`;
|
1639 |
+
const CLASS_NAME_SHOW$7 = 'show';
|
1640 |
+
const CLASS_NAME_COLLAPSE = 'collapse';
|
1641 |
+
const CLASS_NAME_COLLAPSING = 'collapsing';
|
1642 |
+
const CLASS_NAME_COLLAPSED = 'collapsed';
|
1643 |
+
const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;
|
1644 |
+
const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';
|
1645 |
+
const WIDTH = 'width';
|
1646 |
+
const HEIGHT = 'height';
|
1647 |
+
const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';
|
1648 |
+
const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]';
|
1649 |
+
/**
|
1650 |
+
* ------------------------------------------------------------------------
|
1651 |
+
* Class Definition
|
1652 |
+
* ------------------------------------------------------------------------
|
1653 |
+
*/
|
1654 |
+
|
1655 |
+
class Collapse extends BaseComponent {
|
1656 |
+
constructor(element, config) {
|
1657 |
+
super(element);
|
1658 |
+
this._isTransitioning = false;
|
1659 |
+
this._config = this._getConfig(config);
|
1660 |
+
this._triggerArray = [];
|
1661 |
+
const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);
|
1662 |
+
|
1663 |
+
for (let i = 0, len = toggleList.length; i < len; i++) {
|
1664 |
+
const elem = toggleList[i];
|
1665 |
+
const selector = getSelectorFromElement(elem);
|
1666 |
+
const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);
|
1667 |
+
|
1668 |
+
if (selector !== null && filterElement.length) {
|
1669 |
+
this._selector = selector;
|
1670 |
+
|
1671 |
+
this._triggerArray.push(elem);
|
1672 |
+
}
|
1673 |
+
}
|
1674 |
+
|
1675 |
+
this._initializeChildren();
|
1676 |
+
|
1677 |
+
if (!this._config.parent) {
|
1678 |
+
this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
|
1679 |
+
}
|
1680 |
+
|
1681 |
+
if (this._config.toggle) {
|
1682 |
+
this.toggle();
|
1683 |
+
}
|
1684 |
+
} // Getters
|
1685 |
+
|
1686 |
+
|
1687 |
+
static get Default() {
|
1688 |
+
return Default$9;
|
1689 |
+
}
|
1690 |
+
|
1691 |
+
static get NAME() {
|
1692 |
+
return NAME$a;
|
1693 |
+
} // Public
|
1694 |
+
|
1695 |
+
|
1696 |
+
toggle() {
|
1697 |
+
if (this._isShown()) {
|
1698 |
+
this.hide();
|
1699 |
+
} else {
|
1700 |
+
this.show();
|
1701 |
+
}
|
1702 |
+
}
|
1703 |
+
|
1704 |
+
show() {
|
1705 |
+
if (this._isTransitioning || this._isShown()) {
|
1706 |
+
return;
|
1707 |
+
}
|
1708 |
+
|
1709 |
+
let actives = [];
|
1710 |
+
let activesData;
|
1711 |
+
|
1712 |
+
if (this._config.parent) {
|
1713 |
+
const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
|
1714 |
+
actives = SelectorEngine.find(SELECTOR_ACTIVES, this._config.parent).filter(elem => !children.includes(elem)); // remove children if greater depth
|
1715 |
+
}
|
1716 |
+
|
1717 |
+
const container = SelectorEngine.findOne(this._selector);
|
1718 |
+
|
1719 |
+
if (actives.length) {
|
1720 |
+
const tempActiveData = actives.find(elem => container !== elem);
|
1721 |
+
activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;
|
1722 |
+
|
1723 |
+
if (activesData && activesData._isTransitioning) {
|
1724 |
+
return;
|
1725 |
+
}
|
1726 |
+
}
|
1727 |
+
|
1728 |
+
const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);
|
1729 |
+
|
1730 |
+
if (startEvent.defaultPrevented) {
|
1731 |
+
return;
|
1732 |
+
}
|
1733 |
+
|
1734 |
+
actives.forEach(elemActive => {
|
1735 |
+
if (container !== elemActive) {
|
1736 |
+
Collapse.getOrCreateInstance(elemActive, {
|
1737 |
+
toggle: false
|
1738 |
+
}).hide();
|
1739 |
+
}
|
1740 |
+
|
1741 |
+
if (!activesData) {
|
1742 |
+
Data.set(elemActive, DATA_KEY$9, null);
|
1743 |
+
}
|
1744 |
+
});
|
1745 |
+
|
1746 |
+
const dimension = this._getDimension();
|
1747 |
+
|
1748 |
+
this._element.classList.remove(CLASS_NAME_COLLAPSE);
|
1749 |
+
|
1750 |
+
this._element.classList.add(CLASS_NAME_COLLAPSING);
|
1751 |
+
|
1752 |
+
this._element.style[dimension] = 0;
|
1753 |
+
|
1754 |
+
this._addAriaAndCollapsedClass(this._triggerArray, true);
|
1755 |
+
|
1756 |
+
this._isTransitioning = true;
|
1757 |
+
|
1758 |
+
const complete = () => {
|
1759 |
+
this._isTransitioning = false;
|
1760 |
+
|
1761 |
+
this._element.classList.remove(CLASS_NAME_COLLAPSING);
|
1762 |
+
|
1763 |
+
this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
|
1764 |
+
|
1765 |
+
this._element.style[dimension] = '';
|
1766 |
+
EventHandler.trigger(this._element, EVENT_SHOWN$5);
|
1767 |
+
};
|
1768 |
+
|
1769 |
+
const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
|
1770 |
+
const scrollSize = `scroll${capitalizedDimension}`;
|
1771 |
+
|
1772 |
+
this._queueCallback(complete, this._element, true);
|
1773 |
+
|
1774 |
+
this._element.style[dimension] = `${this._element[scrollSize]}px`;
|
1775 |
+
}
|
1776 |
+
|
1777 |
+
hide() {
|
1778 |
+
if (this._isTransitioning || !this._isShown()) {
|
1779 |
+
return;
|
1780 |
+
}
|
1781 |
+
|
1782 |
+
const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);
|
1783 |
+
|
1784 |
+
if (startEvent.defaultPrevented) {
|
1785 |
+
return;
|
1786 |
+
}
|
1787 |
+
|
1788 |
+
const dimension = this._getDimension();
|
1789 |
+
|
1790 |
+
this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
|
1791 |
+
reflow(this._element);
|
1792 |
+
|
1793 |
+
this._element.classList.add(CLASS_NAME_COLLAPSING);
|
1794 |
+
|
1795 |
+
this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
|
1796 |
+
|
1797 |
+
const triggerArrayLength = this._triggerArray.length;
|
1798 |
+
|
1799 |
+
for (let i = 0; i < triggerArrayLength; i++) {
|
1800 |
+
const trigger = this._triggerArray[i];
|
1801 |
+
const elem = getElementFromSelector(trigger);
|
1802 |
+
|
1803 |
+
if (elem && !this._isShown(elem)) {
|
1804 |
+
this._addAriaAndCollapsedClass([trigger], false);
|
1805 |
+
}
|
1806 |
+
}
|
1807 |
+
|
1808 |
+
this._isTransitioning = true;
|
1809 |
+
|
1810 |
+
const complete = () => {
|
1811 |
+
this._isTransitioning = false;
|
1812 |
+
|
1813 |
+
this._element.classList.remove(CLASS_NAME_COLLAPSING);
|
1814 |
+
|
1815 |
+
this._element.classList.add(CLASS_NAME_COLLAPSE);
|
1816 |
+
|
1817 |
+
EventHandler.trigger(this._element, EVENT_HIDDEN$5);
|
1818 |
+
};
|
1819 |
+
|
1820 |
+
this._element.style[dimension] = '';
|
1821 |
+
|
1822 |
+
this._queueCallback(complete, this._element, true);
|
1823 |
+
}
|
1824 |
+
|
1825 |
+
_isShown(element = this._element) {
|
1826 |
+
return element.classList.contains(CLASS_NAME_SHOW$7);
|
1827 |
+
} // Private
|
1828 |
+
|
1829 |
+
|
1830 |
+
_getConfig(config) {
|
1831 |
+
config = { ...Default$9,
|
1832 |
+
...Manipulator.getDataAttributes(this._element),
|
1833 |
+
...config
|
1834 |
+
};
|
1835 |
+
config.toggle = Boolean(config.toggle); // Coerce string values
|
1836 |
+
|
1837 |
+
config.parent = getElement(config.parent);
|
1838 |
+
typeCheckConfig(NAME$a, config, DefaultType$9);
|
1839 |
+
return config;
|
1840 |
+
}
|
1841 |
+
|
1842 |
+
_getDimension() {
|
1843 |
+
return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
|
1844 |
+
}
|
1845 |
+
|
1846 |
+
_initializeChildren() {
|
1847 |
+
if (!this._config.parent) {
|
1848 |
+
return;
|
1849 |
+
}
|
1850 |
+
|
1851 |
+
const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
|
1852 |
+
SelectorEngine.find(SELECTOR_DATA_TOGGLE$4, this._config.parent).filter(elem => !children.includes(elem)).forEach(element => {
|
1853 |
+
const selected = getElementFromSelector(element);
|
1854 |
+
|
1855 |
+
if (selected) {
|
1856 |
+
this._addAriaAndCollapsedClass([element], this._isShown(selected));
|
1857 |
+
}
|
1858 |
+
});
|
1859 |
+
}
|
1860 |
+
|
1861 |
+
_addAriaAndCollapsedClass(triggerArray, isOpen) {
|
1862 |
+
if (!triggerArray.length) {
|
1863 |
+
return;
|
1864 |
+
}
|
1865 |
+
|
1866 |
+
triggerArray.forEach(elem => {
|
1867 |
+
if (isOpen) {
|
1868 |
+
elem.classList.remove(CLASS_NAME_COLLAPSED);
|
1869 |
+
} else {
|
1870 |
+
elem.classList.add(CLASS_NAME_COLLAPSED);
|
1871 |
+
}
|
1872 |
+
|
1873 |
+
elem.setAttribute('aria-expanded', isOpen);
|
1874 |
+
});
|
1875 |
+
} // Static
|
1876 |
+
|
1877 |
+
|
1878 |
+
static jQueryInterface(config) {
|
1879 |
+
return this.each(function () {
|
1880 |
+
const _config = {};
|
1881 |
+
|
1882 |
+
if (typeof config === 'string' && /show|hide/.test(config)) {
|
1883 |
+
_config.toggle = false;
|
1884 |
+
}
|
1885 |
+
|
1886 |
+
const data = Collapse.getOrCreateInstance(this, _config);
|
1887 |
+
|
1888 |
+
if (typeof config === 'string') {
|
1889 |
+
if (typeof data[config] === 'undefined') {
|
1890 |
+
throw new TypeError(`No method named "${config}"`);
|
1891 |
+
}
|
1892 |
+
|
1893 |
+
data[config]();
|
1894 |
+
}
|
1895 |
+
});
|
1896 |
+
}
|
1897 |
+
|
1898 |
+
}
|
1899 |
+
/**
|
1900 |
+
* ------------------------------------------------------------------------
|
1901 |
+
* Data Api implementation
|
1902 |
+
* ------------------------------------------------------------------------
|
1903 |
+
*/
|
1904 |
+
|
1905 |
+
|
1906 |
+
EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {
|
1907 |
+
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element
|
1908 |
+
if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
|
1909 |
+
event.preventDefault();
|
1910 |
+
}
|
1911 |
+
|
1912 |
+
const selector = getSelectorFromElement(this);
|
1913 |
+
const selectorElements = SelectorEngine.find(selector);
|
1914 |
+
selectorElements.forEach(element => {
|
1915 |
+
Collapse.getOrCreateInstance(element, {
|
1916 |
+
toggle: false
|
1917 |
+
}).toggle();
|
1918 |
+
});
|
1919 |
+
});
|
1920 |
+
/**
|
1921 |
+
* ------------------------------------------------------------------------
|
1922 |
+
* jQuery
|
1923 |
+
* ------------------------------------------------------------------------
|
1924 |
+
* add .Collapse to jQuery only if jQuery is present
|
1925 |
+
*/
|
1926 |
+
|
1927 |
+
defineJQueryPlugin(Collapse);
|
1928 |
+
|
1929 |
+
var top = 'top';
|
1930 |
+
var bottom = 'bottom';
|
1931 |
+
var right = 'right';
|
1932 |
+
var left = 'left';
|
1933 |
+
var auto = 'auto';
|
1934 |
+
var basePlacements = [top, bottom, right, left];
|
1935 |
+
var start = 'start';
|
1936 |
+
var end = 'end';
|
1937 |
+
var clippingParents = 'clippingParents';
|
1938 |
+
var viewport = 'viewport';
|
1939 |
+
var popper = 'popper';
|
1940 |
+
var reference = 'reference';
|
1941 |
+
var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {
|
1942 |
+
return acc.concat([placement + "-" + start, placement + "-" + end]);
|
1943 |
+
}, []);
|
1944 |
+
var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {
|
1945 |
+
return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
|
1946 |
+
}, []); // modifiers that need to read the DOM
|
1947 |
+
|
1948 |
+
var beforeRead = 'beforeRead';
|
1949 |
+
var read = 'read';
|
1950 |
+
var afterRead = 'afterRead'; // pure-logic modifiers
|
1951 |
+
|
1952 |
+
var beforeMain = 'beforeMain';
|
1953 |
+
var main = 'main';
|
1954 |
+
var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
|
1955 |
+
|
1956 |
+
var beforeWrite = 'beforeWrite';
|
1957 |
+
var write = 'write';
|
1958 |
+
var afterWrite = 'afterWrite';
|
1959 |
+
var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
|
1960 |
+
|
1961 |
+
function getNodeName(element) {
|
1962 |
+
return element ? (element.nodeName || '').toLowerCase() : null;
|
1963 |
+
}
|
1964 |
+
|
1965 |
+
function getWindow(node) {
|
1966 |
+
if (node == null) {
|
1967 |
+
return window;
|
1968 |
+
}
|
1969 |
+
|
1970 |
+
if (node.toString() !== '[object Window]') {
|
1971 |
+
var ownerDocument = node.ownerDocument;
|
1972 |
+
return ownerDocument ? ownerDocument.defaultView || window : window;
|
1973 |
+
}
|
1974 |
+
|
1975 |
+
return node;
|
1976 |
+
}
|
1977 |
+
|
1978 |
+
function isElement(node) {
|
1979 |
+
var OwnElement = getWindow(node).Element;
|
1980 |
+
return node instanceof OwnElement || node instanceof Element;
|
1981 |
+
}
|
1982 |
+
|
1983 |
+
function isHTMLElement(node) {
|
1984 |
+
var OwnElement = getWindow(node).HTMLElement;
|
1985 |
+
return node instanceof OwnElement || node instanceof HTMLElement;
|
1986 |
+
}
|
1987 |
+
|
1988 |
+
function isShadowRoot(node) {
|
1989 |
+
// IE 11 has no ShadowRoot
|
1990 |
+
if (typeof ShadowRoot === 'undefined') {
|
1991 |
+
return false;
|
1992 |
+
}
|
1993 |
+
|
1994 |
+
var OwnElement = getWindow(node).ShadowRoot;
|
1995 |
+
return node instanceof OwnElement || node instanceof ShadowRoot;
|
1996 |
+
}
|
1997 |
+
|
1998 |
+
// and applies them to the HTMLElements such as popper and arrow
|
1999 |
+
|
2000 |
+
function applyStyles(_ref) {
|
2001 |
+
var state = _ref.state;
|
2002 |
+
Object.keys(state.elements).forEach(function (name) {
|
2003 |
+
var style = state.styles[name] || {};
|
2004 |
+
var attributes = state.attributes[name] || {};
|
2005 |
+
var element = state.elements[name]; // arrow is optional + virtual elements
|
2006 |
+
|
2007 |
+
if (!isHTMLElement(element) || !getNodeName(element)) {
|
2008 |
+
return;
|
2009 |
+
} // Flow doesn't support to extend this property, but it's the most
|
2010 |
+
// effective way to apply styles to an HTMLElement
|
2011 |
+
// $FlowFixMe[cannot-write]
|
2012 |
+
|
2013 |
+
|
2014 |
+
Object.assign(element.style, style);
|
2015 |
+
Object.keys(attributes).forEach(function (name) {
|
2016 |
+
var value = attributes[name];
|
2017 |
+
|
2018 |
+
if (value === false) {
|
2019 |
+
element.removeAttribute(name);
|
2020 |
+
} else {
|
2021 |
+
element.setAttribute(name, value === true ? '' : value);
|
2022 |
+
}
|
2023 |
+
});
|
2024 |
+
});
|
2025 |
+
}
|
2026 |
+
|
2027 |
+
function effect$2(_ref2) {
|
2028 |
+
var state = _ref2.state;
|
2029 |
+
var initialStyles = {
|
2030 |
+
popper: {
|
2031 |
+
position: state.options.strategy,
|
2032 |
+
left: '0',
|
2033 |
+
top: '0',
|
2034 |
+
margin: '0'
|
2035 |
+
},
|
2036 |
+
arrow: {
|
2037 |
+
position: 'absolute'
|
2038 |
+
},
|
2039 |
+
reference: {}
|
2040 |
+
};
|
2041 |
+
Object.assign(state.elements.popper.style, initialStyles.popper);
|
2042 |
+
state.styles = initialStyles;
|
2043 |
+
|
2044 |
+
if (state.elements.arrow) {
|
2045 |
+
Object.assign(state.elements.arrow.style, initialStyles.arrow);
|
2046 |
+
}
|
2047 |
+
|
2048 |
+
return function () {
|
2049 |
+
Object.keys(state.elements).forEach(function (name) {
|
2050 |
+
var element = state.elements[name];
|
2051 |
+
var attributes = state.attributes[name] || {};
|
2052 |
+
var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them
|
2053 |
+
|
2054 |
+
var style = styleProperties.reduce(function (style, property) {
|
2055 |
+
style[property] = '';
|
2056 |
+
return style;
|
2057 |
+
}, {}); // arrow is optional + virtual elements
|
2058 |
+
|
2059 |
+
if (!isHTMLElement(element) || !getNodeName(element)) {
|
2060 |
+
return;
|
2061 |
+
}
|
2062 |
+
|
2063 |
+
Object.assign(element.style, style);
|
2064 |
+
Object.keys(attributes).forEach(function (attribute) {
|
2065 |
+
element.removeAttribute(attribute);
|
2066 |
+
});
|
2067 |
+
});
|
2068 |
+
};
|
2069 |
+
} // eslint-disable-next-line import/no-unused-modules
|
2070 |
+
|
2071 |
+
|
2072 |
+
const applyStyles$1 = {
|
2073 |
+
name: 'applyStyles',
|
2074 |
+
enabled: true,
|
2075 |
+
phase: 'write',
|
2076 |
+
fn: applyStyles,
|
2077 |
+
effect: effect$2,
|
2078 |
+
requires: ['computeStyles']
|
2079 |
+
};
|
2080 |
+
|
2081 |
+
function getBasePlacement(placement) {
|
2082 |
+
return placement.split('-')[0];
|
2083 |
+
}
|
2084 |
+
|
2085 |
+
// import { isHTMLElement } from './instanceOf';
|
2086 |
+
function getBoundingClientRect(element, // eslint-disable-next-line unused-imports/no-unused-vars
|
2087 |
+
includeScale) {
|
2088 |
+
|
2089 |
+
var rect = element.getBoundingClientRect();
|
2090 |
+
var scaleX = 1;
|
2091 |
+
var scaleY = 1; // FIXME:
|
2092 |
+
// `offsetWidth` returns an integer while `getBoundingClientRect`
|
2093 |
+
// returns a float. This results in `scaleX` or `scaleY` being
|
2094 |
+
// non-1 when it should be for elements that aren't a full pixel in
|
2095 |
+
// width or height.
|
2096 |
+
// if (isHTMLElement(element) && includeScale) {
|
2097 |
+
// const offsetHeight = element.offsetHeight;
|
2098 |
+
// const offsetWidth = element.offsetWidth;
|
2099 |
+
// // Do not attempt to divide by 0, otherwise we get `Infinity` as scale
|
2100 |
+
// // Fallback to 1 in case both values are `0`
|
2101 |
+
// if (offsetWidth > 0) {
|
2102 |
+
// scaleX = rect.width / offsetWidth || 1;
|
2103 |
+
// }
|
2104 |
+
// if (offsetHeight > 0) {
|
2105 |
+
// scaleY = rect.height / offsetHeight || 1;
|
2106 |
+
// }
|
2107 |
+
// }
|
2108 |
+
|
2109 |
+
return {
|
2110 |
+
width: rect.width / scaleX,
|
2111 |
+
height: rect.height / scaleY,
|
2112 |
+
top: rect.top / scaleY,
|
2113 |
+
right: rect.right / scaleX,
|
2114 |
+
bottom: rect.bottom / scaleY,
|
2115 |
+
left: rect.left / scaleX,
|
2116 |
+
x: rect.left / scaleX,
|
2117 |
+
y: rect.top / scaleY
|
2118 |
+
};
|
2119 |
+
}
|
2120 |
+
|
2121 |
+
// means it doesn't take into account transforms.
|
2122 |
+
|
2123 |
+
function getLayoutRect(element) {
|
2124 |
+
var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.
|
2125 |
+
// Fixes https://github.com/popperjs/popper-core/issues/1223
|
2126 |
+
|
2127 |
+
var width = element.offsetWidth;
|
2128 |
+
var height = element.offsetHeight;
|
2129 |
+
|
2130 |
+
if (Math.abs(clientRect.width - width) <= 1) {
|
2131 |
+
width = clientRect.width;
|
2132 |
+
}
|
2133 |
+
|
2134 |
+
if (Math.abs(clientRect.height - height) <= 1) {
|
2135 |
+
height = clientRect.height;
|
2136 |
+
}
|
2137 |
+
|
2138 |
+
return {
|
2139 |
+
x: element.offsetLeft,
|
2140 |
+
y: element.offsetTop,
|
2141 |
+
width: width,
|
2142 |
+
height: height
|
2143 |
+
};
|
2144 |
+
}
|
2145 |
+
|
2146 |
+
function contains(parent, child) {
|
2147 |
+
var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
|
2148 |
+
|
2149 |
+
if (parent.contains(child)) {
|
2150 |
+
return true;
|
2151 |
+
} // then fallback to custom implementation with Shadow DOM support
|
2152 |
+
else if (rootNode && isShadowRoot(rootNode)) {
|
2153 |
+
var next = child;
|
2154 |
+
|
2155 |
+
do {
|
2156 |
+
if (next && parent.isSameNode(next)) {
|
2157 |
+
return true;
|
2158 |
+
} // $FlowFixMe[prop-missing]: need a better way to handle this...
|
2159 |
+
|
2160 |
+
|
2161 |
+
next = next.parentNode || next.host;
|
2162 |
+
} while (next);
|
2163 |
+
} // Give up, the result is false
|
2164 |
+
|
2165 |
+
|
2166 |
+
return false;
|
2167 |
+
}
|
2168 |
+
|
2169 |
+
function getComputedStyle$1(element) {
|
2170 |
+
return getWindow(element).getComputedStyle(element);
|
2171 |
+
}
|
2172 |
+
|
2173 |
+
function isTableElement(element) {
|
2174 |
+
return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;
|
2175 |
+
}
|
2176 |
+
|
2177 |
+
function getDocumentElement(element) {
|
2178 |
+
// $FlowFixMe[incompatible-return]: assume body is always available
|
2179 |
+
return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
|
2180 |
+
element.document) || window.document).documentElement;
|
2181 |
+
}
|
2182 |
+
|
2183 |
+
function getParentNode(element) {
|
2184 |
+
if (getNodeName(element) === 'html') {
|
2185 |
+
return element;
|
2186 |
+
}
|
2187 |
+
|
2188 |
+
return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
|
2189 |
+
// $FlowFixMe[incompatible-return]
|
2190 |
+
// $FlowFixMe[prop-missing]
|
2191 |
+
element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
|
2192 |
+
element.parentNode || ( // DOM Element detected
|
2193 |
+
isShadowRoot(element) ? element.host : null) || // ShadowRoot detected
|
2194 |
+
// $FlowFixMe[incompatible-call]: HTMLElement is a Node
|
2195 |
+
getDocumentElement(element) // fallback
|
2196 |
+
|
2197 |
+
);
|
2198 |
+
}
|
2199 |
+
|
2200 |
+
function getTrueOffsetParent(element) {
|
2201 |
+
if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837
|
2202 |
+
getComputedStyle$1(element).position === 'fixed') {
|
2203 |
+
return null;
|
2204 |
+
}
|
2205 |
+
|
2206 |
+
return element.offsetParent;
|
2207 |
+
} // `.offsetParent` reports `null` for fixed elements, while absolute elements
|
2208 |
+
// return the containing block
|
2209 |
+
|
2210 |
+
|
2211 |
+
function getContainingBlock(element) {
|
2212 |
+
var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;
|
2213 |
+
var isIE = navigator.userAgent.indexOf('Trident') !== -1;
|
2214 |
+
|
2215 |
+
if (isIE && isHTMLElement(element)) {
|
2216 |
+
// In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
|
2217 |
+
var elementCss = getComputedStyle$1(element);
|
2218 |
+
|
2219 |
+
if (elementCss.position === 'fixed') {
|
2220 |
+
return null;
|
2221 |
+
}
|
2222 |
+
}
|
2223 |
+
|
2224 |
+
var currentNode = getParentNode(element);
|
2225 |
+
|
2226 |
+
while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {
|
2227 |
+
var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that
|
2228 |
+
// create a containing block.
|
2229 |
+
// https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
|
2230 |
+
|
2231 |
+
if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {
|
2232 |
+
return currentNode;
|
2233 |
+
} else {
|
2234 |
+
currentNode = currentNode.parentNode;
|
2235 |
+
}
|
2236 |
+
}
|
2237 |
+
|
2238 |
+
return null;
|
2239 |
+
} // Gets the closest ancestor positioned element. Handles some edge cases,
|
2240 |
+
// such as table ancestors and cross browser bugs.
|
2241 |
+
|
2242 |
+
|
2243 |
+
function getOffsetParent(element) {
|
2244 |
+
var window = getWindow(element);
|
2245 |
+
var offsetParent = getTrueOffsetParent(element);
|
2246 |
+
|
2247 |
+
while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {
|
2248 |
+
offsetParent = getTrueOffsetParent(offsetParent);
|
2249 |
+
}
|
2250 |
+
|
2251 |
+
if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {
|
2252 |
+
return window;
|
2253 |
+
}
|
2254 |
+
|
2255 |
+
return offsetParent || getContainingBlock(element) || window;
|
2256 |
+
}
|
2257 |
+
|
2258 |
+
function getMainAxisFromPlacement(placement) {
|
2259 |
+
return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
|
2260 |
+
}
|
2261 |
+
|
2262 |
+
var max = Math.max;
|
2263 |
+
var min = Math.min;
|
2264 |
+
var round = Math.round;
|
2265 |
+
|
2266 |
+
function within(min$1, value, max$1) {
|
2267 |
+
return max(min$1, min(value, max$1));
|
2268 |
+
}
|
2269 |
+
|
2270 |
+
function getFreshSideObject() {
|
2271 |
+
return {
|
2272 |
+
top: 0,
|
2273 |
+
right: 0,
|
2274 |
+
bottom: 0,
|
2275 |
+
left: 0
|
2276 |
+
};
|
2277 |
+
}
|
2278 |
+
|
2279 |
+
function mergePaddingObject(paddingObject) {
|
2280 |
+
return Object.assign({}, getFreshSideObject(), paddingObject);
|
2281 |
+
}
|
2282 |
+
|
2283 |
+
function expandToHashMap(value, keys) {
|
2284 |
+
return keys.reduce(function (hashMap, key) {
|
2285 |
+
hashMap[key] = value;
|
2286 |
+
return hashMap;
|
2287 |
+
}, {});
|
2288 |
+
}
|
2289 |
+
|
2290 |
+
var toPaddingObject = function toPaddingObject(padding, state) {
|
2291 |
+
padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {
|
2292 |
+
placement: state.placement
|
2293 |
+
})) : padding;
|
2294 |
+
return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
|
2295 |
+
};
|
2296 |
+
|
2297 |
+
function arrow(_ref) {
|
2298 |
+
var _state$modifiersData$;
|
2299 |
+
|
2300 |
+
var state = _ref.state,
|
2301 |
+
name = _ref.name,
|
2302 |
+
options = _ref.options;
|
2303 |
+
var arrowElement = state.elements.arrow;
|
2304 |
+
var popperOffsets = state.modifiersData.popperOffsets;
|
2305 |
+
var basePlacement = getBasePlacement(state.placement);
|
2306 |
+
var axis = getMainAxisFromPlacement(basePlacement);
|
2307 |
+
var isVertical = [left, right].indexOf(basePlacement) >= 0;
|
2308 |
+
var len = isVertical ? 'height' : 'width';
|
2309 |
+
|
2310 |
+
if (!arrowElement || !popperOffsets) {
|
2311 |
+
return;
|
2312 |
+
}
|
2313 |
+
|
2314 |
+
var paddingObject = toPaddingObject(options.padding, state);
|
2315 |
+
var arrowRect = getLayoutRect(arrowElement);
|
2316 |
+
var minProp = axis === 'y' ? top : left;
|
2317 |
+
var maxProp = axis === 'y' ? bottom : right;
|
2318 |
+
var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];
|
2319 |
+
var startDiff = popperOffsets[axis] - state.rects.reference[axis];
|
2320 |
+
var arrowOffsetParent = getOffsetParent(arrowElement);
|
2321 |
+
var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
|
2322 |
+
var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is
|
2323 |
+
// outside of the popper bounds
|
2324 |
+
|
2325 |
+
var min = paddingObject[minProp];
|
2326 |
+
var max = clientSize - arrowRect[len] - paddingObject[maxProp];
|
2327 |
+
var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
|
2328 |
+
var offset = within(min, center, max); // Prevents breaking syntax highlighting...
|
2329 |
+
|
2330 |
+
var axisProp = axis;
|
2331 |
+
state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);
|
2332 |
+
}
|
2333 |
+
|
2334 |
+
function effect$1(_ref2) {
|
2335 |
+
var state = _ref2.state,
|
2336 |
+
options = _ref2.options;
|
2337 |
+
var _options$element = options.element,
|
2338 |
+
arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;
|
2339 |
+
|
2340 |
+
if (arrowElement == null) {
|
2341 |
+
return;
|
2342 |
+
} // CSS selector
|
2343 |
+
|
2344 |
+
|
2345 |
+
if (typeof arrowElement === 'string') {
|
2346 |
+
arrowElement = state.elements.popper.querySelector(arrowElement);
|
2347 |
+
|
2348 |
+
if (!arrowElement) {
|
2349 |
+
return;
|
2350 |
+
}
|
2351 |
+
}
|
2352 |
+
|
2353 |
+
if (!contains(state.elements.popper, arrowElement)) {
|
2354 |
+
|
2355 |
+
return;
|
2356 |
+
}
|
2357 |
+
|
2358 |
+
state.elements.arrow = arrowElement;
|
2359 |
+
} // eslint-disable-next-line import/no-unused-modules
|
2360 |
+
|
2361 |
+
|
2362 |
+
const arrow$1 = {
|
2363 |
+
name: 'arrow',
|
2364 |
+
enabled: true,
|
2365 |
+
phase: 'main',
|
2366 |
+
fn: arrow,
|
2367 |
+
effect: effect$1,
|
2368 |
+
requires: ['popperOffsets'],
|
2369 |
+
requiresIfExists: ['preventOverflow']
|
2370 |
+
};
|
2371 |
+
|
2372 |
+
function getVariation(placement) {
|
2373 |
+
return placement.split('-')[1];
|
2374 |
+
}
|
2375 |
+
|
2376 |
+
var unsetSides = {
|
2377 |
+
top: 'auto',
|
2378 |
+
right: 'auto',
|
2379 |
+
bottom: 'auto',
|
2380 |
+
left: 'auto'
|
2381 |
+
}; // Round the offsets to the nearest suitable subpixel based on the DPR.
|
2382 |
+
// Zooming can change the DPR, but it seems to report a value that will
|
2383 |
+
// cleanly divide the values into the appropriate subpixels.
|
2384 |
+
|
2385 |
+
function roundOffsetsByDPR(_ref) {
|
2386 |
+
var x = _ref.x,
|
2387 |
+
y = _ref.y;
|
2388 |
+
var win = window;
|
2389 |
+
var dpr = win.devicePixelRatio || 1;
|
2390 |
+
return {
|
2391 |
+
x: round(round(x * dpr) / dpr) || 0,
|
2392 |
+
y: round(round(y * dpr) / dpr) || 0
|
2393 |
+
};
|
2394 |
+
}
|
2395 |
+
|
2396 |
+
function mapToStyles(_ref2) {
|
2397 |
+
var _Object$assign2;
|
2398 |
+
|
2399 |
+
var popper = _ref2.popper,
|
2400 |
+
popperRect = _ref2.popperRect,
|
2401 |
+
placement = _ref2.placement,
|
2402 |
+
variation = _ref2.variation,
|
2403 |
+
offsets = _ref2.offsets,
|
2404 |
+
position = _ref2.position,
|
2405 |
+
gpuAcceleration = _ref2.gpuAcceleration,
|
2406 |
+
adaptive = _ref2.adaptive,
|
2407 |
+
roundOffsets = _ref2.roundOffsets;
|
2408 |
+
|
2409 |
+
var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,
|
2410 |
+
_ref3$x = _ref3.x,
|
2411 |
+
x = _ref3$x === void 0 ? 0 : _ref3$x,
|
2412 |
+
_ref3$y = _ref3.y,
|
2413 |
+
y = _ref3$y === void 0 ? 0 : _ref3$y;
|
2414 |
+
|
2415 |
+
var hasX = offsets.hasOwnProperty('x');
|
2416 |
+
var hasY = offsets.hasOwnProperty('y');
|
2417 |
+
var sideX = left;
|
2418 |
+
var sideY = top;
|
2419 |
+
var win = window;
|
2420 |
+
|
2421 |
+
if (adaptive) {
|
2422 |
+
var offsetParent = getOffsetParent(popper);
|
2423 |
+
var heightProp = 'clientHeight';
|
2424 |
+
var widthProp = 'clientWidth';
|
2425 |
+
|
2426 |
+
if (offsetParent === getWindow(popper)) {
|
2427 |
+
offsetParent = getDocumentElement(popper);
|
2428 |
+
|
2429 |
+
if (getComputedStyle$1(offsetParent).position !== 'static' && position === 'absolute') {
|
2430 |
+
heightProp = 'scrollHeight';
|
2431 |
+
widthProp = 'scrollWidth';
|
2432 |
+
}
|
2433 |
+
} // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it
|
2434 |
+
|
2435 |
+
|
2436 |
+
offsetParent = offsetParent;
|
2437 |
+
|
2438 |
+
if (placement === top || (placement === left || placement === right) && variation === end) {
|
2439 |
+
sideY = bottom; // $FlowFixMe[prop-missing]
|
2440 |
+
|
2441 |
+
y -= offsetParent[heightProp] - popperRect.height;
|
2442 |
+
y *= gpuAcceleration ? 1 : -1;
|
2443 |
+
}
|
2444 |
+
|
2445 |
+
if (placement === left || (placement === top || placement === bottom) && variation === end) {
|
2446 |
+
sideX = right; // $FlowFixMe[prop-missing]
|
2447 |
+
|
2448 |
+
x -= offsetParent[widthProp] - popperRect.width;
|
2449 |
+
x *= gpuAcceleration ? 1 : -1;
|
2450 |
+
}
|
2451 |
+
}
|
2452 |
+
|
2453 |
+
var commonStyles = Object.assign({
|
2454 |
+
position: position
|
2455 |
+
}, adaptive && unsetSides);
|
2456 |
+
|
2457 |
+
if (gpuAcceleration) {
|
2458 |
+
var _Object$assign;
|
2459 |
+
|
2460 |
+
return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
|
2461 |
+
}
|
2462 |
+
|
2463 |
+
return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2));
|
2464 |
+
}
|
2465 |
+
|
2466 |
+
function computeStyles(_ref4) {
|
2467 |
+
var state = _ref4.state,
|
2468 |
+
options = _ref4.options;
|
2469 |
+
var _options$gpuAccelerat = options.gpuAcceleration,
|
2470 |
+
gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,
|
2471 |
+
_options$adaptive = options.adaptive,
|
2472 |
+
adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
|
2473 |
+
_options$roundOffsets = options.roundOffsets,
|
2474 |
+
roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
|
2475 |
+
|
2476 |
+
var commonStyles = {
|
2477 |
+
placement: getBasePlacement(state.placement),
|
2478 |
+
variation: getVariation(state.placement),
|
2479 |
+
popper: state.elements.popper,
|
2480 |
+
popperRect: state.rects.popper,
|
2481 |
+
gpuAcceleration: gpuAcceleration
|
2482 |
+
};
|
2483 |
+
|
2484 |
+
if (state.modifiersData.popperOffsets != null) {
|
2485 |
+
state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
|
2486 |
+
offsets: state.modifiersData.popperOffsets,
|
2487 |
+
position: state.options.strategy,
|
2488 |
+
adaptive: adaptive,
|
2489 |
+
roundOffsets: roundOffsets
|
2490 |
+
})));
|
2491 |
+
}
|
2492 |
+
|
2493 |
+
if (state.modifiersData.arrow != null) {
|
2494 |
+
state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
|
2495 |
+
offsets: state.modifiersData.arrow,
|
2496 |
+
position: 'absolute',
|
2497 |
+
adaptive: false,
|
2498 |
+
roundOffsets: roundOffsets
|
2499 |
+
})));
|
2500 |
+
}
|
2501 |
+
|
2502 |
+
state.attributes.popper = Object.assign({}, state.attributes.popper, {
|
2503 |
+
'data-popper-placement': state.placement
|
2504 |
+
});
|
2505 |
+
} // eslint-disable-next-line import/no-unused-modules
|
2506 |
+
|
2507 |
+
|
2508 |
+
const computeStyles$1 = {
|
2509 |
+
name: 'computeStyles',
|
2510 |
+
enabled: true,
|
2511 |
+
phase: 'beforeWrite',
|
2512 |
+
fn: computeStyles,
|
2513 |
+
data: {}
|
2514 |
+
};
|
2515 |
+
|
2516 |
+
var passive = {
|
2517 |
+
passive: true
|
2518 |
+
};
|
2519 |
+
|
2520 |
+
function effect(_ref) {
|
2521 |
+
var state = _ref.state,
|
2522 |
+
instance = _ref.instance,
|
2523 |
+
options = _ref.options;
|
2524 |
+
var _options$scroll = options.scroll,
|
2525 |
+
scroll = _options$scroll === void 0 ? true : _options$scroll,
|
2526 |
+
_options$resize = options.resize,
|
2527 |
+
resize = _options$resize === void 0 ? true : _options$resize;
|
2528 |
+
var window = getWindow(state.elements.popper);
|
2529 |
+
var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
|
2530 |
+
|
2531 |
+
if (scroll) {
|
2532 |
+
scrollParents.forEach(function (scrollParent) {
|
2533 |
+
scrollParent.addEventListener('scroll', instance.update, passive);
|
2534 |
+
});
|
2535 |
+
}
|
2536 |
+
|
2537 |
+
if (resize) {
|
2538 |
+
window.addEventListener('resize', instance.update, passive);
|
2539 |
+
}
|
2540 |
+
|
2541 |
+
return function () {
|
2542 |
+
if (scroll) {
|
2543 |
+
scrollParents.forEach(function (scrollParent) {
|
2544 |
+
scrollParent.removeEventListener('scroll', instance.update, passive);
|
2545 |
+
});
|
2546 |
+
}
|
2547 |
+
|
2548 |
+
if (resize) {
|
2549 |
+
window.removeEventListener('resize', instance.update, passive);
|
2550 |
+
}
|
2551 |
+
};
|
2552 |
+
} // eslint-disable-next-line import/no-unused-modules
|
2553 |
+
|
2554 |
+
|
2555 |
+
const eventListeners = {
|
2556 |
+
name: 'eventListeners',
|
2557 |
+
enabled: true,
|
2558 |
+
phase: 'write',
|
2559 |
+
fn: function fn() {},
|
2560 |
+
effect: effect,
|
2561 |
+
data: {}
|
2562 |
+
};
|
2563 |
+
|
2564 |
+
var hash$1 = {
|
2565 |
+
left: 'right',
|
2566 |
+
right: 'left',
|
2567 |
+
bottom: 'top',
|
2568 |
+
top: 'bottom'
|
2569 |
+
};
|
2570 |
+
function getOppositePlacement(placement) {
|
2571 |
+
return placement.replace(/left|right|bottom|top/g, function (matched) {
|
2572 |
+
return hash$1[matched];
|
2573 |
+
});
|
2574 |
+
}
|
2575 |
+
|
2576 |
+
var hash = {
|
2577 |
+
start: 'end',
|
2578 |
+
end: 'start'
|
2579 |
+
};
|
2580 |
+
function getOppositeVariationPlacement(placement) {
|
2581 |
+
return placement.replace(/start|end/g, function (matched) {
|
2582 |
+
return hash[matched];
|
2583 |
+
});
|
2584 |
+
}
|
2585 |
+
|
2586 |
+
function getWindowScroll(node) {
|
2587 |
+
var win = getWindow(node);
|
2588 |
+
var scrollLeft = win.pageXOffset;
|
2589 |
+
var scrollTop = win.pageYOffset;
|
2590 |
+
return {
|
2591 |
+
scrollLeft: scrollLeft,
|
2592 |
+
scrollTop: scrollTop
|
2593 |
+
};
|
2594 |
+
}
|
2595 |
+
|
2596 |
+
function getWindowScrollBarX(element) {
|
2597 |
+
// If <html> has a CSS width greater than the viewport, then this will be
|
2598 |
+
// incorrect for RTL.
|
2599 |
+
// Popper 1 is broken in this case and never had a bug report so let's assume
|
2600 |
+
// it's not an issue. I don't think anyone ever specifies width on <html>
|
2601 |
+
// anyway.
|
2602 |
+
// Browsers where the left scrollbar doesn't cause an issue report `0` for
|
2603 |
+
// this (e.g. Edge 2019, IE11, Safari)
|
2604 |
+
return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
|
2605 |
+
}
|
2606 |
+
|
2607 |
+
function getViewportRect(element) {
|
2608 |
+
var win = getWindow(element);
|
2609 |
+
var html = getDocumentElement(element);
|
2610 |
+
var visualViewport = win.visualViewport;
|
2611 |
+
var width = html.clientWidth;
|
2612 |
+
var height = html.clientHeight;
|
2613 |
+
var x = 0;
|
2614 |
+
var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper
|
2615 |
+
// can be obscured underneath it.
|
2616 |
+
// Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even
|
2617 |
+
// if it isn't open, so if this isn't available, the popper will be detected
|
2618 |
+
// to overflow the bottom of the screen too early.
|
2619 |
+
|
2620 |
+
if (visualViewport) {
|
2621 |
+
width = visualViewport.width;
|
2622 |
+
height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)
|
2623 |
+
// In Chrome, it returns a value very close to 0 (+/-) but contains rounding
|
2624 |
+
// errors due to floating point numbers, so we need to check precision.
|
2625 |
+
// Safari returns a number <= 0, usually < -1 when pinch-zoomed
|
2626 |
+
// Feature detection fails in mobile emulation mode in Chrome.
|
2627 |
+
// Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <
|
2628 |
+
// 0.001
|
2629 |
+
// Fallback here: "Not Safari" userAgent
|
2630 |
+
|
2631 |
+
if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {
|
2632 |
+
x = visualViewport.offsetLeft;
|
2633 |
+
y = visualViewport.offsetTop;
|
2634 |
+
}
|
2635 |
+
}
|
2636 |
+
|
2637 |
+
return {
|
2638 |
+
width: width,
|
2639 |
+
height: height,
|
2640 |
+
x: x + getWindowScrollBarX(element),
|
2641 |
+
y: y
|
2642 |
+
};
|
2643 |
+
}
|
2644 |
+
|
2645 |
+
// of the `<html>` and `<body>` rect bounds if horizontally scrollable
|
2646 |
+
|
2647 |
+
function getDocumentRect(element) {
|
2648 |
+
var _element$ownerDocumen;
|
2649 |
+
|
2650 |
+
var html = getDocumentElement(element);
|
2651 |
+
var winScroll = getWindowScroll(element);
|
2652 |
+
var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
|
2653 |
+
var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
|
2654 |
+
var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
|
2655 |
+
var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
|
2656 |
+
var y = -winScroll.scrollTop;
|
2657 |
+
|
2658 |
+
if (getComputedStyle$1(body || html).direction === 'rtl') {
|
2659 |
+
x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
|
2660 |
+
}
|
2661 |
+
|
2662 |
+
return {
|
2663 |
+
width: width,
|
2664 |
+
height: height,
|
2665 |
+
x: x,
|
2666 |
+
y: y
|
2667 |
+
};
|
2668 |
+
}
|
2669 |
+
|
2670 |
+
function isScrollParent(element) {
|
2671 |
+
// Firefox wants us to check `-x` and `-y` variations as well
|
2672 |
+
var _getComputedStyle = getComputedStyle$1(element),
|
2673 |
+
overflow = _getComputedStyle.overflow,
|
2674 |
+
overflowX = _getComputedStyle.overflowX,
|
2675 |
+
overflowY = _getComputedStyle.overflowY;
|
2676 |
+
|
2677 |
+
return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
|
2678 |
+
}
|
2679 |
+
|
2680 |
+
function getScrollParent(node) {
|
2681 |
+
if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {
|
2682 |
+
// $FlowFixMe[incompatible-return]: assume body is always available
|
2683 |
+
return node.ownerDocument.body;
|
2684 |
+
}
|
2685 |
+
|
2686 |
+
if (isHTMLElement(node) && isScrollParent(node)) {
|
2687 |
+
return node;
|
2688 |
+
}
|
2689 |
+
|
2690 |
+
return getScrollParent(getParentNode(node));
|
2691 |
+
}
|
2692 |
+
|
2693 |
+
/*
|
2694 |
+
given a DOM element, return the list of all scroll parents, up the list of ancesors
|
2695 |
+
until we get to the top window object. This list is what we attach scroll listeners
|
2696 |
+
to, because if any of these parent elements scroll, we'll need to re-calculate the
|
2697 |
+
reference element's position.
|
2698 |
+
*/
|
2699 |
+
|
2700 |
+
function listScrollParents(element, list) {
|
2701 |
+
var _element$ownerDocumen;
|
2702 |
+
|
2703 |
+
if (list === void 0) {
|
2704 |
+
list = [];
|
2705 |
+
}
|
2706 |
+
|
2707 |
+
var scrollParent = getScrollParent(element);
|
2708 |
+
var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
|
2709 |
+
var win = getWindow(scrollParent);
|
2710 |
+
var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
|
2711 |
+
var updatedList = list.concat(target);
|
2712 |
+
return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
|
2713 |
+
updatedList.concat(listScrollParents(getParentNode(target)));
|
2714 |
+
}
|
2715 |
+
|
2716 |
+
function rectToClientRect(rect) {
|
2717 |
+
return Object.assign({}, rect, {
|
2718 |
+
left: rect.x,
|
2719 |
+
top: rect.y,
|
2720 |
+
right: rect.x + rect.width,
|
2721 |
+
bottom: rect.y + rect.height
|
2722 |
+
});
|
2723 |
+
}
|
2724 |
+
|
2725 |
+
function getInnerBoundingClientRect(element) {
|
2726 |
+
var rect = getBoundingClientRect(element);
|
2727 |
+
rect.top = rect.top + element.clientTop;
|
2728 |
+
rect.left = rect.left + element.clientLeft;
|
2729 |
+
rect.bottom = rect.top + element.clientHeight;
|
2730 |
+
rect.right = rect.left + element.clientWidth;
|
2731 |
+
rect.width = element.clientWidth;
|
2732 |
+
rect.height = element.clientHeight;
|
2733 |
+
rect.x = rect.left;
|
2734 |
+
rect.y = rect.top;
|
2735 |
+
return rect;
|
2736 |
+
}
|
2737 |
+
|
2738 |
+
function getClientRectFromMixedType(element, clippingParent) {
|
2739 |
+
return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
|
2740 |
+
} // A "clipping parent" is an overflowable container with the characteristic of
|
2741 |
+
// clipping (or hiding) overflowing elements with a position different from
|
2742 |
+
// `initial`
|
2743 |
+
|
2744 |
+
|
2745 |
+
function getClippingParents(element) {
|
2746 |
+
var clippingParents = listScrollParents(getParentNode(element));
|
2747 |
+
var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;
|
2748 |
+
var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
|
2749 |
+
|
2750 |
+
if (!isElement(clipperElement)) {
|
2751 |
+
return [];
|
2752 |
+
} // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
|
2753 |
+
|
2754 |
+
|
2755 |
+
return clippingParents.filter(function (clippingParent) {
|
2756 |
+
return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
|
2757 |
+
});
|
2758 |
+
} // Gets the maximum area that the element is visible in due to any number of
|
2759 |
+
// clipping parents
|
2760 |
+
|
2761 |
+
|
2762 |
+
function getClippingRect(element, boundary, rootBoundary) {
|
2763 |
+
var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
|
2764 |
+
var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
|
2765 |
+
var firstClippingParent = clippingParents[0];
|
2766 |
+
var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
|
2767 |
+
var rect = getClientRectFromMixedType(element, clippingParent);
|
2768 |
+
accRect.top = max(rect.top, accRect.top);
|
2769 |
+
accRect.right = min(rect.right, accRect.right);
|
2770 |
+
accRect.bottom = min(rect.bottom, accRect.bottom);
|
2771 |
+
accRect.left = max(rect.left, accRect.left);
|
2772 |
+
return accRect;
|
2773 |
+
}, getClientRectFromMixedType(element, firstClippingParent));
|
2774 |
+
clippingRect.width = clippingRect.right - clippingRect.left;
|
2775 |
+
clippingRect.height = clippingRect.bottom - clippingRect.top;
|
2776 |
+
clippingRect.x = clippingRect.left;
|
2777 |
+
clippingRect.y = clippingRect.top;
|
2778 |
+
return clippingRect;
|
2779 |
+
}
|
2780 |
+
|
2781 |
+
function computeOffsets(_ref) {
|
2782 |
+
var reference = _ref.reference,
|
2783 |
+
element = _ref.element,
|
2784 |
+
placement = _ref.placement;
|
2785 |
+
var basePlacement = placement ? getBasePlacement(placement) : null;
|
2786 |
+
var variation = placement ? getVariation(placement) : null;
|
2787 |
+
var commonX = reference.x + reference.width / 2 - element.width / 2;
|
2788 |
+
var commonY = reference.y + reference.height / 2 - element.height / 2;
|
2789 |
+
var offsets;
|
2790 |
+
|
2791 |
+
switch (basePlacement) {
|
2792 |
+
case top:
|
2793 |
+
offsets = {
|
2794 |
+
x: commonX,
|
2795 |
+
y: reference.y - element.height
|
2796 |
+
};
|
2797 |
+
break;
|
2798 |
+
|
2799 |
+
case bottom:
|
2800 |
+
offsets = {
|
2801 |
+
x: commonX,
|
2802 |
+
y: reference.y + reference.height
|
2803 |
+
};
|
2804 |
+
break;
|
2805 |
+
|
2806 |
+
case right:
|
2807 |
+
offsets = {
|
2808 |
+
x: reference.x + reference.width,
|
2809 |
+
y: commonY
|
2810 |
+
};
|
2811 |
+
break;
|
2812 |
+
|
2813 |
+
case left:
|
2814 |
+
offsets = {
|
2815 |
+
x: reference.x - element.width,
|
2816 |
+
y: commonY
|
2817 |
+
};
|
2818 |
+
break;
|
2819 |
+
|
2820 |
+
default:
|
2821 |
+
offsets = {
|
2822 |
+
x: reference.x,
|
2823 |
+
y: reference.y
|
2824 |
+
};
|
2825 |
+
}
|
2826 |
+
|
2827 |
+
var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
|
2828 |
+
|
2829 |
+
if (mainAxis != null) {
|
2830 |
+
var len = mainAxis === 'y' ? 'height' : 'width';
|
2831 |
+
|
2832 |
+
switch (variation) {
|
2833 |
+
case start:
|
2834 |
+
offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
|
2835 |
+
break;
|
2836 |
+
|
2837 |
+
case end:
|
2838 |
+
offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
|
2839 |
+
break;
|
2840 |
+
}
|
2841 |
+
}
|
2842 |
+
|
2843 |
+
return offsets;
|
2844 |
+
}
|
2845 |
+
|
2846 |
+
function detectOverflow(state, options) {
|
2847 |
+
if (options === void 0) {
|
2848 |
+
options = {};
|
2849 |
+
}
|
2850 |
+
|
2851 |
+
var _options = options,
|
2852 |
+
_options$placement = _options.placement,
|
2853 |
+
placement = _options$placement === void 0 ? state.placement : _options$placement,
|
2854 |
+
_options$boundary = _options.boundary,
|
2855 |
+
boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,
|
2856 |
+
_options$rootBoundary = _options.rootBoundary,
|
2857 |
+
rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,
|
2858 |
+
_options$elementConte = _options.elementContext,
|
2859 |
+
elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,
|
2860 |
+
_options$altBoundary = _options.altBoundary,
|
2861 |
+
altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
|
2862 |
+
_options$padding = _options.padding,
|
2863 |
+
padding = _options$padding === void 0 ? 0 : _options$padding;
|
2864 |
+
var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
|
2865 |
+
var altContext = elementContext === popper ? reference : popper;
|
2866 |
+
var popperRect = state.rects.popper;
|
2867 |
+
var element = state.elements[altBoundary ? altContext : elementContext];
|
2868 |
+
var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);
|
2869 |
+
var referenceClientRect = getBoundingClientRect(state.elements.reference);
|
2870 |
+
var popperOffsets = computeOffsets({
|
2871 |
+
reference: referenceClientRect,
|
2872 |
+
element: popperRect,
|
2873 |
+
strategy: 'absolute',
|
2874 |
+
placement: placement
|
2875 |
+
});
|
2876 |
+
var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));
|
2877 |
+
var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
|
2878 |
+
// 0 or negative = within the clipping rect
|
2879 |
+
|
2880 |
+
var overflowOffsets = {
|
2881 |
+
top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
|
2882 |
+
bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
|
2883 |
+
left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
|
2884 |
+
right: elementClientRect.right - clippingClientRect.right + paddingObject.right
|
2885 |
+
};
|
2886 |
+
var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element
|
2887 |
+
|
2888 |
+
if (elementContext === popper && offsetData) {
|
2889 |
+
var offset = offsetData[placement];
|
2890 |
+
Object.keys(overflowOffsets).forEach(function (key) {
|
2891 |
+
var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
|
2892 |
+
var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';
|
2893 |
+
overflowOffsets[key] += offset[axis] * multiply;
|
2894 |
+
});
|
2895 |
+
}
|
2896 |
+
|
2897 |
+
return overflowOffsets;
|
2898 |
+
}
|
2899 |
+
|
2900 |
+
function computeAutoPlacement(state, options) {
|
2901 |
+
if (options === void 0) {
|
2902 |
+
options = {};
|
2903 |
+
}
|
2904 |
+
|
2905 |
+
var _options = options,
|
2906 |
+
placement = _options.placement,
|
2907 |
+
boundary = _options.boundary,
|
2908 |
+
rootBoundary = _options.rootBoundary,
|
2909 |
+
padding = _options.padding,
|
2910 |
+
flipVariations = _options.flipVariations,
|
2911 |
+
_options$allowedAutoP = _options.allowedAutoPlacements,
|
2912 |
+
allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;
|
2913 |
+
var variation = getVariation(placement);
|
2914 |
+
var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {
|
2915 |
+
return getVariation(placement) === variation;
|
2916 |
+
}) : basePlacements;
|
2917 |
+
var allowedPlacements = placements$1.filter(function (placement) {
|
2918 |
+
return allowedAutoPlacements.indexOf(placement) >= 0;
|
2919 |
+
});
|
2920 |
+
|
2921 |
+
if (allowedPlacements.length === 0) {
|
2922 |
+
allowedPlacements = placements$1;
|
2923 |
+
} // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...
|
2924 |
+
|
2925 |
+
|
2926 |
+
var overflows = allowedPlacements.reduce(function (acc, placement) {
|
2927 |
+
acc[placement] = detectOverflow(state, {
|
2928 |
+
placement: placement,
|
2929 |
+
boundary: boundary,
|
2930 |
+
rootBoundary: rootBoundary,
|
2931 |
+
padding: padding
|
2932 |
+
})[getBasePlacement(placement)];
|
2933 |
+
return acc;
|
2934 |
+
}, {});
|
2935 |
+
return Object.keys(overflows).sort(function (a, b) {
|
2936 |
+
return overflows[a] - overflows[b];
|
2937 |
+
});
|
2938 |
+
}
|
2939 |
+
|
2940 |
+
function getExpandedFallbackPlacements(placement) {
|
2941 |
+
if (getBasePlacement(placement) === auto) {
|
2942 |
+
return [];
|
2943 |
+
}
|
2944 |
+
|
2945 |
+
var oppositePlacement = getOppositePlacement(placement);
|
2946 |
+
return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];
|
2947 |
+
}
|
2948 |
+
|
2949 |
+
function flip(_ref) {
|
2950 |
+
var state = _ref.state,
|
2951 |
+
options = _ref.options,
|
2952 |
+
name = _ref.name;
|
2953 |
+
|
2954 |
+
if (state.modifiersData[name]._skip) {
|
2955 |
+
return;
|
2956 |
+
}
|
2957 |
+
|
2958 |
+
var _options$mainAxis = options.mainAxis,
|
2959 |
+
checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
|
2960 |
+
_options$altAxis = options.altAxis,
|
2961 |
+
checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,
|
2962 |
+
specifiedFallbackPlacements = options.fallbackPlacements,
|
2963 |
+
padding = options.padding,
|
2964 |
+
boundary = options.boundary,
|
2965 |
+
rootBoundary = options.rootBoundary,
|
2966 |
+
altBoundary = options.altBoundary,
|
2967 |
+
_options$flipVariatio = options.flipVariations,
|
2968 |
+
flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,
|
2969 |
+
allowedAutoPlacements = options.allowedAutoPlacements;
|
2970 |
+
var preferredPlacement = state.options.placement;
|
2971 |
+
var basePlacement = getBasePlacement(preferredPlacement);
|
2972 |
+
var isBasePlacement = basePlacement === preferredPlacement;
|
2973 |
+
var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
|
2974 |
+
var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {
|
2975 |
+
return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {
|
2976 |
+
placement: placement,
|
2977 |
+
boundary: boundary,
|
2978 |
+
rootBoundary: rootBoundary,
|
2979 |
+
padding: padding,
|
2980 |
+
flipVariations: flipVariations,
|
2981 |
+
allowedAutoPlacements: allowedAutoPlacements
|
2982 |
+
}) : placement);
|
2983 |
+
}, []);
|
2984 |
+
var referenceRect = state.rects.reference;
|
2985 |
+
var popperRect = state.rects.popper;
|
2986 |
+
var checksMap = new Map();
|
2987 |
+
var makeFallbackChecks = true;
|
2988 |
+
var firstFittingPlacement = placements[0];
|
2989 |
+
|
2990 |
+
for (var i = 0; i < placements.length; i++) {
|
2991 |
+
var placement = placements[i];
|
2992 |
+
|
2993 |
+
var _basePlacement = getBasePlacement(placement);
|
2994 |
+
|
2995 |
+
var isStartVariation = getVariation(placement) === start;
|
2996 |
+
var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;
|
2997 |
+
var len = isVertical ? 'width' : 'height';
|
2998 |
+
var overflow = detectOverflow(state, {
|
2999 |
+
placement: placement,
|
3000 |
+
boundary: boundary,
|
3001 |
+
rootBoundary: rootBoundary,
|
3002 |
+
altBoundary: altBoundary,
|
3003 |
+
padding: padding
|
3004 |
+
});
|
3005 |
+
var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;
|
3006 |
+
|
3007 |
+
if (referenceRect[len] > popperRect[len]) {
|
3008 |
+
mainVariationSide = getOppositePlacement(mainVariationSide);
|
3009 |
+
}
|
3010 |
+
|
3011 |
+
var altVariationSide = getOppositePlacement(mainVariationSide);
|
3012 |
+
var checks = [];
|
3013 |
+
|
3014 |
+
if (checkMainAxis) {
|
3015 |
+
checks.push(overflow[_basePlacement] <= 0);
|
3016 |
+
}
|
3017 |
+
|
3018 |
+
if (checkAltAxis) {
|
3019 |
+
checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
|
3020 |
+
}
|
3021 |
+
|
3022 |
+
if (checks.every(function (check) {
|
3023 |
+
return check;
|
3024 |
+
})) {
|
3025 |
+
firstFittingPlacement = placement;
|
3026 |
+
makeFallbackChecks = false;
|
3027 |
+
break;
|
3028 |
+
}
|
3029 |
+
|
3030 |
+
checksMap.set(placement, checks);
|
3031 |
+
}
|
3032 |
+
|
3033 |
+
if (makeFallbackChecks) {
|
3034 |
+
// `2` may be desired in some cases – research later
|
3035 |
+
var numberOfChecks = flipVariations ? 3 : 1;
|
3036 |
+
|
3037 |
+
var _loop = function _loop(_i) {
|
3038 |
+
var fittingPlacement = placements.find(function (placement) {
|
3039 |
+
var checks = checksMap.get(placement);
|
3040 |
+
|
3041 |
+
if (checks) {
|
3042 |
+
return checks.slice(0, _i).every(function (check) {
|
3043 |
+
return check;
|
3044 |
+
});
|
3045 |
+
}
|
3046 |
+
});
|
3047 |
+
|
3048 |
+
if (fittingPlacement) {
|
3049 |
+
firstFittingPlacement = fittingPlacement;
|
3050 |
+
return "break";
|
3051 |
+
}
|
3052 |
+
};
|
3053 |
+
|
3054 |
+
for (var _i = numberOfChecks; _i > 0; _i--) {
|
3055 |
+
var _ret = _loop(_i);
|
3056 |
+
|
3057 |
+
if (_ret === "break") break;
|
3058 |
+
}
|
3059 |
+
}
|
3060 |
+
|
3061 |
+
if (state.placement !== firstFittingPlacement) {
|
3062 |
+
state.modifiersData[name]._skip = true;
|
3063 |
+
state.placement = firstFittingPlacement;
|
3064 |
+
state.reset = true;
|
3065 |
+
}
|
3066 |
+
} // eslint-disable-next-line import/no-unused-modules
|
3067 |
+
|
3068 |
+
|
3069 |
+
const flip$1 = {
|
3070 |
+
name: 'flip',
|
3071 |
+
enabled: true,
|
3072 |
+
phase: 'main',
|
3073 |
+
fn: flip,
|
3074 |
+
requiresIfExists: ['offset'],
|
3075 |
+
data: {
|
3076 |
+
_skip: false
|
3077 |
+
}
|
3078 |
+
};
|
3079 |
+
|
3080 |
+
function getSideOffsets(overflow, rect, preventedOffsets) {
|
3081 |
+
if (preventedOffsets === void 0) {
|
3082 |
+
preventedOffsets = {
|
3083 |
+
x: 0,
|
3084 |
+
y: 0
|
3085 |
+
};
|
3086 |
+
}
|
3087 |
+
|
3088 |
+
return {
|
3089 |
+
top: overflow.top - rect.height - preventedOffsets.y,
|
3090 |
+
right: overflow.right - rect.width + preventedOffsets.x,
|
3091 |
+
bottom: overflow.bottom - rect.height + preventedOffsets.y,
|
3092 |
+
left: overflow.left - rect.width - preventedOffsets.x
|
3093 |
+
};
|
3094 |
+
}
|
3095 |
+
|
3096 |
+
function isAnySideFullyClipped(overflow) {
|
3097 |
+
return [top, right, bottom, left].some(function (side) {
|
3098 |
+
return overflow[side] >= 0;
|
3099 |
+
});
|
3100 |
+
}
|
3101 |
+
|
3102 |
+
function hide(_ref) {
|
3103 |
+
var state = _ref.state,
|
3104 |
+
name = _ref.name;
|
3105 |
+
var referenceRect = state.rects.reference;
|
3106 |
+
var popperRect = state.rects.popper;
|
3107 |
+
var preventedOffsets = state.modifiersData.preventOverflow;
|
3108 |
+
var referenceOverflow = detectOverflow(state, {
|
3109 |
+
elementContext: 'reference'
|
3110 |
+
});
|
3111 |
+
var popperAltOverflow = detectOverflow(state, {
|
3112 |
+
altBoundary: true
|
3113 |
+
});
|
3114 |
+
var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
|
3115 |
+
var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
|
3116 |
+
var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
|
3117 |
+
var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
|
3118 |
+
state.modifiersData[name] = {
|
3119 |
+
referenceClippingOffsets: referenceClippingOffsets,
|
3120 |
+
popperEscapeOffsets: popperEscapeOffsets,
|
3121 |
+
isReferenceHidden: isReferenceHidden,
|
3122 |
+
hasPopperEscaped: hasPopperEscaped
|
3123 |
+
};
|
3124 |
+
state.attributes.popper = Object.assign({}, state.attributes.popper, {
|
3125 |
+
'data-popper-reference-hidden': isReferenceHidden,
|
3126 |
+
'data-popper-escaped': hasPopperEscaped
|
3127 |
+
});
|
3128 |
+
} // eslint-disable-next-line import/no-unused-modules
|
3129 |
+
|
3130 |
+
|
3131 |
+
const hide$1 = {
|
3132 |
+
name: 'hide',
|
3133 |
+
enabled: true,
|
3134 |
+
phase: 'main',
|
3135 |
+
requiresIfExists: ['preventOverflow'],
|
3136 |
+
fn: hide
|
3137 |
+
};
|
3138 |
+
|
3139 |
+
function distanceAndSkiddingToXY(placement, rects, offset) {
|
3140 |
+
var basePlacement = getBasePlacement(placement);
|
3141 |
+
var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
|
3142 |
+
|
3143 |
+
var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {
|
3144 |
+
placement: placement
|
3145 |
+
})) : offset,
|
3146 |
+
skidding = _ref[0],
|
3147 |
+
distance = _ref[1];
|
3148 |
+
|
3149 |
+
skidding = skidding || 0;
|
3150 |
+
distance = (distance || 0) * invertDistance;
|
3151 |
+
return [left, right].indexOf(basePlacement) >= 0 ? {
|
3152 |
+
x: distance,
|
3153 |
+
y: skidding
|
3154 |
+
} : {
|
3155 |
+
x: skidding,
|
3156 |
+
y: distance
|
3157 |
+
};
|
3158 |
+
}
|
3159 |
+
|
3160 |
+
function offset(_ref2) {
|
3161 |
+
var state = _ref2.state,
|
3162 |
+
options = _ref2.options,
|
3163 |
+
name = _ref2.name;
|
3164 |
+
var _options$offset = options.offset,
|
3165 |
+
offset = _options$offset === void 0 ? [0, 0] : _options$offset;
|
3166 |
+
var data = placements.reduce(function (acc, placement) {
|
3167 |
+
acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);
|
3168 |
+
return acc;
|
3169 |
+
}, {});
|
3170 |
+
var _data$state$placement = data[state.placement],
|
3171 |
+
x = _data$state$placement.x,
|
3172 |
+
y = _data$state$placement.y;
|
3173 |
+
|
3174 |
+
if (state.modifiersData.popperOffsets != null) {
|
3175 |
+
state.modifiersData.popperOffsets.x += x;
|
3176 |
+
state.modifiersData.popperOffsets.y += y;
|
3177 |
+
}
|
3178 |
+
|
3179 |
+
state.modifiersData[name] = data;
|
3180 |
+
} // eslint-disable-next-line import/no-unused-modules
|
3181 |
+
|
3182 |
+
|
3183 |
+
const offset$1 = {
|
3184 |
+
name: 'offset',
|
3185 |
+
enabled: true,
|
3186 |
+
phase: 'main',
|
3187 |
+
requires: ['popperOffsets'],
|
3188 |
+
fn: offset
|
3189 |
+
};
|
3190 |
+
|
3191 |
+
function popperOffsets(_ref) {
|
3192 |
+
var state = _ref.state,
|
3193 |
+
name = _ref.name;
|
3194 |
+
// Offsets are the actual position the popper needs to have to be
|
3195 |
+
// properly positioned near its reference element
|
3196 |
+
// This is the most basic placement, and will be adjusted by
|
3197 |
+
// the modifiers in the next step
|
3198 |
+
state.modifiersData[name] = computeOffsets({
|
3199 |
+
reference: state.rects.reference,
|
3200 |
+
element: state.rects.popper,
|
3201 |
+
strategy: 'absolute',
|
3202 |
+
placement: state.placement
|
3203 |
+
});
|
3204 |
+
} // eslint-disable-next-line import/no-unused-modules
|
3205 |
+
|
3206 |
+
|
3207 |
+
const popperOffsets$1 = {
|
3208 |
+
name: 'popperOffsets',
|
3209 |
+
enabled: true,
|
3210 |
+
phase: 'read',
|
3211 |
+
fn: popperOffsets,
|
3212 |
+
data: {}
|
3213 |
+
};
|
3214 |
+
|
3215 |
+
function getAltAxis(axis) {
|
3216 |
+
return axis === 'x' ? 'y' : 'x';
|
3217 |
+
}
|
3218 |
+
|
3219 |
+
function preventOverflow(_ref) {
|
3220 |
+
var state = _ref.state,
|
3221 |
+
options = _ref.options,
|
3222 |
+
name = _ref.name;
|
3223 |
+
var _options$mainAxis = options.mainAxis,
|
3224 |
+
checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
|
3225 |
+
_options$altAxis = options.altAxis,
|
3226 |
+
checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,
|
3227 |
+
boundary = options.boundary,
|
3228 |
+
rootBoundary = options.rootBoundary,
|
3229 |
+
altBoundary = options.altBoundary,
|
3230 |
+
padding = options.padding,
|
3231 |
+
_options$tether = options.tether,
|
3232 |
+
tether = _options$tether === void 0 ? true : _options$tether,
|
3233 |
+
_options$tetherOffset = options.tetherOffset,
|
3234 |
+
tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
|
3235 |
+
var overflow = detectOverflow(state, {
|
3236 |
+
boundary: boundary,
|
3237 |
+
rootBoundary: rootBoundary,
|
3238 |
+
padding: padding,
|
3239 |
+
altBoundary: altBoundary
|
3240 |
+
});
|
3241 |
+
var basePlacement = getBasePlacement(state.placement);
|
3242 |
+
var variation = getVariation(state.placement);
|
3243 |
+
var isBasePlacement = !variation;
|
3244 |
+
var mainAxis = getMainAxisFromPlacement(basePlacement);
|
3245 |
+
var altAxis = getAltAxis(mainAxis);
|
3246 |
+
var popperOffsets = state.modifiersData.popperOffsets;
|
3247 |
+
var referenceRect = state.rects.reference;
|
3248 |
+
var popperRect = state.rects.popper;
|
3249 |
+
var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {
|
3250 |
+
placement: state.placement
|
3251 |
+
})) : tetherOffset;
|
3252 |
+
var data = {
|
3253 |
+
x: 0,
|
3254 |
+
y: 0
|
3255 |
+
};
|
3256 |
+
|
3257 |
+
if (!popperOffsets) {
|
3258 |
+
return;
|
3259 |
+
}
|
3260 |
+
|
3261 |
+
if (checkMainAxis || checkAltAxis) {
|
3262 |
+
var mainSide = mainAxis === 'y' ? top : left;
|
3263 |
+
var altSide = mainAxis === 'y' ? bottom : right;
|
3264 |
+
var len = mainAxis === 'y' ? 'height' : 'width';
|
3265 |
+
var offset = popperOffsets[mainAxis];
|
3266 |
+
var min$1 = popperOffsets[mainAxis] + overflow[mainSide];
|
3267 |
+
var max$1 = popperOffsets[mainAxis] - overflow[altSide];
|
3268 |
+
var additive = tether ? -popperRect[len] / 2 : 0;
|
3269 |
+
var minLen = variation === start ? referenceRect[len] : popperRect[len];
|
3270 |
+
var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go
|
3271 |
+
// outside the reference bounds
|
3272 |
+
|
3273 |
+
var arrowElement = state.elements.arrow;
|
3274 |
+
var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {
|
3275 |
+
width: 0,
|
3276 |
+
height: 0
|
3277 |
+
};
|
3278 |
+
var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();
|
3279 |
+
var arrowPaddingMin = arrowPaddingObject[mainSide];
|
3280 |
+
var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want
|
3281 |
+
// to include its full size in the calculation. If the reference is small
|
3282 |
+
// and near the edge of a boundary, the popper can overflow even if the
|
3283 |
+
// reference is not overflowing as well (e.g. virtual elements with no
|
3284 |
+
// width or height)
|
3285 |
+
|
3286 |
+
var arrowLen = within(0, referenceRect[len], arrowRect[len]);
|
3287 |
+
var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;
|
3288 |
+
var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;
|
3289 |
+
var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
|
3290 |
+
var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
|
3291 |
+
var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;
|
3292 |
+
var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;
|
3293 |
+
var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;
|
3294 |
+
|
3295 |
+
if (checkMainAxis) {
|
3296 |
+
var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);
|
3297 |
+
popperOffsets[mainAxis] = preventedOffset;
|
3298 |
+
data[mainAxis] = preventedOffset - offset;
|
3299 |
+
}
|
3300 |
+
|
3301 |
+
if (checkAltAxis) {
|
3302 |
+
var _mainSide = mainAxis === 'x' ? top : left;
|
3303 |
+
|
3304 |
+
var _altSide = mainAxis === 'x' ? bottom : right;
|
3305 |
+
|
3306 |
+
var _offset = popperOffsets[altAxis];
|
3307 |
+
|
3308 |
+
var _min = _offset + overflow[_mainSide];
|
3309 |
+
|
3310 |
+
var _max = _offset - overflow[_altSide];
|
3311 |
+
|
3312 |
+
var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);
|
3313 |
+
|
3314 |
+
popperOffsets[altAxis] = _preventedOffset;
|
3315 |
+
data[altAxis] = _preventedOffset - _offset;
|
3316 |
+
}
|
3317 |
+
}
|
3318 |
+
|
3319 |
+
state.modifiersData[name] = data;
|
3320 |
+
} // eslint-disable-next-line import/no-unused-modules
|
3321 |
+
|
3322 |
+
|
3323 |
+
const preventOverflow$1 = {
|
3324 |
+
name: 'preventOverflow',
|
3325 |
+
enabled: true,
|
3326 |
+
phase: 'main',
|
3327 |
+
fn: preventOverflow,
|
3328 |
+
requiresIfExists: ['offset']
|
3329 |
+
};
|
3330 |
+
|
3331 |
+
function getHTMLElementScroll(element) {
|
3332 |
+
return {
|
3333 |
+
scrollLeft: element.scrollLeft,
|
3334 |
+
scrollTop: element.scrollTop
|
3335 |
+
};
|
3336 |
+
}
|
3337 |
+
|
3338 |
+
function getNodeScroll(node) {
|
3339 |
+
if (node === getWindow(node) || !isHTMLElement(node)) {
|
3340 |
+
return getWindowScroll(node);
|
3341 |
+
} else {
|
3342 |
+
return getHTMLElementScroll(node);
|
3343 |
+
}
|
3344 |
+
}
|
3345 |
+
|
3346 |
+
function isElementScaled(element) {
|
3347 |
+
var rect = element.getBoundingClientRect();
|
3348 |
+
var scaleX = rect.width / element.offsetWidth || 1;
|
3349 |
+
var scaleY = rect.height / element.offsetHeight || 1;
|
3350 |
+
return scaleX !== 1 || scaleY !== 1;
|
3351 |
+
} // Returns the composite rect of an element relative to its offsetParent.
|
3352 |
+
// Composite means it takes into account transforms as well as layout.
|
3353 |
+
|
3354 |
+
|
3355 |
+
function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
|
3356 |
+
if (isFixed === void 0) {
|
3357 |
+
isFixed = false;
|
3358 |
+
}
|
3359 |
+
|
3360 |
+
var isOffsetParentAnElement = isHTMLElement(offsetParent);
|
3361 |
+
isHTMLElement(offsetParent) && isElementScaled(offsetParent);
|
3362 |
+
var documentElement = getDocumentElement(offsetParent);
|
3363 |
+
var rect = getBoundingClientRect(elementOrVirtualElement);
|
3364 |
+
var scroll = {
|
3365 |
+
scrollLeft: 0,
|
3366 |
+
scrollTop: 0
|
3367 |
+
};
|
3368 |
+
var offsets = {
|
3369 |
+
x: 0,
|
3370 |
+
y: 0
|
3371 |
+
};
|
3372 |
+
|
3373 |
+
if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
|
3374 |
+
if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
|
3375 |
+
isScrollParent(documentElement)) {
|
3376 |
+
scroll = getNodeScroll(offsetParent);
|
3377 |
+
}
|
3378 |
+
|
3379 |
+
if (isHTMLElement(offsetParent)) {
|
3380 |
+
offsets = getBoundingClientRect(offsetParent);
|
3381 |
+
offsets.x += offsetParent.clientLeft;
|
3382 |
+
offsets.y += offsetParent.clientTop;
|
3383 |
+
} else if (documentElement) {
|
3384 |
+
offsets.x = getWindowScrollBarX(documentElement);
|
3385 |
+
}
|
3386 |
+
}
|
3387 |
+
|
3388 |
+
return {
|
3389 |
+
x: rect.left + scroll.scrollLeft - offsets.x,
|
3390 |
+
y: rect.top + scroll.scrollTop - offsets.y,
|
3391 |
+
width: rect.width,
|
3392 |
+
height: rect.height
|
3393 |
+
};
|
3394 |
+
}
|
3395 |
+
|
3396 |
+
function order(modifiers) {
|
3397 |
+
var map = new Map();
|
3398 |
+
var visited = new Set();
|
3399 |
+
var result = [];
|
3400 |
+
modifiers.forEach(function (modifier) {
|
3401 |
+
map.set(modifier.name, modifier);
|
3402 |
+
}); // On visiting object, check for its dependencies and visit them recursively
|
3403 |
+
|
3404 |
+
function sort(modifier) {
|
3405 |
+
visited.add(modifier.name);
|
3406 |
+
var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
|
3407 |
+
requires.forEach(function (dep) {
|
3408 |
+
if (!visited.has(dep)) {
|
3409 |
+
var depModifier = map.get(dep);
|
3410 |
+
|
3411 |
+
if (depModifier) {
|
3412 |
+
sort(depModifier);
|
3413 |
+
}
|
3414 |
+
}
|
3415 |
+
});
|
3416 |
+
result.push(modifier);
|
3417 |
+
}
|
3418 |
+
|
3419 |
+
modifiers.forEach(function (modifier) {
|
3420 |
+
if (!visited.has(modifier.name)) {
|
3421 |
+
// check for visited object
|
3422 |
+
sort(modifier);
|
3423 |
+
}
|
3424 |
+
});
|
3425 |
+
return result;
|
3426 |
+
}
|
3427 |
+
|
3428 |
+
function orderModifiers(modifiers) {
|
3429 |
+
// order based on dependencies
|
3430 |
+
var orderedModifiers = order(modifiers); // order based on phase
|
3431 |
+
|
3432 |
+
return modifierPhases.reduce(function (acc, phase) {
|
3433 |
+
return acc.concat(orderedModifiers.filter(function (modifier) {
|
3434 |
+
return modifier.phase === phase;
|
3435 |
+
}));
|
3436 |
+
}, []);
|
3437 |
+
}
|
3438 |
+
|
3439 |
+
function debounce(fn) {
|
3440 |
+
var pending;
|
3441 |
+
return function () {
|
3442 |
+
if (!pending) {
|
3443 |
+
pending = new Promise(function (resolve) {
|
3444 |
+
Promise.resolve().then(function () {
|
3445 |
+
pending = undefined;
|
3446 |
+
resolve(fn());
|
3447 |
+
});
|
3448 |
+
});
|
3449 |
+
}
|
3450 |
+
|
3451 |
+
return pending;
|
3452 |
+
};
|
3453 |
+
}
|
3454 |
+
|
3455 |
+
function mergeByName(modifiers) {
|
3456 |
+
var merged = modifiers.reduce(function (merged, current) {
|
3457 |
+
var existing = merged[current.name];
|
3458 |
+
merged[current.name] = existing ? Object.assign({}, existing, current, {
|
3459 |
+
options: Object.assign({}, existing.options, current.options),
|
3460 |
+
data: Object.assign({}, existing.data, current.data)
|
3461 |
+
}) : current;
|
3462 |
+
return merged;
|
3463 |
+
}, {}); // IE11 does not support Object.values
|
3464 |
+
|
3465 |
+
return Object.keys(merged).map(function (key) {
|
3466 |
+
return merged[key];
|
3467 |
+
});
|
3468 |
+
}
|
3469 |
+
|
3470 |
+
var DEFAULT_OPTIONS = {
|
3471 |
+
placement: 'bottom',
|
3472 |
+
modifiers: [],
|
3473 |
+
strategy: 'absolute'
|
3474 |
+
};
|
3475 |
+
|
3476 |
+
function areValidElements() {
|
3477 |
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
3478 |
+
args[_key] = arguments[_key];
|
3479 |
+
}
|
3480 |
+
|
3481 |
+
return !args.some(function (element) {
|
3482 |
+
return !(element && typeof element.getBoundingClientRect === 'function');
|
3483 |
+
});
|
3484 |
+
}
|
3485 |
+
|
3486 |
+
function popperGenerator(generatorOptions) {
|
3487 |
+
if (generatorOptions === void 0) {
|
3488 |
+
generatorOptions = {};
|
3489 |
+
}
|
3490 |
+
|
3491 |
+
var _generatorOptions = generatorOptions,
|
3492 |
+
_generatorOptions$def = _generatorOptions.defaultModifiers,
|
3493 |
+
defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
|
3494 |
+
_generatorOptions$def2 = _generatorOptions.defaultOptions,
|
3495 |
+
defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
|
3496 |
+
return function createPopper(reference, popper, options) {
|
3497 |
+
if (options === void 0) {
|
3498 |
+
options = defaultOptions;
|
3499 |
+
}
|
3500 |
+
|
3501 |
+
var state = {
|
3502 |
+
placement: 'bottom',
|
3503 |
+
orderedModifiers: [],
|
3504 |
+
options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
|
3505 |
+
modifiersData: {},
|
3506 |
+
elements: {
|
3507 |
+
reference: reference,
|
3508 |
+
popper: popper
|
3509 |
+
},
|
3510 |
+
attributes: {},
|
3511 |
+
styles: {}
|
3512 |
+
};
|
3513 |
+
var effectCleanupFns = [];
|
3514 |
+
var isDestroyed = false;
|
3515 |
+
var instance = {
|
3516 |
+
state: state,
|
3517 |
+
setOptions: function setOptions(setOptionsAction) {
|
3518 |
+
var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;
|
3519 |
+
cleanupModifierEffects();
|
3520 |
+
state.options = Object.assign({}, defaultOptions, state.options, options);
|
3521 |
+
state.scrollParents = {
|
3522 |
+
reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],
|
3523 |
+
popper: listScrollParents(popper)
|
3524 |
+
}; // Orders the modifiers based on their dependencies and `phase`
|
3525 |
+
// properties
|
3526 |
+
|
3527 |
+
var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers
|
3528 |
+
|
3529 |
+
state.orderedModifiers = orderedModifiers.filter(function (m) {
|
3530 |
+
return m.enabled;
|
3531 |
+
}); // Validate the provided modifiers so that the consumer will get warned
|
3532 |
+
|
3533 |
+
runModifierEffects();
|
3534 |
+
return instance.update();
|
3535 |
+
},
|
3536 |
+
// Sync update – it will always be executed, even if not necessary. This
|
3537 |
+
// is useful for low frequency updates where sync behavior simplifies the
|
3538 |
+
// logic.
|
3539 |
+
// For high frequency updates (e.g. `resize` and `scroll` events), always
|
3540 |
+
// prefer the async Popper#update method
|
3541 |
+
forceUpdate: function forceUpdate() {
|
3542 |
+
if (isDestroyed) {
|
3543 |
+
return;
|
3544 |
+
}
|
3545 |
+
|
3546 |
+
var _state$elements = state.elements,
|
3547 |
+
reference = _state$elements.reference,
|
3548 |
+
popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
|
3549 |
+
// anymore
|
3550 |
+
|
3551 |
+
if (!areValidElements(reference, popper)) {
|
3552 |
+
|
3553 |
+
return;
|
3554 |
+
} // Store the reference and popper rects to be read by modifiers
|
3555 |
+
|
3556 |
+
|
3557 |
+
state.rects = {
|
3558 |
+
reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),
|
3559 |
+
popper: getLayoutRect(popper)
|
3560 |
+
}; // Modifiers have the ability to reset the current update cycle. The
|
3561 |
+
// most common use case for this is the `flip` modifier changing the
|
3562 |
+
// placement, which then needs to re-run all the modifiers, because the
|
3563 |
+
// logic was previously ran for the previous placement and is therefore
|
3564 |
+
// stale/incorrect
|
3565 |
+
|
3566 |
+
state.reset = false;
|
3567 |
+
state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
|
3568 |
+
// is filled with the initial data specified by the modifier. This means
|
3569 |
+
// it doesn't persist and is fresh on each update.
|
3570 |
+
// To ensure persistent data, use `${name}#persistent`
|
3571 |
+
|
3572 |
+
state.orderedModifiers.forEach(function (modifier) {
|
3573 |
+
return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
|
3574 |
+
});
|
3575 |
+
|
3576 |
+
for (var index = 0; index < state.orderedModifiers.length; index++) {
|
3577 |
+
|
3578 |
+
if (state.reset === true) {
|
3579 |
+
state.reset = false;
|
3580 |
+
index = -1;
|
3581 |
+
continue;
|
3582 |
+
}
|
3583 |
+
|
3584 |
+
var _state$orderedModifie = state.orderedModifiers[index],
|
3585 |
+
fn = _state$orderedModifie.fn,
|
3586 |
+
_state$orderedModifie2 = _state$orderedModifie.options,
|
3587 |
+
_options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
|
3588 |
+
name = _state$orderedModifie.name;
|
3589 |
+
|
3590 |
+
if (typeof fn === 'function') {
|
3591 |
+
state = fn({
|
3592 |
+
state: state,
|
3593 |
+
options: _options,
|
3594 |
+
name: name,
|
3595 |
+
instance: instance
|
3596 |
+
}) || state;
|
3597 |
+
}
|
3598 |
+
}
|
3599 |
+
},
|
3600 |
+
// Async and optimistically optimized update – it will not be executed if
|
3601 |
+
// not necessary (debounced to run at most once-per-tick)
|
3602 |
+
update: debounce(function () {
|
3603 |
+
return new Promise(function (resolve) {
|
3604 |
+
instance.forceUpdate();
|
3605 |
+
resolve(state);
|
3606 |
+
});
|
3607 |
+
}),
|
3608 |
+
destroy: function destroy() {
|
3609 |
+
cleanupModifierEffects();
|
3610 |
+
isDestroyed = true;
|
3611 |
+
}
|
3612 |
+
};
|
3613 |
+
|
3614 |
+
if (!areValidElements(reference, popper)) {
|
3615 |
+
|
3616 |
+
return instance;
|
3617 |
+
}
|
3618 |
+
|
3619 |
+
instance.setOptions(options).then(function (state) {
|
3620 |
+
if (!isDestroyed && options.onFirstUpdate) {
|
3621 |
+
options.onFirstUpdate(state);
|
3622 |
+
}
|
3623 |
+
}); // Modifiers have the ability to execute arbitrary code before the first
|
3624 |
+
// update cycle runs. They will be executed in the same order as the update
|
3625 |
+
// cycle. This is useful when a modifier adds some persistent data that
|
3626 |
+
// other modifiers need to use, but the modifier is run after the dependent
|
3627 |
+
// one.
|
3628 |
+
|
3629 |
+
function runModifierEffects() {
|
3630 |
+
state.orderedModifiers.forEach(function (_ref3) {
|
3631 |
+
var name = _ref3.name,
|
3632 |
+
_ref3$options = _ref3.options,
|
3633 |
+
options = _ref3$options === void 0 ? {} : _ref3$options,
|
3634 |
+
effect = _ref3.effect;
|
3635 |
+
|
3636 |
+
if (typeof effect === 'function') {
|
3637 |
+
var cleanupFn = effect({
|
3638 |
+
state: state,
|
3639 |
+
name: name,
|
3640 |
+
instance: instance,
|
3641 |
+
options: options
|
3642 |
+
});
|
3643 |
+
|
3644 |
+
var noopFn = function noopFn() {};
|
3645 |
+
|
3646 |
+
effectCleanupFns.push(cleanupFn || noopFn);
|
3647 |
+
}
|
3648 |
+
});
|
3649 |
+
}
|
3650 |
+
|
3651 |
+
function cleanupModifierEffects() {
|
3652 |
+
effectCleanupFns.forEach(function (fn) {
|
3653 |
+
return fn();
|
3654 |
+
});
|
3655 |
+
effectCleanupFns = [];
|
3656 |
+
}
|
3657 |
+
|
3658 |
+
return instance;
|
3659 |
+
};
|
3660 |
+
}
|
3661 |
+
var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules
|
3662 |
+
|
3663 |
+
var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];
|
3664 |
+
var createPopper$1 = /*#__PURE__*/popperGenerator({
|
3665 |
+
defaultModifiers: defaultModifiers$1
|
3666 |
+
}); // eslint-disable-next-line import/no-unused-modules
|
3667 |
+
|
3668 |
+
var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];
|
3669 |
+
var createPopper = /*#__PURE__*/popperGenerator({
|
3670 |
+
defaultModifiers: defaultModifiers
|
3671 |
+
}); // eslint-disable-next-line import/no-unused-modules
|
3672 |
+
|
3673 |
+
const Popper = /*#__PURE__*/Object.freeze({
|
3674 |
+
__proto__: null,
|
3675 |
+
popperGenerator,
|
3676 |
+
detectOverflow,
|
3677 |
+
createPopperBase: createPopper$2,
|
3678 |
+
createPopper,
|
3679 |
+
createPopperLite: createPopper$1,
|
3680 |
+
top,
|
3681 |
+
bottom,
|
3682 |
+
right,
|
3683 |
+
left,
|
3684 |
+
auto,
|
3685 |
+
basePlacements,
|
3686 |
+
start,
|
3687 |
+
end,
|
3688 |
+
clippingParents,
|
3689 |
+
viewport,
|
3690 |
+
popper,
|
3691 |
+
reference,
|
3692 |
+
variationPlacements,
|
3693 |
+
placements,
|
3694 |
+
beforeRead,
|
3695 |
+
read,
|
3696 |
+
afterRead,
|
3697 |
+
beforeMain,
|
3698 |
+
main,
|
3699 |
+
afterMain,
|
3700 |
+
beforeWrite,
|
3701 |
+
write,
|
3702 |
+
afterWrite,
|
3703 |
+
modifierPhases,
|
3704 |
+
applyStyles: applyStyles$1,
|
3705 |
+
arrow: arrow$1,
|
3706 |
+
computeStyles: computeStyles$1,
|
3707 |
+
eventListeners,
|
3708 |
+
flip: flip$1,
|
3709 |
+
hide: hide$1,
|
3710 |
+
offset: offset$1,
|
3711 |
+
popperOffsets: popperOffsets$1,
|
3712 |
+
preventOverflow: preventOverflow$1
|
3713 |
+
});
|
3714 |
+
|
3715 |
+
/**
|
3716 |
+
* --------------------------------------------------------------------------
|
3717 |
+
* Bootstrap (v5.1.3): dropdown.js
|
3718 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
3719 |
+
* --------------------------------------------------------------------------
|
3720 |
+
*/
|
3721 |
+
/**
|
3722 |
+
* ------------------------------------------------------------------------
|
3723 |
+
* Constants
|
3724 |
+
* ------------------------------------------------------------------------
|
3725 |
+
*/
|
3726 |
+
|
3727 |
+
const NAME$9 = 'dropdown';
|
3728 |
+
const DATA_KEY$8 = 'bs.dropdown';
|
3729 |
+
const EVENT_KEY$8 = `.${DATA_KEY$8}`;
|
3730 |
+
const DATA_API_KEY$4 = '.data-api';
|
3731 |
+
const ESCAPE_KEY$2 = 'Escape';
|
3732 |
+
const SPACE_KEY = 'Space';
|
3733 |
+
const TAB_KEY$1 = 'Tab';
|
3734 |
+
const ARROW_UP_KEY = 'ArrowUp';
|
3735 |
+
const ARROW_DOWN_KEY = 'ArrowDown';
|
3736 |
+
const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button
|
3737 |
+
|
3738 |
+
const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);
|
3739 |
+
const EVENT_HIDE$4 = `hide${EVENT_KEY$8}`;
|
3740 |
+
const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$8}`;
|
3741 |
+
const EVENT_SHOW$4 = `show${EVENT_KEY$8}`;
|
3742 |
+
const EVENT_SHOWN$4 = `shown${EVENT_KEY$8}`;
|
3743 |
+
const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$8}${DATA_API_KEY$4}`;
|
3744 |
+
const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$8}${DATA_API_KEY$4}`;
|
3745 |
+
const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$8}${DATA_API_KEY$4}`;
|
3746 |
+
const CLASS_NAME_SHOW$6 = 'show';
|
3747 |
+
const CLASS_NAME_DROPUP = 'dropup';
|
3748 |
+
const CLASS_NAME_DROPEND = 'dropend';
|
3749 |
+
const CLASS_NAME_DROPSTART = 'dropstart';
|
3750 |
+
const CLASS_NAME_NAVBAR = 'navbar';
|
3751 |
+
const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]';
|
3752 |
+
const SELECTOR_MENU = '.dropdown-menu';
|
3753 |
+
const SELECTOR_NAVBAR_NAV = '.navbar-nav';
|
3754 |
+
const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
|
3755 |
+
const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';
|
3756 |
+
const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';
|
3757 |
+
const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';
|
3758 |
+
const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';
|
3759 |
+
const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';
|
3760 |
+
const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';
|
3761 |
+
const Default$8 = {
|
3762 |
+
offset: [0, 2],
|
3763 |
+
boundary: 'clippingParents',
|
3764 |
+
reference: 'toggle',
|
3765 |
+
display: 'dynamic',
|
3766 |
+
popperConfig: null,
|
3767 |
+
autoClose: true
|
3768 |
+
};
|
3769 |
+
const DefaultType$8 = {
|
3770 |
+
offset: '(array|string|function)',
|
3771 |
+
boundary: '(string|element)',
|
3772 |
+
reference: '(string|element|object)',
|
3773 |
+
display: 'string',
|
3774 |
+
popperConfig: '(null|object|function)',
|
3775 |
+
autoClose: '(boolean|string)'
|
3776 |
+
};
|
3777 |
+
/**
|
3778 |
+
* ------------------------------------------------------------------------
|
3779 |
+
* Class Definition
|
3780 |
+
* ------------------------------------------------------------------------
|
3781 |
+
*/
|
3782 |
+
|
3783 |
+
class Dropdown extends BaseComponent {
|
3784 |
+
constructor(element, config) {
|
3785 |
+
super(element);
|
3786 |
+
this._popper = null;
|
3787 |
+
this._config = this._getConfig(config);
|
3788 |
+
this._menu = this._getMenuElement();
|
3789 |
+
this._inNavbar = this._detectNavbar();
|
3790 |
+
} // Getters
|
3791 |
+
|
3792 |
+
|
3793 |
+
static get Default() {
|
3794 |
+
return Default$8;
|
3795 |
+
}
|
3796 |
+
|
3797 |
+
static get DefaultType() {
|
3798 |
+
return DefaultType$8;
|
3799 |
+
}
|
3800 |
+
|
3801 |
+
static get NAME() {
|
3802 |
+
return NAME$9;
|
3803 |
+
} // Public
|
3804 |
+
|
3805 |
+
|
3806 |
+
toggle() {
|
3807 |
+
return this._isShown() ? this.hide() : this.show();
|
3808 |
+
}
|
3809 |
+
|
3810 |
+
show() {
|
3811 |
+
if (isDisabled(this._element) || this._isShown(this._menu)) {
|
3812 |
+
return;
|
3813 |
+
}
|
3814 |
+
|
3815 |
+
const relatedTarget = {
|
3816 |
+
relatedTarget: this._element
|
3817 |
+
};
|
3818 |
+
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);
|
3819 |
+
|
3820 |
+
if (showEvent.defaultPrevented) {
|
3821 |
+
return;
|
3822 |
+
}
|
3823 |
+
|
3824 |
+
const parent = Dropdown.getParentFromElement(this._element); // Totally disable Popper for Dropdowns in Navbar
|
3825 |
+
|
3826 |
+
if (this._inNavbar) {
|
3827 |
+
Manipulator.setDataAttribute(this._menu, 'popper', 'none');
|
3828 |
+
} else {
|
3829 |
+
this._createPopper(parent);
|
3830 |
+
} // If this is a touch-enabled device we add extra
|
3831 |
+
// empty mouseover listeners to the body's immediate children;
|
3832 |
+
// only needed because of broken event delegation on iOS
|
3833 |
+
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
|
3834 |
+
|
3835 |
+
|
3836 |
+
if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {
|
3837 |
+
[].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));
|
3838 |
+
}
|
3839 |
+
|
3840 |
+
this._element.focus();
|
3841 |
+
|
3842 |
+
this._element.setAttribute('aria-expanded', true);
|
3843 |
+
|
3844 |
+
this._menu.classList.add(CLASS_NAME_SHOW$6);
|
3845 |
+
|
3846 |
+
this._element.classList.add(CLASS_NAME_SHOW$6);
|
3847 |
+
|
3848 |
+
EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);
|
3849 |
+
}
|
3850 |
+
|
3851 |
+
hide() {
|
3852 |
+
if (isDisabled(this._element) || !this._isShown(this._menu)) {
|
3853 |
+
return;
|
3854 |
+
}
|
3855 |
+
|
3856 |
+
const relatedTarget = {
|
3857 |
+
relatedTarget: this._element
|
3858 |
+
};
|
3859 |
+
|
3860 |
+
this._completeHide(relatedTarget);
|
3861 |
+
}
|
3862 |
+
|
3863 |
+
dispose() {
|
3864 |
+
if (this._popper) {
|
3865 |
+
this._popper.destroy();
|
3866 |
+
}
|
3867 |
+
|
3868 |
+
super.dispose();
|
3869 |
+
}
|
3870 |
+
|
3871 |
+
update() {
|
3872 |
+
this._inNavbar = this._detectNavbar();
|
3873 |
+
|
3874 |
+
if (this._popper) {
|
3875 |
+
this._popper.update();
|
3876 |
+
}
|
3877 |
+
} // Private
|
3878 |
+
|
3879 |
+
|
3880 |
+
_completeHide(relatedTarget) {
|
3881 |
+
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);
|
3882 |
+
|
3883 |
+
if (hideEvent.defaultPrevented) {
|
3884 |
+
return;
|
3885 |
+
} // If this is a touch-enabled device we remove the extra
|
3886 |
+
// empty mouseover listeners we added for iOS support
|
3887 |
+
|
3888 |
+
|
3889 |
+
if ('ontouchstart' in document.documentElement) {
|
3890 |
+
[].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));
|
3891 |
+
}
|
3892 |
+
|
3893 |
+
if (this._popper) {
|
3894 |
+
this._popper.destroy();
|
3895 |
+
}
|
3896 |
+
|
3897 |
+
this._menu.classList.remove(CLASS_NAME_SHOW$6);
|
3898 |
+
|
3899 |
+
this._element.classList.remove(CLASS_NAME_SHOW$6);
|
3900 |
+
|
3901 |
+
this._element.setAttribute('aria-expanded', 'false');
|
3902 |
+
|
3903 |
+
Manipulator.removeDataAttribute(this._menu, 'popper');
|
3904 |
+
EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);
|
3905 |
+
}
|
3906 |
+
|
3907 |
+
_getConfig(config) {
|
3908 |
+
config = { ...this.constructor.Default,
|
3909 |
+
...Manipulator.getDataAttributes(this._element),
|
3910 |
+
...config
|
3911 |
+
};
|
3912 |
+
typeCheckConfig(NAME$9, config, this.constructor.DefaultType);
|
3913 |
+
|
3914 |
+
if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
|
3915 |
+
// Popper virtual elements require a getBoundingClientRect method
|
3916 |
+
throw new TypeError(`${NAME$9.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
|
3917 |
+
}
|
3918 |
+
|
3919 |
+
return config;
|
3920 |
+
}
|
3921 |
+
|
3922 |
+
_createPopper(parent) {
|
3923 |
+
if (typeof Popper === 'undefined') {
|
3924 |
+
throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
|
3925 |
+
}
|
3926 |
+
|
3927 |
+
let referenceElement = this._element;
|
3928 |
+
|
3929 |
+
if (this._config.reference === 'parent') {
|
3930 |
+
referenceElement = parent;
|
3931 |
+
} else if (isElement$1(this._config.reference)) {
|
3932 |
+
referenceElement = getElement(this._config.reference);
|
3933 |
+
} else if (typeof this._config.reference === 'object') {
|
3934 |
+
referenceElement = this._config.reference;
|
3935 |
+
}
|
3936 |
+
|
3937 |
+
const popperConfig = this._getPopperConfig();
|
3938 |
+
|
3939 |
+
const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);
|
3940 |
+
this._popper = createPopper(referenceElement, this._menu, popperConfig);
|
3941 |
+
|
3942 |
+
if (isDisplayStatic) {
|
3943 |
+
Manipulator.setDataAttribute(this._menu, 'popper', 'static');
|
3944 |
+
}
|
3945 |
+
}
|
3946 |
+
|
3947 |
+
_isShown(element = this._element) {
|
3948 |
+
return element.classList.contains(CLASS_NAME_SHOW$6);
|
3949 |
+
}
|
3950 |
+
|
3951 |
+
_getMenuElement() {
|
3952 |
+
return SelectorEngine.next(this._element, SELECTOR_MENU)[0];
|
3953 |
+
}
|
3954 |
+
|
3955 |
+
_getPlacement() {
|
3956 |
+
const parentDropdown = this._element.parentNode;
|
3957 |
+
|
3958 |
+
if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
|
3959 |
+
return PLACEMENT_RIGHT;
|
3960 |
+
}
|
3961 |
+
|
3962 |
+
if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
|
3963 |
+
return PLACEMENT_LEFT;
|
3964 |
+
} // We need to trim the value because custom properties can also include spaces
|
3965 |
+
|
3966 |
+
|
3967 |
+
const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
|
3968 |
+
|
3969 |
+
if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
|
3970 |
+
return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
|
3971 |
+
}
|
3972 |
+
|
3973 |
+
return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
|
3974 |
+
}
|
3975 |
+
|
3976 |
+
_detectNavbar() {
|
3977 |
+
return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;
|
3978 |
+
}
|
3979 |
+
|
3980 |
+
_getOffset() {
|
3981 |
+
const {
|
3982 |
+
offset
|
3983 |
+
} = this._config;
|
3984 |
+
|
3985 |
+
if (typeof offset === 'string') {
|
3986 |
+
return offset.split(',').map(val => Number.parseInt(val, 10));
|
3987 |
+
}
|
3988 |
+
|
3989 |
+
if (typeof offset === 'function') {
|
3990 |
+
return popperData => offset(popperData, this._element);
|
3991 |
+
}
|
3992 |
+
|
3993 |
+
return offset;
|
3994 |
+
}
|
3995 |
+
|
3996 |
+
_getPopperConfig() {
|
3997 |
+
const defaultBsPopperConfig = {
|
3998 |
+
placement: this._getPlacement(),
|
3999 |
+
modifiers: [{
|
4000 |
+
name: 'preventOverflow',
|
4001 |
+
options: {
|
4002 |
+
boundary: this._config.boundary
|
4003 |
+
}
|
4004 |
+
}, {
|
4005 |
+
name: 'offset',
|
4006 |
+
options: {
|
4007 |
+
offset: this._getOffset()
|
4008 |
+
}
|
4009 |
+
}]
|
4010 |
+
}; // Disable Popper if we have a static display
|
4011 |
+
|
4012 |
+
if (this._config.display === 'static') {
|
4013 |
+
defaultBsPopperConfig.modifiers = [{
|
4014 |
+
name: 'applyStyles',
|
4015 |
+
enabled: false
|
4016 |
+
}];
|
4017 |
+
}
|
4018 |
+
|
4019 |
+
return { ...defaultBsPopperConfig,
|
4020 |
+
...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
|
4021 |
+
};
|
4022 |
+
}
|
4023 |
+
|
4024 |
+
_selectMenuItem({
|
4025 |
+
key,
|
4026 |
+
target
|
4027 |
+
}) {
|
4028 |
+
const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);
|
4029 |
+
|
4030 |
+
if (!items.length) {
|
4031 |
+
return;
|
4032 |
+
} // if target isn't included in items (e.g. when expanding the dropdown)
|
4033 |
+
// allow cycling to get the last item in case key equals ARROW_UP_KEY
|
4034 |
+
|
4035 |
+
|
4036 |
+
getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();
|
4037 |
+
} // Static
|
4038 |
+
|
4039 |
+
|
4040 |
+
static jQueryInterface(config) {
|
4041 |
+
return this.each(function () {
|
4042 |
+
const data = Dropdown.getOrCreateInstance(this, config);
|
4043 |
+
|
4044 |
+
if (typeof config !== 'string') {
|
4045 |
+
return;
|
4046 |
+
}
|
4047 |
+
|
4048 |
+
if (typeof data[config] === 'undefined') {
|
4049 |
+
throw new TypeError(`No method named "${config}"`);
|
4050 |
+
}
|
4051 |
+
|
4052 |
+
data[config]();
|
4053 |
+
});
|
4054 |
+
}
|
4055 |
+
|
4056 |
+
static clearMenus(event) {
|
4057 |
+
if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1)) {
|
4058 |
+
return;
|
4059 |
+
}
|
4060 |
+
|
4061 |
+
const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);
|
4062 |
+
|
4063 |
+
for (let i = 0, len = toggles.length; i < len; i++) {
|
4064 |
+
const context = Dropdown.getInstance(toggles[i]);
|
4065 |
+
|
4066 |
+
if (!context || context._config.autoClose === false) {
|
4067 |
+
continue;
|
4068 |
+
}
|
4069 |
+
|
4070 |
+
if (!context._isShown()) {
|
4071 |
+
continue;
|
4072 |
+
}
|
4073 |
+
|
4074 |
+
const relatedTarget = {
|
4075 |
+
relatedTarget: context._element
|
4076 |
+
};
|
4077 |
+
|
4078 |
+
if (event) {
|
4079 |
+
const composedPath = event.composedPath();
|
4080 |
+
const isMenuTarget = composedPath.includes(context._menu);
|
4081 |
+
|
4082 |
+
if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
|
4083 |
+
continue;
|
4084 |
+
} // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
|
4085 |
+
|
4086 |
+
|
4087 |
+
if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {
|
4088 |
+
continue;
|
4089 |
+
}
|
4090 |
+
|
4091 |
+
if (event.type === 'click') {
|
4092 |
+
relatedTarget.clickEvent = event;
|
4093 |
+
}
|
4094 |
+
}
|
4095 |
+
|
4096 |
+
context._completeHide(relatedTarget);
|
4097 |
+
}
|
4098 |
+
}
|
4099 |
+
|
4100 |
+
static getParentFromElement(element) {
|
4101 |
+
return getElementFromSelector(element) || element.parentNode;
|
4102 |
+
}
|
4103 |
+
|
4104 |
+
static dataApiKeydownHandler(event) {
|
4105 |
+
// If not input/textarea:
|
4106 |
+
// - And not a key in REGEXP_KEYDOWN => not a dropdown command
|
4107 |
+
// If input/textarea:
|
4108 |
+
// - If space key => not a dropdown command
|
4109 |
+
// - If key is other than escape
|
4110 |
+
// - If key is not up or down => not a dropdown command
|
4111 |
+
// - If trigger inside the menu => not a dropdown command
|
4112 |
+
if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {
|
4113 |
+
return;
|
4114 |
+
}
|
4115 |
+
|
4116 |
+
const isActive = this.classList.contains(CLASS_NAME_SHOW$6);
|
4117 |
+
|
4118 |
+
if (!isActive && event.key === ESCAPE_KEY$2) {
|
4119 |
+
return;
|
4120 |
+
}
|
4121 |
+
|
4122 |
+
event.preventDefault();
|
4123 |
+
event.stopPropagation();
|
4124 |
+
|
4125 |
+
if (isDisabled(this)) {
|
4126 |
+
return;
|
4127 |
+
}
|
4128 |
+
|
4129 |
+
const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];
|
4130 |
+
const instance = Dropdown.getOrCreateInstance(getToggleButton);
|
4131 |
+
|
4132 |
+
if (event.key === ESCAPE_KEY$2) {
|
4133 |
+
instance.hide();
|
4134 |
+
return;
|
4135 |
+
}
|
4136 |
+
|
4137 |
+
if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {
|
4138 |
+
if (!isActive) {
|
4139 |
+
instance.show();
|
4140 |
+
}
|
4141 |
+
|
4142 |
+
instance._selectMenuItem(event);
|
4143 |
+
|
4144 |
+
return;
|
4145 |
+
}
|
4146 |
+
|
4147 |
+
if (!isActive || event.key === SPACE_KEY) {
|
4148 |
+
Dropdown.clearMenus();
|
4149 |
+
}
|
4150 |
+
}
|
4151 |
+
|
4152 |
+
}
|
4153 |
+
/**
|
4154 |
+
* ------------------------------------------------------------------------
|
4155 |
+
* Data Api implementation
|
4156 |
+
* ------------------------------------------------------------------------
|
4157 |
+
*/
|
4158 |
+
|
4159 |
+
|
4160 |
+
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);
|
4161 |
+
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
|
4162 |
+
EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);
|
4163 |
+
EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
|
4164 |
+
EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {
|
4165 |
+
event.preventDefault();
|
4166 |
+
Dropdown.getOrCreateInstance(this).toggle();
|
4167 |
+
});
|
4168 |
+
/**
|
4169 |
+
* ------------------------------------------------------------------------
|
4170 |
+
* jQuery
|
4171 |
+
* ------------------------------------------------------------------------
|
4172 |
+
* add .Dropdown to jQuery only if jQuery is present
|
4173 |
+
*/
|
4174 |
+
|
4175 |
+
defineJQueryPlugin(Dropdown);
|
4176 |
+
|
4177 |
+
/**
|
4178 |
+
* --------------------------------------------------------------------------
|
4179 |
+
* Bootstrap (v5.1.3): util/scrollBar.js
|
4180 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
4181 |
+
* --------------------------------------------------------------------------
|
4182 |
+
*/
|
4183 |
+
const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
|
4184 |
+
const SELECTOR_STICKY_CONTENT = '.sticky-top';
|
4185 |
+
|
4186 |
+
class ScrollBarHelper {
|
4187 |
+
constructor() {
|
4188 |
+
this._element = document.body;
|
4189 |
+
}
|
4190 |
+
|
4191 |
+
getWidth() {
|
4192 |
+
// https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
|
4193 |
+
const documentWidth = document.documentElement.clientWidth;
|
4194 |
+
return Math.abs(window.innerWidth - documentWidth);
|
4195 |
+
}
|
4196 |
+
|
4197 |
+
hide() {
|
4198 |
+
const width = this.getWidth();
|
4199 |
+
|
4200 |
+
this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width
|
4201 |
+
|
4202 |
+
|
4203 |
+
this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
|
4204 |
+
|
4205 |
+
|
4206 |
+
this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);
|
4207 |
+
|
4208 |
+
this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);
|
4209 |
+
}
|
4210 |
+
|
4211 |
+
_disableOverFlow() {
|
4212 |
+
this._saveInitialAttribute(this._element, 'overflow');
|
4213 |
+
|
4214 |
+
this._element.style.overflow = 'hidden';
|
4215 |
+
}
|
4216 |
+
|
4217 |
+
_setElementAttributes(selector, styleProp, callback) {
|
4218 |
+
const scrollbarWidth = this.getWidth();
|
4219 |
+
|
4220 |
+
const manipulationCallBack = element => {
|
4221 |
+
if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
|
4222 |
+
return;
|
4223 |
+
}
|
4224 |
+
|
4225 |
+
this._saveInitialAttribute(element, styleProp);
|
4226 |
+
|
4227 |
+
const calculatedValue = window.getComputedStyle(element)[styleProp];
|
4228 |
+
element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;
|
4229 |
+
};
|
4230 |
+
|
4231 |
+
this._applyManipulationCallback(selector, manipulationCallBack);
|
4232 |
+
}
|
4233 |
+
|
4234 |
+
reset() {
|
4235 |
+
this._resetElementAttributes(this._element, 'overflow');
|
4236 |
+
|
4237 |
+
this._resetElementAttributes(this._element, 'paddingRight');
|
4238 |
+
|
4239 |
+
this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');
|
4240 |
+
|
4241 |
+
this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');
|
4242 |
+
}
|
4243 |
+
|
4244 |
+
_saveInitialAttribute(element, styleProp) {
|
4245 |
+
const actualValue = element.style[styleProp];
|
4246 |
+
|
4247 |
+
if (actualValue) {
|
4248 |
+
Manipulator.setDataAttribute(element, styleProp, actualValue);
|
4249 |
+
}
|
4250 |
+
}
|
4251 |
+
|
4252 |
+
_resetElementAttributes(selector, styleProp) {
|
4253 |
+
const manipulationCallBack = element => {
|
4254 |
+
const value = Manipulator.getDataAttribute(element, styleProp);
|
4255 |
+
|
4256 |
+
if (typeof value === 'undefined') {
|
4257 |
+
element.style.removeProperty(styleProp);
|
4258 |
+
} else {
|
4259 |
+
Manipulator.removeDataAttribute(element, styleProp);
|
4260 |
+
element.style[styleProp] = value;
|
4261 |
+
}
|
4262 |
+
};
|
4263 |
+
|
4264 |
+
this._applyManipulationCallback(selector, manipulationCallBack);
|
4265 |
+
}
|
4266 |
+
|
4267 |
+
_applyManipulationCallback(selector, callBack) {
|
4268 |
+
if (isElement$1(selector)) {
|
4269 |
+
callBack(selector);
|
4270 |
+
} else {
|
4271 |
+
SelectorEngine.find(selector, this._element).forEach(callBack);
|
4272 |
+
}
|
4273 |
+
}
|
4274 |
+
|
4275 |
+
isOverflowing() {
|
4276 |
+
return this.getWidth() > 0;
|
4277 |
+
}
|
4278 |
+
|
4279 |
+
}
|
4280 |
+
|
4281 |
+
/**
|
4282 |
+
* --------------------------------------------------------------------------
|
4283 |
+
* Bootstrap (v5.1.3): util/backdrop.js
|
4284 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
4285 |
+
* --------------------------------------------------------------------------
|
4286 |
+
*/
|
4287 |
+
const Default$7 = {
|
4288 |
+
className: 'modal-backdrop',
|
4289 |
+
isVisible: true,
|
4290 |
+
// if false, we use the backdrop helper without adding any element to the dom
|
4291 |
+
isAnimated: false,
|
4292 |
+
rootElement: 'body',
|
4293 |
+
// give the choice to place backdrop under different elements
|
4294 |
+
clickCallback: null
|
4295 |
+
};
|
4296 |
+
const DefaultType$7 = {
|
4297 |
+
className: 'string',
|
4298 |
+
isVisible: 'boolean',
|
4299 |
+
isAnimated: 'boolean',
|
4300 |
+
rootElement: '(element|string)',
|
4301 |
+
clickCallback: '(function|null)'
|
4302 |
+
};
|
4303 |
+
const NAME$8 = 'backdrop';
|
4304 |
+
const CLASS_NAME_FADE$4 = 'fade';
|
4305 |
+
const CLASS_NAME_SHOW$5 = 'show';
|
4306 |
+
const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$8}`;
|
4307 |
+
|
4308 |
+
class Backdrop {
|
4309 |
+
constructor(config) {
|
4310 |
+
this._config = this._getConfig(config);
|
4311 |
+
this._isAppended = false;
|
4312 |
+
this._element = null;
|
4313 |
+
}
|
4314 |
+
|
4315 |
+
show(callback) {
|
4316 |
+
if (!this._config.isVisible) {
|
4317 |
+
execute(callback);
|
4318 |
+
return;
|
4319 |
+
}
|
4320 |
+
|
4321 |
+
this._append();
|
4322 |
+
|
4323 |
+
if (this._config.isAnimated) {
|
4324 |
+
reflow(this._getElement());
|
4325 |
+
}
|
4326 |
+
|
4327 |
+
this._getElement().classList.add(CLASS_NAME_SHOW$5);
|
4328 |
+
|
4329 |
+
this._emulateAnimation(() => {
|
4330 |
+
execute(callback);
|
4331 |
+
});
|
4332 |
+
}
|
4333 |
+
|
4334 |
+
hide(callback) {
|
4335 |
+
if (!this._config.isVisible) {
|
4336 |
+
execute(callback);
|
4337 |
+
return;
|
4338 |
+
}
|
4339 |
+
|
4340 |
+
this._getElement().classList.remove(CLASS_NAME_SHOW$5);
|
4341 |
+
|
4342 |
+
this._emulateAnimation(() => {
|
4343 |
+
this.dispose();
|
4344 |
+
execute(callback);
|
4345 |
+
});
|
4346 |
+
} // Private
|
4347 |
+
|
4348 |
+
|
4349 |
+
_getElement() {
|
4350 |
+
if (!this._element) {
|
4351 |
+
const backdrop = document.createElement('div');
|
4352 |
+
backdrop.className = this._config.className;
|
4353 |
+
|
4354 |
+
if (this._config.isAnimated) {
|
4355 |
+
backdrop.classList.add(CLASS_NAME_FADE$4);
|
4356 |
+
}
|
4357 |
+
|
4358 |
+
this._element = backdrop;
|
4359 |
+
}
|
4360 |
+
|
4361 |
+
return this._element;
|
4362 |
+
}
|
4363 |
+
|
4364 |
+
_getConfig(config) {
|
4365 |
+
config = { ...Default$7,
|
4366 |
+
...(typeof config === 'object' ? config : {})
|
4367 |
+
}; // use getElement() with the default "body" to get a fresh Element on each instantiation
|
4368 |
+
|
4369 |
+
config.rootElement = getElement(config.rootElement);
|
4370 |
+
typeCheckConfig(NAME$8, config, DefaultType$7);
|
4371 |
+
return config;
|
4372 |
+
}
|
4373 |
+
|
4374 |
+
_append() {
|
4375 |
+
if (this._isAppended) {
|
4376 |
+
return;
|
4377 |
+
}
|
4378 |
+
|
4379 |
+
this._config.rootElement.append(this._getElement());
|
4380 |
+
|
4381 |
+
EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {
|
4382 |
+
execute(this._config.clickCallback);
|
4383 |
+
});
|
4384 |
+
this._isAppended = true;
|
4385 |
+
}
|
4386 |
+
|
4387 |
+
dispose() {
|
4388 |
+
if (!this._isAppended) {
|
4389 |
+
return;
|
4390 |
+
}
|
4391 |
+
|
4392 |
+
EventHandler.off(this._element, EVENT_MOUSEDOWN);
|
4393 |
+
|
4394 |
+
this._element.remove();
|
4395 |
+
|
4396 |
+
this._isAppended = false;
|
4397 |
+
}
|
4398 |
+
|
4399 |
+
_emulateAnimation(callback) {
|
4400 |
+
executeAfterTransition(callback, this._getElement(), this._config.isAnimated);
|
4401 |
+
}
|
4402 |
+
|
4403 |
+
}
|
4404 |
+
|
4405 |
+
/**
|
4406 |
+
* --------------------------------------------------------------------------
|
4407 |
+
* Bootstrap (v5.1.3): util/focustrap.js
|
4408 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
4409 |
+
* --------------------------------------------------------------------------
|
4410 |
+
*/
|
4411 |
+
const Default$6 = {
|
4412 |
+
trapElement: null,
|
4413 |
+
// The element to trap focus inside of
|
4414 |
+
autofocus: true
|
4415 |
+
};
|
4416 |
+
const DefaultType$6 = {
|
4417 |
+
trapElement: 'element',
|
4418 |
+
autofocus: 'boolean'
|
4419 |
+
};
|
4420 |
+
const NAME$7 = 'focustrap';
|
4421 |
+
const DATA_KEY$7 = 'bs.focustrap';
|
4422 |
+
const EVENT_KEY$7 = `.${DATA_KEY$7}`;
|
4423 |
+
const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$7}`;
|
4424 |
+
const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$7}`;
|
4425 |
+
const TAB_KEY = 'Tab';
|
4426 |
+
const TAB_NAV_FORWARD = 'forward';
|
4427 |
+
const TAB_NAV_BACKWARD = 'backward';
|
4428 |
+
|
4429 |
+
class FocusTrap {
|
4430 |
+
constructor(config) {
|
4431 |
+
this._config = this._getConfig(config);
|
4432 |
+
this._isActive = false;
|
4433 |
+
this._lastTabNavDirection = null;
|
4434 |
+
}
|
4435 |
+
|
4436 |
+
activate() {
|
4437 |
+
const {
|
4438 |
+
trapElement,
|
4439 |
+
autofocus
|
4440 |
+
} = this._config;
|
4441 |
+
|
4442 |
+
if (this._isActive) {
|
4443 |
+
return;
|
4444 |
+
}
|
4445 |
+
|
4446 |
+
if (autofocus) {
|
4447 |
+
trapElement.focus();
|
4448 |
+
}
|
4449 |
+
|
4450 |
+
EventHandler.off(document, EVENT_KEY$7); // guard against infinite focus loop
|
4451 |
+
|
4452 |
+
EventHandler.on(document, EVENT_FOCUSIN$1, event => this._handleFocusin(event));
|
4453 |
+
EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
|
4454 |
+
this._isActive = true;
|
4455 |
+
}
|
4456 |
+
|
4457 |
+
deactivate() {
|
4458 |
+
if (!this._isActive) {
|
4459 |
+
return;
|
4460 |
+
}
|
4461 |
+
|
4462 |
+
this._isActive = false;
|
4463 |
+
EventHandler.off(document, EVENT_KEY$7);
|
4464 |
+
} // Private
|
4465 |
+
|
4466 |
+
|
4467 |
+
_handleFocusin(event) {
|
4468 |
+
const {
|
4469 |
+
target
|
4470 |
+
} = event;
|
4471 |
+
const {
|
4472 |
+
trapElement
|
4473 |
+
} = this._config;
|
4474 |
+
|
4475 |
+
if (target === document || target === trapElement || trapElement.contains(target)) {
|
4476 |
+
return;
|
4477 |
+
}
|
4478 |
+
|
4479 |
+
const elements = SelectorEngine.focusableChildren(trapElement);
|
4480 |
+
|
4481 |
+
if (elements.length === 0) {
|
4482 |
+
trapElement.focus();
|
4483 |
+
} else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
|
4484 |
+
elements[elements.length - 1].focus();
|
4485 |
+
} else {
|
4486 |
+
elements[0].focus();
|
4487 |
+
}
|
4488 |
+
}
|
4489 |
+
|
4490 |
+
_handleKeydown(event) {
|
4491 |
+
if (event.key !== TAB_KEY) {
|
4492 |
+
return;
|
4493 |
+
}
|
4494 |
+
|
4495 |
+
this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
|
4496 |
+
}
|
4497 |
+
|
4498 |
+
_getConfig(config) {
|
4499 |
+
config = { ...Default$6,
|
4500 |
+
...(typeof config === 'object' ? config : {})
|
4501 |
+
};
|
4502 |
+
typeCheckConfig(NAME$7, config, DefaultType$6);
|
4503 |
+
return config;
|
4504 |
+
}
|
4505 |
+
|
4506 |
+
}
|
4507 |
+
|
4508 |
+
/**
|
4509 |
+
* --------------------------------------------------------------------------
|
4510 |
+
* Bootstrap (v5.1.3): modal.js
|
4511 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
4512 |
+
* --------------------------------------------------------------------------
|
4513 |
+
*/
|
4514 |
+
/**
|
4515 |
+
* ------------------------------------------------------------------------
|
4516 |
+
* Constants
|
4517 |
+
* ------------------------------------------------------------------------
|
4518 |
+
*/
|
4519 |
+
|
4520 |
+
const NAME$6 = 'modal';
|
4521 |
+
const DATA_KEY$6 = 'bs.modal';
|
4522 |
+
const EVENT_KEY$6 = `.${DATA_KEY$6}`;
|
4523 |
+
const DATA_API_KEY$3 = '.data-api';
|
4524 |
+
const ESCAPE_KEY$1 = 'Escape';
|
4525 |
+
const Default$5 = {
|
4526 |
+
backdrop: true,
|
4527 |
+
keyboard: true,
|
4528 |
+
focus: true
|
4529 |
+
};
|
4530 |
+
const DefaultType$5 = {
|
4531 |
+
backdrop: '(boolean|string)',
|
4532 |
+
keyboard: 'boolean',
|
4533 |
+
focus: 'boolean'
|
4534 |
+
};
|
4535 |
+
const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;
|
4536 |
+
const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;
|
4537 |
+
const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;
|
4538 |
+
const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;
|
4539 |
+
const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;
|
4540 |
+
const EVENT_RESIZE = `resize${EVENT_KEY$6}`;
|
4541 |
+
const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$6}`;
|
4542 |
+
const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;
|
4543 |
+
const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;
|
4544 |
+
const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;
|
4545 |
+
const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;
|
4546 |
+
const CLASS_NAME_OPEN = 'modal-open';
|
4547 |
+
const CLASS_NAME_FADE$3 = 'fade';
|
4548 |
+
const CLASS_NAME_SHOW$4 = 'show';
|
4549 |
+
const CLASS_NAME_STATIC = 'modal-static';
|
4550 |
+
const OPEN_SELECTOR$1 = '.modal.show';
|
4551 |
+
const SELECTOR_DIALOG = '.modal-dialog';
|
4552 |
+
const SELECTOR_MODAL_BODY = '.modal-body';
|
4553 |
+
const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]';
|
4554 |
+
/**
|
4555 |
+
* ------------------------------------------------------------------------
|
4556 |
+
* Class Definition
|
4557 |
+
* ------------------------------------------------------------------------
|
4558 |
+
*/
|
4559 |
+
|
4560 |
+
class Modal extends BaseComponent {
|
4561 |
+
constructor(element, config) {
|
4562 |
+
super(element);
|
4563 |
+
this._config = this._getConfig(config);
|
4564 |
+
this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);
|
4565 |
+
this._backdrop = this._initializeBackDrop();
|
4566 |
+
this._focustrap = this._initializeFocusTrap();
|
4567 |
+
this._isShown = false;
|
4568 |
+
this._ignoreBackdropClick = false;
|
4569 |
+
this._isTransitioning = false;
|
4570 |
+
this._scrollBar = new ScrollBarHelper();
|
4571 |
+
} // Getters
|
4572 |
+
|
4573 |
+
|
4574 |
+
static get Default() {
|
4575 |
+
return Default$5;
|
4576 |
+
}
|
4577 |
+
|
4578 |
+
static get NAME() {
|
4579 |
+
return NAME$6;
|
4580 |
+
} // Public
|
4581 |
+
|
4582 |
+
|
4583 |
+
toggle(relatedTarget) {
|
4584 |
+
return this._isShown ? this.hide() : this.show(relatedTarget);
|
4585 |
+
}
|
4586 |
+
|
4587 |
+
show(relatedTarget) {
|
4588 |
+
if (this._isShown || this._isTransitioning) {
|
4589 |
+
return;
|
4590 |
+
}
|
4591 |
+
|
4592 |
+
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {
|
4593 |
+
relatedTarget
|
4594 |
+
});
|
4595 |
+
|
4596 |
+
if (showEvent.defaultPrevented) {
|
4597 |
+
return;
|
4598 |
+
}
|
4599 |
+
|
4600 |
+
this._isShown = true;
|
4601 |
+
|
4602 |
+
if (this._isAnimated()) {
|
4603 |
+
this._isTransitioning = true;
|
4604 |
+
}
|
4605 |
+
|
4606 |
+
this._scrollBar.hide();
|
4607 |
+
|
4608 |
+
document.body.classList.add(CLASS_NAME_OPEN);
|
4609 |
+
|
4610 |
+
this._adjustDialog();
|
4611 |
+
|
4612 |
+
this._setEscapeEvent();
|
4613 |
+
|
4614 |
+
this._setResizeEvent();
|
4615 |
+
|
4616 |
+
EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {
|
4617 |
+
EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {
|
4618 |
+
if (event.target === this._element) {
|
4619 |
+
this._ignoreBackdropClick = true;
|
4620 |
+
}
|
4621 |
+
});
|
4622 |
+
});
|
4623 |
+
|
4624 |
+
this._showBackdrop(() => this._showElement(relatedTarget));
|
4625 |
+
}
|
4626 |
+
|
4627 |
+
hide() {
|
4628 |
+
if (!this._isShown || this._isTransitioning) {
|
4629 |
+
return;
|
4630 |
+
}
|
4631 |
+
|
4632 |
+
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);
|
4633 |
+
|
4634 |
+
if (hideEvent.defaultPrevented) {
|
4635 |
+
return;
|
4636 |
+
}
|
4637 |
+
|
4638 |
+
this._isShown = false;
|
4639 |
+
|
4640 |
+
const isAnimated = this._isAnimated();
|
4641 |
+
|
4642 |
+
if (isAnimated) {
|
4643 |
+
this._isTransitioning = true;
|
4644 |
+
}
|
4645 |
+
|
4646 |
+
this._setEscapeEvent();
|
4647 |
+
|
4648 |
+
this._setResizeEvent();
|
4649 |
+
|
4650 |
+
this._focustrap.deactivate();
|
4651 |
+
|
4652 |
+
this._element.classList.remove(CLASS_NAME_SHOW$4);
|
4653 |
+
|
4654 |
+
EventHandler.off(this._element, EVENT_CLICK_DISMISS);
|
4655 |
+
EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);
|
4656 |
+
|
4657 |
+
this._queueCallback(() => this._hideModal(), this._element, isAnimated);
|
4658 |
+
}
|
4659 |
+
|
4660 |
+
dispose() {
|
4661 |
+
[window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));
|
4662 |
+
|
4663 |
+
this._backdrop.dispose();
|
4664 |
+
|
4665 |
+
this._focustrap.deactivate();
|
4666 |
+
|
4667 |
+
super.dispose();
|
4668 |
+
}
|
4669 |
+
|
4670 |
+
handleUpdate() {
|
4671 |
+
this._adjustDialog();
|
4672 |
+
} // Private
|
4673 |
+
|
4674 |
+
|
4675 |
+
_initializeBackDrop() {
|
4676 |
+
return new Backdrop({
|
4677 |
+
isVisible: Boolean(this._config.backdrop),
|
4678 |
+
// 'static' option will be translated to true, and booleans will keep their value
|
4679 |
+
isAnimated: this._isAnimated()
|
4680 |
+
});
|
4681 |
+
}
|
4682 |
+
|
4683 |
+
_initializeFocusTrap() {
|
4684 |
+
return new FocusTrap({
|
4685 |
+
trapElement: this._element
|
4686 |
+
});
|
4687 |
+
}
|
4688 |
+
|
4689 |
+
_getConfig(config) {
|
4690 |
+
config = { ...Default$5,
|
4691 |
+
...Manipulator.getDataAttributes(this._element),
|
4692 |
+
...(typeof config === 'object' ? config : {})
|
4693 |
+
};
|
4694 |
+
typeCheckConfig(NAME$6, config, DefaultType$5);
|
4695 |
+
return config;
|
4696 |
+
}
|
4697 |
+
|
4698 |
+
_showElement(relatedTarget) {
|
4699 |
+
const isAnimated = this._isAnimated();
|
4700 |
+
|
4701 |
+
const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
|
4702 |
+
|
4703 |
+
if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
|
4704 |
+
// Don't move modal's DOM position
|
4705 |
+
document.body.append(this._element);
|
4706 |
+
}
|
4707 |
+
|
4708 |
+
this._element.style.display = 'block';
|
4709 |
+
|
4710 |
+
this._element.removeAttribute('aria-hidden');
|
4711 |
+
|
4712 |
+
this._element.setAttribute('aria-modal', true);
|
4713 |
+
|
4714 |
+
this._element.setAttribute('role', 'dialog');
|
4715 |
+
|
4716 |
+
this._element.scrollTop = 0;
|
4717 |
+
|
4718 |
+
if (modalBody) {
|
4719 |
+
modalBody.scrollTop = 0;
|
4720 |
+
}
|
4721 |
+
|
4722 |
+
if (isAnimated) {
|
4723 |
+
reflow(this._element);
|
4724 |
+
}
|
4725 |
+
|
4726 |
+
this._element.classList.add(CLASS_NAME_SHOW$4);
|
4727 |
+
|
4728 |
+
const transitionComplete = () => {
|
4729 |
+
if (this._config.focus) {
|
4730 |
+
this._focustrap.activate();
|
4731 |
+
}
|
4732 |
+
|
4733 |
+
this._isTransitioning = false;
|
4734 |
+
EventHandler.trigger(this._element, EVENT_SHOWN$3, {
|
4735 |
+
relatedTarget
|
4736 |
+
});
|
4737 |
+
};
|
4738 |
+
|
4739 |
+
this._queueCallback(transitionComplete, this._dialog, isAnimated);
|
4740 |
+
}
|
4741 |
+
|
4742 |
+
_setEscapeEvent() {
|
4743 |
+
if (this._isShown) {
|
4744 |
+
EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {
|
4745 |
+
if (this._config.keyboard && event.key === ESCAPE_KEY$1) {
|
4746 |
+
event.preventDefault();
|
4747 |
+
this.hide();
|
4748 |
+
} else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {
|
4749 |
+
this._triggerBackdropTransition();
|
4750 |
+
}
|
4751 |
+
});
|
4752 |
+
} else {
|
4753 |
+
EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);
|
4754 |
+
}
|
4755 |
+
}
|
4756 |
+
|
4757 |
+
_setResizeEvent() {
|
4758 |
+
if (this._isShown) {
|
4759 |
+
EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());
|
4760 |
+
} else {
|
4761 |
+
EventHandler.off(window, EVENT_RESIZE);
|
4762 |
+
}
|
4763 |
+
}
|
4764 |
+
|
4765 |
+
_hideModal() {
|
4766 |
+
this._element.style.display = 'none';
|
4767 |
+
|
4768 |
+
this._element.setAttribute('aria-hidden', true);
|
4769 |
+
|
4770 |
+
this._element.removeAttribute('aria-modal');
|
4771 |
+
|
4772 |
+
this._element.removeAttribute('role');
|
4773 |
+
|
4774 |
+
this._isTransitioning = false;
|
4775 |
+
|
4776 |
+
this._backdrop.hide(() => {
|
4777 |
+
document.body.classList.remove(CLASS_NAME_OPEN);
|
4778 |
+
|
4779 |
+
this._resetAdjustments();
|
4780 |
+
|
4781 |
+
this._scrollBar.reset();
|
4782 |
+
|
4783 |
+
EventHandler.trigger(this._element, EVENT_HIDDEN$3);
|
4784 |
+
});
|
4785 |
+
}
|
4786 |
+
|
4787 |
+
_showBackdrop(callback) {
|
4788 |
+
EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => {
|
4789 |
+
if (this._ignoreBackdropClick) {
|
4790 |
+
this._ignoreBackdropClick = false;
|
4791 |
+
return;
|
4792 |
+
}
|
4793 |
+
|
4794 |
+
if (event.target !== event.currentTarget) {
|
4795 |
+
return;
|
4796 |
+
}
|
4797 |
+
|
4798 |
+
if (this._config.backdrop === true) {
|
4799 |
+
this.hide();
|
4800 |
+
} else if (this._config.backdrop === 'static') {
|
4801 |
+
this._triggerBackdropTransition();
|
4802 |
+
}
|
4803 |
+
});
|
4804 |
+
|
4805 |
+
this._backdrop.show(callback);
|
4806 |
+
}
|
4807 |
+
|
4808 |
+
_isAnimated() {
|
4809 |
+
return this._element.classList.contains(CLASS_NAME_FADE$3);
|
4810 |
+
}
|
4811 |
+
|
4812 |
+
_triggerBackdropTransition() {
|
4813 |
+
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
|
4814 |
+
|
4815 |
+
if (hideEvent.defaultPrevented) {
|
4816 |
+
return;
|
4817 |
+
}
|
4818 |
+
|
4819 |
+
const {
|
4820 |
+
classList,
|
4821 |
+
scrollHeight,
|
4822 |
+
style
|
4823 |
+
} = this._element;
|
4824 |
+
const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed
|
4825 |
+
|
4826 |
+
if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {
|
4827 |
+
return;
|
4828 |
+
}
|
4829 |
+
|
4830 |
+
if (!isModalOverflowing) {
|
4831 |
+
style.overflowY = 'hidden';
|
4832 |
+
}
|
4833 |
+
|
4834 |
+
classList.add(CLASS_NAME_STATIC);
|
4835 |
+
|
4836 |
+
this._queueCallback(() => {
|
4837 |
+
classList.remove(CLASS_NAME_STATIC);
|
4838 |
+
|
4839 |
+
if (!isModalOverflowing) {
|
4840 |
+
this._queueCallback(() => {
|
4841 |
+
style.overflowY = '';
|
4842 |
+
}, this._dialog);
|
4843 |
+
}
|
4844 |
+
}, this._dialog);
|
4845 |
+
|
4846 |
+
this._element.focus();
|
4847 |
+
} // ----------------------------------------------------------------------
|
4848 |
+
// the following methods are used to handle overflowing modals
|
4849 |
+
// ----------------------------------------------------------------------
|
4850 |
+
|
4851 |
+
|
4852 |
+
_adjustDialog() {
|
4853 |
+
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
|
4854 |
+
|
4855 |
+
const scrollbarWidth = this._scrollBar.getWidth();
|
4856 |
+
|
4857 |
+
const isBodyOverflowing = scrollbarWidth > 0;
|
4858 |
+
|
4859 |
+
if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {
|
4860 |
+
this._element.style.paddingLeft = `${scrollbarWidth}px`;
|
4861 |
+
}
|
4862 |
+
|
4863 |
+
if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {
|
4864 |
+
this._element.style.paddingRight = `${scrollbarWidth}px`;
|
4865 |
+
}
|
4866 |
+
}
|
4867 |
+
|
4868 |
+
_resetAdjustments() {
|
4869 |
+
this._element.style.paddingLeft = '';
|
4870 |
+
this._element.style.paddingRight = '';
|
4871 |
+
} // Static
|
4872 |
+
|
4873 |
+
|
4874 |
+
static jQueryInterface(config, relatedTarget) {
|
4875 |
+
return this.each(function () {
|
4876 |
+
const data = Modal.getOrCreateInstance(this, config);
|
4877 |
+
|
4878 |
+
if (typeof config !== 'string') {
|
4879 |
+
return;
|
4880 |
+
}
|
4881 |
+
|
4882 |
+
if (typeof data[config] === 'undefined') {
|
4883 |
+
throw new TypeError(`No method named "${config}"`);
|
4884 |
+
}
|
4885 |
+
|
4886 |
+
data[config](relatedTarget);
|
4887 |
+
});
|
4888 |
+
}
|
4889 |
+
|
4890 |
+
}
|
4891 |
+
/**
|
4892 |
+
* ------------------------------------------------------------------------
|
4893 |
+
* Data Api implementation
|
4894 |
+
* ------------------------------------------------------------------------
|
4895 |
+
*/
|
4896 |
+
|
4897 |
+
|
4898 |
+
EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {
|
4899 |
+
const target = getElementFromSelector(this);
|
4900 |
+
|
4901 |
+
if (['A', 'AREA'].includes(this.tagName)) {
|
4902 |
+
event.preventDefault();
|
4903 |
+
}
|
4904 |
+
|
4905 |
+
EventHandler.one(target, EVENT_SHOW$3, showEvent => {
|
4906 |
+
if (showEvent.defaultPrevented) {
|
4907 |
+
// only register focus restorer if modal will actually get shown
|
4908 |
+
return;
|
4909 |
+
}
|
4910 |
+
|
4911 |
+
EventHandler.one(target, EVENT_HIDDEN$3, () => {
|
4912 |
+
if (isVisible(this)) {
|
4913 |
+
this.focus();
|
4914 |
+
}
|
4915 |
+
});
|
4916 |
+
}); // avoid conflict when clicking moddal toggler while another one is open
|
4917 |
+
|
4918 |
+
const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);
|
4919 |
+
|
4920 |
+
if (allReadyOpen) {
|
4921 |
+
Modal.getInstance(allReadyOpen).hide();
|
4922 |
+
}
|
4923 |
+
|
4924 |
+
const data = Modal.getOrCreateInstance(target);
|
4925 |
+
data.toggle(this);
|
4926 |
+
});
|
4927 |
+
enableDismissTrigger(Modal);
|
4928 |
+
/**
|
4929 |
+
* ------------------------------------------------------------------------
|
4930 |
+
* jQuery
|
4931 |
+
* ------------------------------------------------------------------------
|
4932 |
+
* add .Modal to jQuery only if jQuery is present
|
4933 |
+
*/
|
4934 |
+
|
4935 |
+
defineJQueryPlugin(Modal);
|
4936 |
+
|
4937 |
+
/**
|
4938 |
+
* --------------------------------------------------------------------------
|
4939 |
+
* Bootstrap (v5.1.3): offcanvas.js
|
4940 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
4941 |
+
* --------------------------------------------------------------------------
|
4942 |
+
*/
|
4943 |
+
/**
|
4944 |
+
* ------------------------------------------------------------------------
|
4945 |
+
* Constants
|
4946 |
+
* ------------------------------------------------------------------------
|
4947 |
+
*/
|
4948 |
+
|
4949 |
+
const NAME$5 = 'offcanvas';
|
4950 |
+
const DATA_KEY$5 = 'bs.offcanvas';
|
4951 |
+
const EVENT_KEY$5 = `.${DATA_KEY$5}`;
|
4952 |
+
const DATA_API_KEY$2 = '.data-api';
|
4953 |
+
const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;
|
4954 |
+
const ESCAPE_KEY = 'Escape';
|
4955 |
+
const Default$4 = {
|
4956 |
+
backdrop: true,
|
4957 |
+
keyboard: true,
|
4958 |
+
scroll: false
|
4959 |
+
};
|
4960 |
+
const DefaultType$4 = {
|
4961 |
+
backdrop: 'boolean',
|
4962 |
+
keyboard: 'boolean',
|
4963 |
+
scroll: 'boolean'
|
4964 |
+
};
|
4965 |
+
const CLASS_NAME_SHOW$3 = 'show';
|
4966 |
+
const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';
|
4967 |
+
const OPEN_SELECTOR = '.offcanvas.show';
|
4968 |
+
const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;
|
4969 |
+
const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;
|
4970 |
+
const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;
|
4971 |
+
const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;
|
4972 |
+
const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;
|
4973 |
+
const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;
|
4974 |
+
const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]';
|
4975 |
+
/**
|
4976 |
+
* ------------------------------------------------------------------------
|
4977 |
+
* Class Definition
|
4978 |
+
* ------------------------------------------------------------------------
|
4979 |
+
*/
|
4980 |
+
|
4981 |
+
class Offcanvas extends BaseComponent {
|
4982 |
+
constructor(element, config) {
|
4983 |
+
super(element);
|
4984 |
+
this._config = this._getConfig(config);
|
4985 |
+
this._isShown = false;
|
4986 |
+
this._backdrop = this._initializeBackDrop();
|
4987 |
+
this._focustrap = this._initializeFocusTrap();
|
4988 |
+
|
4989 |
+
this._addEventListeners();
|
4990 |
+
} // Getters
|
4991 |
+
|
4992 |
+
|
4993 |
+
static get NAME() {
|
4994 |
+
return NAME$5;
|
4995 |
+
}
|
4996 |
+
|
4997 |
+
static get Default() {
|
4998 |
+
return Default$4;
|
4999 |
+
} // Public
|
5000 |
+
|
5001 |
+
|
5002 |
+
toggle(relatedTarget) {
|
5003 |
+
return this._isShown ? this.hide() : this.show(relatedTarget);
|
5004 |
+
}
|
5005 |
+
|
5006 |
+
show(relatedTarget) {
|
5007 |
+
if (this._isShown) {
|
5008 |
+
return;
|
5009 |
+
}
|
5010 |
+
|
5011 |
+
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {
|
5012 |
+
relatedTarget
|
5013 |
+
});
|
5014 |
+
|
5015 |
+
if (showEvent.defaultPrevented) {
|
5016 |
+
return;
|
5017 |
+
}
|
5018 |
+
|
5019 |
+
this._isShown = true;
|
5020 |
+
this._element.style.visibility = 'visible';
|
5021 |
+
|
5022 |
+
this._backdrop.show();
|
5023 |
+
|
5024 |
+
if (!this._config.scroll) {
|
5025 |
+
new ScrollBarHelper().hide();
|
5026 |
+
}
|
5027 |
+
|
5028 |
+
this._element.removeAttribute('aria-hidden');
|
5029 |
+
|
5030 |
+
this._element.setAttribute('aria-modal', true);
|
5031 |
+
|
5032 |
+
this._element.setAttribute('role', 'dialog');
|
5033 |
+
|
5034 |
+
this._element.classList.add(CLASS_NAME_SHOW$3);
|
5035 |
+
|
5036 |
+
const completeCallBack = () => {
|
5037 |
+
if (!this._config.scroll) {
|
5038 |
+
this._focustrap.activate();
|
5039 |
+
}
|
5040 |
+
|
5041 |
+
EventHandler.trigger(this._element, EVENT_SHOWN$2, {
|
5042 |
+
relatedTarget
|
5043 |
+
});
|
5044 |
+
};
|
5045 |
+
|
5046 |
+
this._queueCallback(completeCallBack, this._element, true);
|
5047 |
+
}
|
5048 |
+
|
5049 |
+
hide() {
|
5050 |
+
if (!this._isShown) {
|
5051 |
+
return;
|
5052 |
+
}
|
5053 |
+
|
5054 |
+
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);
|
5055 |
+
|
5056 |
+
if (hideEvent.defaultPrevented) {
|
5057 |
+
return;
|
5058 |
+
}
|
5059 |
+
|
5060 |
+
this._focustrap.deactivate();
|
5061 |
+
|
5062 |
+
this._element.blur();
|
5063 |
+
|
5064 |
+
this._isShown = false;
|
5065 |
+
|
5066 |
+
this._element.classList.remove(CLASS_NAME_SHOW$3);
|
5067 |
+
|
5068 |
+
this._backdrop.hide();
|
5069 |
+
|
5070 |
+
const completeCallback = () => {
|
5071 |
+
this._element.setAttribute('aria-hidden', true);
|
5072 |
+
|
5073 |
+
this._element.removeAttribute('aria-modal');
|
5074 |
+
|
5075 |
+
this._element.removeAttribute('role');
|
5076 |
+
|
5077 |
+
this._element.style.visibility = 'hidden';
|
5078 |
+
|
5079 |
+
if (!this._config.scroll) {
|
5080 |
+
new ScrollBarHelper().reset();
|
5081 |
+
}
|
5082 |
+
|
5083 |
+
EventHandler.trigger(this._element, EVENT_HIDDEN$2);
|
5084 |
+
};
|
5085 |
+
|
5086 |
+
this._queueCallback(completeCallback, this._element, true);
|
5087 |
+
}
|
5088 |
+
|
5089 |
+
dispose() {
|
5090 |
+
this._backdrop.dispose();
|
5091 |
+
|
5092 |
+
this._focustrap.deactivate();
|
5093 |
+
|
5094 |
+
super.dispose();
|
5095 |
+
} // Private
|
5096 |
+
|
5097 |
+
|
5098 |
+
_getConfig(config) {
|
5099 |
+
config = { ...Default$4,
|
5100 |
+
...Manipulator.getDataAttributes(this._element),
|
5101 |
+
...(typeof config === 'object' ? config : {})
|
5102 |
+
};
|
5103 |
+
typeCheckConfig(NAME$5, config, DefaultType$4);
|
5104 |
+
return config;
|
5105 |
+
}
|
5106 |
+
|
5107 |
+
_initializeBackDrop() {
|
5108 |
+
return new Backdrop({
|
5109 |
+
className: CLASS_NAME_BACKDROP,
|
5110 |
+
isVisible: this._config.backdrop,
|
5111 |
+
isAnimated: true,
|
5112 |
+
rootElement: this._element.parentNode,
|
5113 |
+
clickCallback: () => this.hide()
|
5114 |
+
});
|
5115 |
+
}
|
5116 |
+
|
5117 |
+
_initializeFocusTrap() {
|
5118 |
+
return new FocusTrap({
|
5119 |
+
trapElement: this._element
|
5120 |
+
});
|
5121 |
+
}
|
5122 |
+
|
5123 |
+
_addEventListeners() {
|
5124 |
+
EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
|
5125 |
+
if (this._config.keyboard && event.key === ESCAPE_KEY) {
|
5126 |
+
this.hide();
|
5127 |
+
}
|
5128 |
+
});
|
5129 |
+
} // Static
|
5130 |
+
|
5131 |
+
|
5132 |
+
static jQueryInterface(config) {
|
5133 |
+
return this.each(function () {
|
5134 |
+
const data = Offcanvas.getOrCreateInstance(this, config);
|
5135 |
+
|
5136 |
+
if (typeof config !== 'string') {
|
5137 |
+
return;
|
5138 |
+
}
|
5139 |
+
|
5140 |
+
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
|
5141 |
+
throw new TypeError(`No method named "${config}"`);
|
5142 |
+
}
|
5143 |
+
|
5144 |
+
data[config](this);
|
5145 |
+
});
|
5146 |
+
}
|
5147 |
+
|
5148 |
+
}
|
5149 |
+
/**
|
5150 |
+
* ------------------------------------------------------------------------
|
5151 |
+
* Data Api implementation
|
5152 |
+
* ------------------------------------------------------------------------
|
5153 |
+
*/
|
5154 |
+
|
5155 |
+
|
5156 |
+
EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {
|
5157 |
+
const target = getElementFromSelector(this);
|
5158 |
+
|
5159 |
+
if (['A', 'AREA'].includes(this.tagName)) {
|
5160 |
+
event.preventDefault();
|
5161 |
+
}
|
5162 |
+
|
5163 |
+
if (isDisabled(this)) {
|
5164 |
+
return;
|
5165 |
+
}
|
5166 |
+
|
5167 |
+
EventHandler.one(target, EVENT_HIDDEN$2, () => {
|
5168 |
+
// focus on trigger when it is closed
|
5169 |
+
if (isVisible(this)) {
|
5170 |
+
this.focus();
|
5171 |
+
}
|
5172 |
+
}); // avoid conflict when clicking a toggler of an offcanvas, while another is open
|
5173 |
+
|
5174 |
+
const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
|
5175 |
+
|
5176 |
+
if (allReadyOpen && allReadyOpen !== target) {
|
5177 |
+
Offcanvas.getInstance(allReadyOpen).hide();
|
5178 |
+
}
|
5179 |
+
|
5180 |
+
const data = Offcanvas.getOrCreateInstance(target);
|
5181 |
+
data.toggle(this);
|
5182 |
+
});
|
5183 |
+
EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));
|
5184 |
+
enableDismissTrigger(Offcanvas);
|
5185 |
+
/**
|
5186 |
+
* ------------------------------------------------------------------------
|
5187 |
+
* jQuery
|
5188 |
+
* ------------------------------------------------------------------------
|
5189 |
+
*/
|
5190 |
+
|
5191 |
+
defineJQueryPlugin(Offcanvas);
|
5192 |
+
|
5193 |
+
/**
|
5194 |
+
* --------------------------------------------------------------------------
|
5195 |
+
* Bootstrap (v5.1.3): util/sanitizer.js
|
5196 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
5197 |
+
* --------------------------------------------------------------------------
|
5198 |
+
*/
|
5199 |
+
const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
|
5200 |
+
const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
|
5201 |
+
/**
|
5202 |
+
* A pattern that recognizes a commonly useful subset of URLs that are safe.
|
5203 |
+
*
|
5204 |
+
* Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
|
5205 |
+
*/
|
5206 |
+
|
5207 |
+
const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;
|
5208 |
+
/**
|
5209 |
+
* A pattern that matches safe data URLs. Only matches image, video and audio types.
|
5210 |
+
*
|
5211 |
+
* Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
|
5212 |
+
*/
|
5213 |
+
|
5214 |
+
const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
|
5215 |
+
|
5216 |
+
const allowedAttribute = (attribute, allowedAttributeList) => {
|
5217 |
+
const attributeName = attribute.nodeName.toLowerCase();
|
5218 |
+
|
5219 |
+
if (allowedAttributeList.includes(attributeName)) {
|
5220 |
+
if (uriAttributes.has(attributeName)) {
|
5221 |
+
return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));
|
5222 |
+
}
|
5223 |
+
|
5224 |
+
return true;
|
5225 |
+
}
|
5226 |
+
|
5227 |
+
const regExp = allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp); // Check if a regular expression validates the attribute.
|
5228 |
+
|
5229 |
+
for (let i = 0, len = regExp.length; i < len; i++) {
|
5230 |
+
if (regExp[i].test(attributeName)) {
|
5231 |
+
return true;
|
5232 |
+
}
|
5233 |
+
}
|
5234 |
+
|
5235 |
+
return false;
|
5236 |
+
};
|
5237 |
+
|
5238 |
+
const DefaultAllowlist = {
|
5239 |
+
// Global attributes allowed on any supplied element below.
|
5240 |
+
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
|
5241 |
+
a: ['target', 'href', 'title', 'rel'],
|
5242 |
+
area: [],
|
5243 |
+
b: [],
|
5244 |
+
br: [],
|
5245 |
+
col: [],
|
5246 |
+
code: [],
|
5247 |
+
div: [],
|
5248 |
+
em: [],
|
5249 |
+
hr: [],
|
5250 |
+
h1: [],
|
5251 |
+
h2: [],
|
5252 |
+
h3: [],
|
5253 |
+
h4: [],
|
5254 |
+
h5: [],
|
5255 |
+
h6: [],
|
5256 |
+
i: [],
|
5257 |
+
img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
|
5258 |
+
li: [],
|
5259 |
+
ol: [],
|
5260 |
+
p: [],
|
5261 |
+
pre: [],
|
5262 |
+
s: [],
|
5263 |
+
small: [],
|
5264 |
+
span: [],
|
5265 |
+
sub: [],
|
5266 |
+
sup: [],
|
5267 |
+
strong: [],
|
5268 |
+
u: [],
|
5269 |
+
ul: []
|
5270 |
+
};
|
5271 |
+
function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {
|
5272 |
+
if (!unsafeHtml.length) {
|
5273 |
+
return unsafeHtml;
|
5274 |
+
}
|
5275 |
+
|
5276 |
+
if (sanitizeFn && typeof sanitizeFn === 'function') {
|
5277 |
+
return sanitizeFn(unsafeHtml);
|
5278 |
+
}
|
5279 |
+
|
5280 |
+
const domParser = new window.DOMParser();
|
5281 |
+
const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
|
5282 |
+
const elements = [].concat(...createdDocument.body.querySelectorAll('*'));
|
5283 |
+
|
5284 |
+
for (let i = 0, len = elements.length; i < len; i++) {
|
5285 |
+
const element = elements[i];
|
5286 |
+
const elementName = element.nodeName.toLowerCase();
|
5287 |
+
|
5288 |
+
if (!Object.keys(allowList).includes(elementName)) {
|
5289 |
+
element.remove();
|
5290 |
+
continue;
|
5291 |
+
}
|
5292 |
+
|
5293 |
+
const attributeList = [].concat(...element.attributes);
|
5294 |
+
const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);
|
5295 |
+
attributeList.forEach(attribute => {
|
5296 |
+
if (!allowedAttribute(attribute, allowedAttributes)) {
|
5297 |
+
element.removeAttribute(attribute.nodeName);
|
5298 |
+
}
|
5299 |
+
});
|
5300 |
+
}
|
5301 |
+
|
5302 |
+
return createdDocument.body.innerHTML;
|
5303 |
+
}
|
5304 |
+
|
5305 |
+
/**
|
5306 |
+
* --------------------------------------------------------------------------
|
5307 |
+
* Bootstrap (v5.1.3): tooltip.js
|
5308 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
5309 |
+
* --------------------------------------------------------------------------
|
5310 |
+
*/
|
5311 |
+
/**
|
5312 |
+
* ------------------------------------------------------------------------
|
5313 |
+
* Constants
|
5314 |
+
* ------------------------------------------------------------------------
|
5315 |
+
*/
|
5316 |
+
|
5317 |
+
const NAME$4 = 'tooltip';
|
5318 |
+
const DATA_KEY$4 = 'bs.tooltip';
|
5319 |
+
const EVENT_KEY$4 = `.${DATA_KEY$4}`;
|
5320 |
+
const CLASS_PREFIX$1 = 'bs-tooltip';
|
5321 |
+
const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);
|
5322 |
+
const DefaultType$3 = {
|
5323 |
+
animation: 'boolean',
|
5324 |
+
template: 'string',
|
5325 |
+
title: '(string|element|function)',
|
5326 |
+
trigger: 'string',
|
5327 |
+
delay: '(number|object)',
|
5328 |
+
html: 'boolean',
|
5329 |
+
selector: '(string|boolean)',
|
5330 |
+
placement: '(string|function)',
|
5331 |
+
offset: '(array|string|function)',
|
5332 |
+
container: '(string|element|boolean)',
|
5333 |
+
fallbackPlacements: 'array',
|
5334 |
+
boundary: '(string|element)',
|
5335 |
+
customClass: '(string|function)',
|
5336 |
+
sanitize: 'boolean',
|
5337 |
+
sanitizeFn: '(null|function)',
|
5338 |
+
allowList: 'object',
|
5339 |
+
popperConfig: '(null|object|function)'
|
5340 |
+
};
|
5341 |
+
const AttachmentMap = {
|
5342 |
+
AUTO: 'auto',
|
5343 |
+
TOP: 'top',
|
5344 |
+
RIGHT: isRTL() ? 'left' : 'right',
|
5345 |
+
BOTTOM: 'bottom',
|
5346 |
+
LEFT: isRTL() ? 'right' : 'left'
|
5347 |
+
};
|
5348 |
+
const Default$3 = {
|
5349 |
+
animation: true,
|
5350 |
+
template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>',
|
5351 |
+
trigger: 'hover focus',
|
5352 |
+
title: '',
|
5353 |
+
delay: 0,
|
5354 |
+
html: false,
|
5355 |
+
selector: false,
|
5356 |
+
placement: 'top',
|
5357 |
+
offset: [0, 0],
|
5358 |
+
container: false,
|
5359 |
+
fallbackPlacements: ['top', 'right', 'bottom', 'left'],
|
5360 |
+
boundary: 'clippingParents',
|
5361 |
+
customClass: '',
|
5362 |
+
sanitize: true,
|
5363 |
+
sanitizeFn: null,
|
5364 |
+
allowList: DefaultAllowlist,
|
5365 |
+
popperConfig: null
|
5366 |
+
};
|
5367 |
+
const Event$2 = {
|
5368 |
+
HIDE: `hide${EVENT_KEY$4}`,
|
5369 |
+
HIDDEN: `hidden${EVENT_KEY$4}`,
|
5370 |
+
SHOW: `show${EVENT_KEY$4}`,
|
5371 |
+
SHOWN: `shown${EVENT_KEY$4}`,
|
5372 |
+
INSERTED: `inserted${EVENT_KEY$4}`,
|
5373 |
+
CLICK: `click${EVENT_KEY$4}`,
|
5374 |
+
FOCUSIN: `focusin${EVENT_KEY$4}`,
|
5375 |
+
FOCUSOUT: `focusout${EVENT_KEY$4}`,
|
5376 |
+
MOUSEENTER: `mouseenter${EVENT_KEY$4}`,
|
5377 |
+
MOUSELEAVE: `mouseleave${EVENT_KEY$4}`
|
5378 |
+
};
|
5379 |
+
const CLASS_NAME_FADE$2 = 'fade';
|
5380 |
+
const CLASS_NAME_MODAL = 'modal';
|
5381 |
+
const CLASS_NAME_SHOW$2 = 'show';
|
5382 |
+
const HOVER_STATE_SHOW = 'show';
|
5383 |
+
const HOVER_STATE_OUT = 'out';
|
5384 |
+
const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
|
5385 |
+
const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;
|
5386 |
+
const EVENT_MODAL_HIDE = 'hide.bs.modal';
|
5387 |
+
const TRIGGER_HOVER = 'hover';
|
5388 |
+
const TRIGGER_FOCUS = 'focus';
|
5389 |
+
const TRIGGER_CLICK = 'click';
|
5390 |
+
const TRIGGER_MANUAL = 'manual';
|
5391 |
+
/**
|
5392 |
+
* ------------------------------------------------------------------------
|
5393 |
+
* Class Definition
|
5394 |
+
* ------------------------------------------------------------------------
|
5395 |
+
*/
|
5396 |
+
|
5397 |
+
class Tooltip extends BaseComponent {
|
5398 |
+
constructor(element, config) {
|
5399 |
+
if (typeof Popper === 'undefined') {
|
5400 |
+
throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
|
5401 |
+
}
|
5402 |
+
|
5403 |
+
super(element); // private
|
5404 |
+
|
5405 |
+
this._isEnabled = true;
|
5406 |
+
this._timeout = 0;
|
5407 |
+
this._hoverState = '';
|
5408 |
+
this._activeTrigger = {};
|
5409 |
+
this._popper = null; // Protected
|
5410 |
+
|
5411 |
+
this._config = this._getConfig(config);
|
5412 |
+
this.tip = null;
|
5413 |
+
|
5414 |
+
this._setListeners();
|
5415 |
+
} // Getters
|
5416 |
+
|
5417 |
+
|
5418 |
+
static get Default() {
|
5419 |
+
return Default$3;
|
5420 |
+
}
|
5421 |
+
|
5422 |
+
static get NAME() {
|
5423 |
+
return NAME$4;
|
5424 |
+
}
|
5425 |
+
|
5426 |
+
static get Event() {
|
5427 |
+
return Event$2;
|
5428 |
+
}
|
5429 |
+
|
5430 |
+
static get DefaultType() {
|
5431 |
+
return DefaultType$3;
|
5432 |
+
} // Public
|
5433 |
+
|
5434 |
+
|
5435 |
+
enable() {
|
5436 |
+
this._isEnabled = true;
|
5437 |
+
}
|
5438 |
+
|
5439 |
+
disable() {
|
5440 |
+
this._isEnabled = false;
|
5441 |
+
}
|
5442 |
+
|
5443 |
+
toggleEnabled() {
|
5444 |
+
this._isEnabled = !this._isEnabled;
|
5445 |
+
}
|
5446 |
+
|
5447 |
+
toggle(event) {
|
5448 |
+
if (!this._isEnabled) {
|
5449 |
+
return;
|
5450 |
+
}
|
5451 |
+
|
5452 |
+
if (event) {
|
5453 |
+
const context = this._initializeOnDelegatedTarget(event);
|
5454 |
+
|
5455 |
+
context._activeTrigger.click = !context._activeTrigger.click;
|
5456 |
+
|
5457 |
+
if (context._isWithActiveTrigger()) {
|
5458 |
+
context._enter(null, context);
|
5459 |
+
} else {
|
5460 |
+
context._leave(null, context);
|
5461 |
+
}
|
5462 |
+
} else {
|
5463 |
+
if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$2)) {
|
5464 |
+
this._leave(null, this);
|
5465 |
+
|
5466 |
+
return;
|
5467 |
+
}
|
5468 |
+
|
5469 |
+
this._enter(null, this);
|
5470 |
+
}
|
5471 |
+
}
|
5472 |
+
|
5473 |
+
dispose() {
|
5474 |
+
clearTimeout(this._timeout);
|
5475 |
+
EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
|
5476 |
+
|
5477 |
+
if (this.tip) {
|
5478 |
+
this.tip.remove();
|
5479 |
+
}
|
5480 |
+
|
5481 |
+
this._disposePopper();
|
5482 |
+
|
5483 |
+
super.dispose();
|
5484 |
+
}
|
5485 |
+
|
5486 |
+
show() {
|
5487 |
+
if (this._element.style.display === 'none') {
|
5488 |
+
throw new Error('Please use show on visible elements');
|
5489 |
+
}
|
5490 |
+
|
5491 |
+
if (!(this.isWithContent() && this._isEnabled)) {
|
5492 |
+
return;
|
5493 |
+
}
|
5494 |
+
|
5495 |
+
const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);
|
5496 |
+
const shadowRoot = findShadowRoot(this._element);
|
5497 |
+
const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);
|
5498 |
+
|
5499 |
+
if (showEvent.defaultPrevented || !isInTheDom) {
|
5500 |
+
return;
|
5501 |
+
} // A trick to recreate a tooltip in case a new title is given by using the NOT documented `data-bs-original-title`
|
5502 |
+
// This will be removed later in favor of a `setContent` method
|
5503 |
+
|
5504 |
+
|
5505 |
+
if (this.constructor.NAME === 'tooltip' && this.tip && this.getTitle() !== this.tip.querySelector(SELECTOR_TOOLTIP_INNER).innerHTML) {
|
5506 |
+
this._disposePopper();
|
5507 |
+
|
5508 |
+
this.tip.remove();
|
5509 |
+
this.tip = null;
|
5510 |
+
}
|
5511 |
+
|
5512 |
+
const tip = this.getTipElement();
|
5513 |
+
const tipId = getUID(this.constructor.NAME);
|
5514 |
+
tip.setAttribute('id', tipId);
|
5515 |
+
|
5516 |
+
this._element.setAttribute('aria-describedby', tipId);
|
5517 |
+
|
5518 |
+
if (this._config.animation) {
|
5519 |
+
tip.classList.add(CLASS_NAME_FADE$2);
|
5520 |
+
}
|
5521 |
+
|
5522 |
+
const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;
|
5523 |
+
|
5524 |
+
const attachment = this._getAttachment(placement);
|
5525 |
+
|
5526 |
+
this._addAttachmentClass(attachment);
|
5527 |
+
|
5528 |
+
const {
|
5529 |
+
container
|
5530 |
+
} = this._config;
|
5531 |
+
Data.set(tip, this.constructor.DATA_KEY, this);
|
5532 |
+
|
5533 |
+
if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
|
5534 |
+
container.append(tip);
|
5535 |
+
EventHandler.trigger(this._element, this.constructor.Event.INSERTED);
|
5536 |
+
}
|
5537 |
+
|
5538 |
+
if (this._popper) {
|
5539 |
+
this._popper.update();
|
5540 |
+
} else {
|
5541 |
+
this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));
|
5542 |
+
}
|
5543 |
+
|
5544 |
+
tip.classList.add(CLASS_NAME_SHOW$2);
|
5545 |
+
|
5546 |
+
const customClass = this._resolvePossibleFunction(this._config.customClass);
|
5547 |
+
|
5548 |
+
if (customClass) {
|
5549 |
+
tip.classList.add(...customClass.split(' '));
|
5550 |
+
} // If this is a touch-enabled device we add extra
|
5551 |
+
// empty mouseover listeners to the body's immediate children;
|
5552 |
+
// only needed because of broken event delegation on iOS
|
5553 |
+
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
|
5554 |
+
|
5555 |
+
|
5556 |
+
if ('ontouchstart' in document.documentElement) {
|
5557 |
+
[].concat(...document.body.children).forEach(element => {
|
5558 |
+
EventHandler.on(element, 'mouseover', noop);
|
5559 |
+
});
|
5560 |
+
}
|
5561 |
+
|
5562 |
+
const complete = () => {
|
5563 |
+
const prevHoverState = this._hoverState;
|
5564 |
+
this._hoverState = null;
|
5565 |
+
EventHandler.trigger(this._element, this.constructor.Event.SHOWN);
|
5566 |
+
|
5567 |
+
if (prevHoverState === HOVER_STATE_OUT) {
|
5568 |
+
this._leave(null, this);
|
5569 |
+
}
|
5570 |
+
};
|
5571 |
+
|
5572 |
+
const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2);
|
5573 |
+
|
5574 |
+
this._queueCallback(complete, this.tip, isAnimated);
|
5575 |
+
}
|
5576 |
+
|
5577 |
+
hide() {
|
5578 |
+
if (!this._popper) {
|
5579 |
+
return;
|
5580 |
+
}
|
5581 |
+
|
5582 |
+
const tip = this.getTipElement();
|
5583 |
+
|
5584 |
+
const complete = () => {
|
5585 |
+
if (this._isWithActiveTrigger()) {
|
5586 |
+
return;
|
5587 |
+
}
|
5588 |
+
|
5589 |
+
if (this._hoverState !== HOVER_STATE_SHOW) {
|
5590 |
+
tip.remove();
|
5591 |
+
}
|
5592 |
+
|
5593 |
+
this._cleanTipClass();
|
5594 |
+
|
5595 |
+
this._element.removeAttribute('aria-describedby');
|
5596 |
+
|
5597 |
+
EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);
|
5598 |
+
|
5599 |
+
this._disposePopper();
|
5600 |
+
};
|
5601 |
+
|
5602 |
+
const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);
|
5603 |
+
|
5604 |
+
if (hideEvent.defaultPrevented) {
|
5605 |
+
return;
|
5606 |
+
}
|
5607 |
+
|
5608 |
+
tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra
|
5609 |
+
// empty mouseover listeners we added for iOS support
|
5610 |
+
|
5611 |
+
if ('ontouchstart' in document.documentElement) {
|
5612 |
+
[].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));
|
5613 |
+
}
|
5614 |
+
|
5615 |
+
this._activeTrigger[TRIGGER_CLICK] = false;
|
5616 |
+
this._activeTrigger[TRIGGER_FOCUS] = false;
|
5617 |
+
this._activeTrigger[TRIGGER_HOVER] = false;
|
5618 |
+
const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2);
|
5619 |
+
|
5620 |
+
this._queueCallback(complete, this.tip, isAnimated);
|
5621 |
+
|
5622 |
+
this._hoverState = '';
|
5623 |
+
}
|
5624 |
+
|
5625 |
+
update() {
|
5626 |
+
if (this._popper !== null) {
|
5627 |
+
this._popper.update();
|
5628 |
+
}
|
5629 |
+
} // Protected
|
5630 |
+
|
5631 |
+
|
5632 |
+
isWithContent() {
|
5633 |
+
return Boolean(this.getTitle());
|
5634 |
+
}
|
5635 |
+
|
5636 |
+
getTipElement() {
|
5637 |
+
if (this.tip) {
|
5638 |
+
return this.tip;
|
5639 |
+
}
|
5640 |
+
|
5641 |
+
const element = document.createElement('div');
|
5642 |
+
element.innerHTML = this._config.template;
|
5643 |
+
const tip = element.children[0];
|
5644 |
+
this.setContent(tip);
|
5645 |
+
tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);
|
5646 |
+
this.tip = tip;
|
5647 |
+
return this.tip;
|
5648 |
+
}
|
5649 |
+
|
5650 |
+
setContent(tip) {
|
5651 |
+
this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TOOLTIP_INNER);
|
5652 |
+
}
|
5653 |
+
|
5654 |
+
_sanitizeAndSetContent(template, content, selector) {
|
5655 |
+
const templateElement = SelectorEngine.findOne(selector, template);
|
5656 |
+
|
5657 |
+
if (!content && templateElement) {
|
5658 |
+
templateElement.remove();
|
5659 |
+
return;
|
5660 |
+
} // we use append for html objects to maintain js events
|
5661 |
+
|
5662 |
+
|
5663 |
+
this.setElementContent(templateElement, content);
|
5664 |
+
}
|
5665 |
+
|
5666 |
+
setElementContent(element, content) {
|
5667 |
+
if (element === null) {
|
5668 |
+
return;
|
5669 |
+
}
|
5670 |
+
|
5671 |
+
if (isElement$1(content)) {
|
5672 |
+
content = getElement(content); // content is a DOM node or a jQuery
|
5673 |
+
|
5674 |
+
if (this._config.html) {
|
5675 |
+
if (content.parentNode !== element) {
|
5676 |
+
element.innerHTML = '';
|
5677 |
+
element.append(content);
|
5678 |
+
}
|
5679 |
+
} else {
|
5680 |
+
element.textContent = content.textContent;
|
5681 |
+
}
|
5682 |
+
|
5683 |
+
return;
|
5684 |
+
}
|
5685 |
+
|
5686 |
+
if (this._config.html) {
|
5687 |
+
if (this._config.sanitize) {
|
5688 |
+
content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);
|
5689 |
+
}
|
5690 |
+
|
5691 |
+
element.innerHTML = content;
|
5692 |
+
} else {
|
5693 |
+
element.textContent = content;
|
5694 |
+
}
|
5695 |
+
}
|
5696 |
+
|
5697 |
+
getTitle() {
|
5698 |
+
const title = this._element.getAttribute('data-bs-original-title') || this._config.title;
|
5699 |
+
|
5700 |
+
return this._resolvePossibleFunction(title);
|
5701 |
+
}
|
5702 |
+
|
5703 |
+
updateAttachment(attachment) {
|
5704 |
+
if (attachment === 'right') {
|
5705 |
+
return 'end';
|
5706 |
+
}
|
5707 |
+
|
5708 |
+
if (attachment === 'left') {
|
5709 |
+
return 'start';
|
5710 |
+
}
|
5711 |
+
|
5712 |
+
return attachment;
|
5713 |
+
} // Private
|
5714 |
+
|
5715 |
+
|
5716 |
+
_initializeOnDelegatedTarget(event, context) {
|
5717 |
+
return context || this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());
|
5718 |
+
}
|
5719 |
+
|
5720 |
+
_getOffset() {
|
5721 |
+
const {
|
5722 |
+
offset
|
5723 |
+
} = this._config;
|
5724 |
+
|
5725 |
+
if (typeof offset === 'string') {
|
5726 |
+
return offset.split(',').map(val => Number.parseInt(val, 10));
|
5727 |
+
}
|
5728 |
+
|
5729 |
+
if (typeof offset === 'function') {
|
5730 |
+
return popperData => offset(popperData, this._element);
|
5731 |
+
}
|
5732 |
+
|
5733 |
+
return offset;
|
5734 |
+
}
|
5735 |
+
|
5736 |
+
_resolvePossibleFunction(content) {
|
5737 |
+
return typeof content === 'function' ? content.call(this._element) : content;
|
5738 |
+
}
|
5739 |
+
|
5740 |
+
_getPopperConfig(attachment) {
|
5741 |
+
const defaultBsPopperConfig = {
|
5742 |
+
placement: attachment,
|
5743 |
+
modifiers: [{
|
5744 |
+
name: 'flip',
|
5745 |
+
options: {
|
5746 |
+
fallbackPlacements: this._config.fallbackPlacements
|
5747 |
+
}
|
5748 |
+
}, {
|
5749 |
+
name: 'offset',
|
5750 |
+
options: {
|
5751 |
+
offset: this._getOffset()
|
5752 |
+
}
|
5753 |
+
}, {
|
5754 |
+
name: 'preventOverflow',
|
5755 |
+
options: {
|
5756 |
+
boundary: this._config.boundary
|
5757 |
+
}
|
5758 |
+
}, {
|
5759 |
+
name: 'arrow',
|
5760 |
+
options: {
|
5761 |
+
element: `.${this.constructor.NAME}-arrow`
|
5762 |
+
}
|
5763 |
+
}, {
|
5764 |
+
name: 'onChange',
|
5765 |
+
enabled: true,
|
5766 |
+
phase: 'afterWrite',
|
5767 |
+
fn: data => this._handlePopperPlacementChange(data)
|
5768 |
+
}],
|
5769 |
+
onFirstUpdate: data => {
|
5770 |
+
if (data.options.placement !== data.placement) {
|
5771 |
+
this._handlePopperPlacementChange(data);
|
5772 |
+
}
|
5773 |
+
}
|
5774 |
+
};
|
5775 |
+
return { ...defaultBsPopperConfig,
|
5776 |
+
...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
|
5777 |
+
};
|
5778 |
+
}
|
5779 |
+
|
5780 |
+
_addAttachmentClass(attachment) {
|
5781 |
+
this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(attachment)}`);
|
5782 |
+
}
|
5783 |
+
|
5784 |
+
_getAttachment(placement) {
|
5785 |
+
return AttachmentMap[placement.toUpperCase()];
|
5786 |
+
}
|
5787 |
+
|
5788 |
+
_setListeners() {
|
5789 |
+
const triggers = this._config.trigger.split(' ');
|
5790 |
+
|
5791 |
+
triggers.forEach(trigger => {
|
5792 |
+
if (trigger === 'click') {
|
5793 |
+
EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));
|
5794 |
+
} else if (trigger !== TRIGGER_MANUAL) {
|
5795 |
+
const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;
|
5796 |
+
const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;
|
5797 |
+
EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));
|
5798 |
+
EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));
|
5799 |
+
}
|
5800 |
+
});
|
5801 |
+
|
5802 |
+
this._hideModalHandler = () => {
|
5803 |
+
if (this._element) {
|
5804 |
+
this.hide();
|
5805 |
+
}
|
5806 |
+
};
|
5807 |
+
|
5808 |
+
EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
|
5809 |
+
|
5810 |
+
if (this._config.selector) {
|
5811 |
+
this._config = { ...this._config,
|
5812 |
+
trigger: 'manual',
|
5813 |
+
selector: ''
|
5814 |
+
};
|
5815 |
+
} else {
|
5816 |
+
this._fixTitle();
|
5817 |
+
}
|
5818 |
+
}
|
5819 |
+
|
5820 |
+
_fixTitle() {
|
5821 |
+
const title = this._element.getAttribute('title');
|
5822 |
+
|
5823 |
+
const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');
|
5824 |
+
|
5825 |
+
if (title || originalTitleType !== 'string') {
|
5826 |
+
this._element.setAttribute('data-bs-original-title', title || '');
|
5827 |
+
|
5828 |
+
if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {
|
5829 |
+
this._element.setAttribute('aria-label', title);
|
5830 |
+
}
|
5831 |
+
|
5832 |
+
this._element.setAttribute('title', '');
|
5833 |
+
}
|
5834 |
+
}
|
5835 |
+
|
5836 |
+
_enter(event, context) {
|
5837 |
+
context = this._initializeOnDelegatedTarget(event, context);
|
5838 |
+
|
5839 |
+
if (event) {
|
5840 |
+
context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
|
5841 |
+
}
|
5842 |
+
|
5843 |
+
if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$2) || context._hoverState === HOVER_STATE_SHOW) {
|
5844 |
+
context._hoverState = HOVER_STATE_SHOW;
|
5845 |
+
return;
|
5846 |
+
}
|
5847 |
+
|
5848 |
+
clearTimeout(context._timeout);
|
5849 |
+
context._hoverState = HOVER_STATE_SHOW;
|
5850 |
+
|
5851 |
+
if (!context._config.delay || !context._config.delay.show) {
|
5852 |
+
context.show();
|
5853 |
+
return;
|
5854 |
+
}
|
5855 |
+
|
5856 |
+
context._timeout = setTimeout(() => {
|
5857 |
+
if (context._hoverState === HOVER_STATE_SHOW) {
|
5858 |
+
context.show();
|
5859 |
+
}
|
5860 |
+
}, context._config.delay.show);
|
5861 |
+
}
|
5862 |
+
|
5863 |
+
_leave(event, context) {
|
5864 |
+
context = this._initializeOnDelegatedTarget(event, context);
|
5865 |
+
|
5866 |
+
if (event) {
|
5867 |
+
context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);
|
5868 |
+
}
|
5869 |
+
|
5870 |
+
if (context._isWithActiveTrigger()) {
|
5871 |
+
return;
|
5872 |
+
}
|
5873 |
+
|
5874 |
+
clearTimeout(context._timeout);
|
5875 |
+
context._hoverState = HOVER_STATE_OUT;
|
5876 |
+
|
5877 |
+
if (!context._config.delay || !context._config.delay.hide) {
|
5878 |
+
context.hide();
|
5879 |
+
return;
|
5880 |
+
}
|
5881 |
+
|
5882 |
+
context._timeout = setTimeout(() => {
|
5883 |
+
if (context._hoverState === HOVER_STATE_OUT) {
|
5884 |
+
context.hide();
|
5885 |
+
}
|
5886 |
+
}, context._config.delay.hide);
|
5887 |
+
}
|
5888 |
+
|
5889 |
+
_isWithActiveTrigger() {
|
5890 |
+
for (const trigger in this._activeTrigger) {
|
5891 |
+
if (this._activeTrigger[trigger]) {
|
5892 |
+
return true;
|
5893 |
+
}
|
5894 |
+
}
|
5895 |
+
|
5896 |
+
return false;
|
5897 |
+
}
|
5898 |
+
|
5899 |
+
_getConfig(config) {
|
5900 |
+
const dataAttributes = Manipulator.getDataAttributes(this._element);
|
5901 |
+
Object.keys(dataAttributes).forEach(dataAttr => {
|
5902 |
+
if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {
|
5903 |
+
delete dataAttributes[dataAttr];
|
5904 |
+
}
|
5905 |
+
});
|
5906 |
+
config = { ...this.constructor.Default,
|
5907 |
+
...dataAttributes,
|
5908 |
+
...(typeof config === 'object' && config ? config : {})
|
5909 |
+
};
|
5910 |
+
config.container = config.container === false ? document.body : getElement(config.container);
|
5911 |
+
|
5912 |
+
if (typeof config.delay === 'number') {
|
5913 |
+
config.delay = {
|
5914 |
+
show: config.delay,
|
5915 |
+
hide: config.delay
|
5916 |
+
};
|
5917 |
+
}
|
5918 |
+
|
5919 |
+
if (typeof config.title === 'number') {
|
5920 |
+
config.title = config.title.toString();
|
5921 |
+
}
|
5922 |
+
|
5923 |
+
if (typeof config.content === 'number') {
|
5924 |
+
config.content = config.content.toString();
|
5925 |
+
}
|
5926 |
+
|
5927 |
+
typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
|
5928 |
+
|
5929 |
+
if (config.sanitize) {
|
5930 |
+
config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);
|
5931 |
+
}
|
5932 |
+
|
5933 |
+
return config;
|
5934 |
+
}
|
5935 |
+
|
5936 |
+
_getDelegateConfig() {
|
5937 |
+
const config = {};
|
5938 |
+
|
5939 |
+
for (const key in this._config) {
|
5940 |
+
if (this.constructor.Default[key] !== this._config[key]) {
|
5941 |
+
config[key] = this._config[key];
|
5942 |
+
}
|
5943 |
+
} // In the future can be replaced with:
|
5944 |
+
// const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])
|
5945 |
+
// `Object.fromEntries(keysWithDifferentValues)`
|
5946 |
+
|
5947 |
+
|
5948 |
+
return config;
|
5949 |
+
}
|
5950 |
+
|
5951 |
+
_cleanTipClass() {
|
5952 |
+
const tip = this.getTipElement();
|
5953 |
+
const basicClassPrefixRegex = new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`, 'g');
|
5954 |
+
const tabClass = tip.getAttribute('class').match(basicClassPrefixRegex);
|
5955 |
+
|
5956 |
+
if (tabClass !== null && tabClass.length > 0) {
|
5957 |
+
tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));
|
5958 |
+
}
|
5959 |
+
}
|
5960 |
+
|
5961 |
+
_getBasicClassPrefix() {
|
5962 |
+
return CLASS_PREFIX$1;
|
5963 |
+
}
|
5964 |
+
|
5965 |
+
_handlePopperPlacementChange(popperData) {
|
5966 |
+
const {
|
5967 |
+
state
|
5968 |
+
} = popperData;
|
5969 |
+
|
5970 |
+
if (!state) {
|
5971 |
+
return;
|
5972 |
+
}
|
5973 |
+
|
5974 |
+
this.tip = state.elements.popper;
|
5975 |
+
|
5976 |
+
this._cleanTipClass();
|
5977 |
+
|
5978 |
+
this._addAttachmentClass(this._getAttachment(state.placement));
|
5979 |
+
}
|
5980 |
+
|
5981 |
+
_disposePopper() {
|
5982 |
+
if (this._popper) {
|
5983 |
+
this._popper.destroy();
|
5984 |
+
|
5985 |
+
this._popper = null;
|
5986 |
+
}
|
5987 |
+
} // Static
|
5988 |
+
|
5989 |
+
|
5990 |
+
static jQueryInterface(config) {
|
5991 |
+
return this.each(function () {
|
5992 |
+
const data = Tooltip.getOrCreateInstance(this, config);
|
5993 |
+
|
5994 |
+
if (typeof config === 'string') {
|
5995 |
+
if (typeof data[config] === 'undefined') {
|
5996 |
+
throw new TypeError(`No method named "${config}"`);
|
5997 |
+
}
|
5998 |
+
|
5999 |
+
data[config]();
|
6000 |
+
}
|
6001 |
+
});
|
6002 |
+
}
|
6003 |
+
|
6004 |
+
}
|
6005 |
+
/**
|
6006 |
+
* ------------------------------------------------------------------------
|
6007 |
+
* jQuery
|
6008 |
+
* ------------------------------------------------------------------------
|
6009 |
+
* add .Tooltip to jQuery only if jQuery is present
|
6010 |
+
*/
|
6011 |
+
|
6012 |
+
|
6013 |
+
defineJQueryPlugin(Tooltip);
|
6014 |
+
|
6015 |
+
/**
|
6016 |
+
* --------------------------------------------------------------------------
|
6017 |
+
* Bootstrap (v5.1.3): popover.js
|
6018 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
6019 |
+
* --------------------------------------------------------------------------
|
6020 |
+
*/
|
6021 |
+
/**
|
6022 |
+
* ------------------------------------------------------------------------
|
6023 |
+
* Constants
|
6024 |
+
* ------------------------------------------------------------------------
|
6025 |
+
*/
|
6026 |
+
|
6027 |
+
const NAME$3 = 'popover';
|
6028 |
+
const DATA_KEY$3 = 'bs.popover';
|
6029 |
+
const EVENT_KEY$3 = `.${DATA_KEY$3}`;
|
6030 |
+
const CLASS_PREFIX = 'bs-popover';
|
6031 |
+
const Default$2 = { ...Tooltip.Default,
|
6032 |
+
placement: 'right',
|
6033 |
+
offset: [0, 8],
|
6034 |
+
trigger: 'click',
|
6035 |
+
content: '',
|
6036 |
+
template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>'
|
6037 |
+
};
|
6038 |
+
const DefaultType$2 = { ...Tooltip.DefaultType,
|
6039 |
+
content: '(string|element|function)'
|
6040 |
+
};
|
6041 |
+
const Event$1 = {
|
6042 |
+
HIDE: `hide${EVENT_KEY$3}`,
|
6043 |
+
HIDDEN: `hidden${EVENT_KEY$3}`,
|
6044 |
+
SHOW: `show${EVENT_KEY$3}`,
|
6045 |
+
SHOWN: `shown${EVENT_KEY$3}`,
|
6046 |
+
INSERTED: `inserted${EVENT_KEY$3}`,
|
6047 |
+
CLICK: `click${EVENT_KEY$3}`,
|
6048 |
+
FOCUSIN: `focusin${EVENT_KEY$3}`,
|
6049 |
+
FOCUSOUT: `focusout${EVENT_KEY$3}`,
|
6050 |
+
MOUSEENTER: `mouseenter${EVENT_KEY$3}`,
|
6051 |
+
MOUSELEAVE: `mouseleave${EVENT_KEY$3}`
|
6052 |
+
};
|
6053 |
+
const SELECTOR_TITLE = '.popover-header';
|
6054 |
+
const SELECTOR_CONTENT = '.popover-body';
|
6055 |
+
/**
|
6056 |
+
* ------------------------------------------------------------------------
|
6057 |
+
* Class Definition
|
6058 |
+
* ------------------------------------------------------------------------
|
6059 |
+
*/
|
6060 |
+
|
6061 |
+
class Popover extends Tooltip {
|
6062 |
+
// Getters
|
6063 |
+
static get Default() {
|
6064 |
+
return Default$2;
|
6065 |
+
}
|
6066 |
+
|
6067 |
+
static get NAME() {
|
6068 |
+
return NAME$3;
|
6069 |
+
}
|
6070 |
+
|
6071 |
+
static get Event() {
|
6072 |
+
return Event$1;
|
6073 |
+
}
|
6074 |
+
|
6075 |
+
static get DefaultType() {
|
6076 |
+
return DefaultType$2;
|
6077 |
+
} // Overrides
|
6078 |
+
|
6079 |
+
|
6080 |
+
isWithContent() {
|
6081 |
+
return this.getTitle() || this._getContent();
|
6082 |
+
}
|
6083 |
+
|
6084 |
+
setContent(tip) {
|
6085 |
+
this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TITLE);
|
6086 |
+
|
6087 |
+
this._sanitizeAndSetContent(tip, this._getContent(), SELECTOR_CONTENT);
|
6088 |
+
} // Private
|
6089 |
+
|
6090 |
+
|
6091 |
+
_getContent() {
|
6092 |
+
return this._resolvePossibleFunction(this._config.content);
|
6093 |
+
}
|
6094 |
+
|
6095 |
+
_getBasicClassPrefix() {
|
6096 |
+
return CLASS_PREFIX;
|
6097 |
+
} // Static
|
6098 |
+
|
6099 |
+
|
6100 |
+
static jQueryInterface(config) {
|
6101 |
+
return this.each(function () {
|
6102 |
+
const data = Popover.getOrCreateInstance(this, config);
|
6103 |
+
|
6104 |
+
if (typeof config === 'string') {
|
6105 |
+
if (typeof data[config] === 'undefined') {
|
6106 |
+
throw new TypeError(`No method named "${config}"`);
|
6107 |
+
}
|
6108 |
+
|
6109 |
+
data[config]();
|
6110 |
+
}
|
6111 |
+
});
|
6112 |
+
}
|
6113 |
+
|
6114 |
+
}
|
6115 |
+
/**
|
6116 |
+
* ------------------------------------------------------------------------
|
6117 |
+
* jQuery
|
6118 |
+
* ------------------------------------------------------------------------
|
6119 |
+
* add .Popover to jQuery only if jQuery is present
|
6120 |
+
*/
|
6121 |
+
|
6122 |
+
|
6123 |
+
defineJQueryPlugin(Popover);
|
6124 |
+
|
6125 |
+
/**
|
6126 |
+
* --------------------------------------------------------------------------
|
6127 |
+
* Bootstrap (v5.1.3): scrollspy.js
|
6128 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
6129 |
+
* --------------------------------------------------------------------------
|
6130 |
+
*/
|
6131 |
+
/**
|
6132 |
+
* ------------------------------------------------------------------------
|
6133 |
+
* Constants
|
6134 |
+
* ------------------------------------------------------------------------
|
6135 |
+
*/
|
6136 |
+
|
6137 |
+
const NAME$2 = 'scrollspy';
|
6138 |
+
const DATA_KEY$2 = 'bs.scrollspy';
|
6139 |
+
const EVENT_KEY$2 = `.${DATA_KEY$2}`;
|
6140 |
+
const DATA_API_KEY$1 = '.data-api';
|
6141 |
+
const Default$1 = {
|
6142 |
+
offset: 10,
|
6143 |
+
method: 'auto',
|
6144 |
+
target: ''
|
6145 |
+
};
|
6146 |
+
const DefaultType$1 = {
|
6147 |
+
offset: 'number',
|
6148 |
+
method: 'string',
|
6149 |
+
target: '(string|element)'
|
6150 |
+
};
|
6151 |
+
const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;
|
6152 |
+
const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;
|
6153 |
+
const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;
|
6154 |
+
const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
|
6155 |
+
const CLASS_NAME_ACTIVE$1 = 'active';
|
6156 |
+
const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
|
6157 |
+
const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';
|
6158 |
+
const SELECTOR_NAV_LINKS = '.nav-link';
|
6159 |
+
const SELECTOR_NAV_ITEMS = '.nav-item';
|
6160 |
+
const SELECTOR_LIST_ITEMS = '.list-group-item';
|
6161 |
+
const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`;
|
6162 |
+
const SELECTOR_DROPDOWN$1 = '.dropdown';
|
6163 |
+
const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
|
6164 |
+
const METHOD_OFFSET = 'offset';
|
6165 |
+
const METHOD_POSITION = 'position';
|
6166 |
+
/**
|
6167 |
+
* ------------------------------------------------------------------------
|
6168 |
+
* Class Definition
|
6169 |
+
* ------------------------------------------------------------------------
|
6170 |
+
*/
|
6171 |
+
|
6172 |
+
class ScrollSpy extends BaseComponent {
|
6173 |
+
constructor(element, config) {
|
6174 |
+
super(element);
|
6175 |
+
this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;
|
6176 |
+
this._config = this._getConfig(config);
|
6177 |
+
this._offsets = [];
|
6178 |
+
this._targets = [];
|
6179 |
+
this._activeTarget = null;
|
6180 |
+
this._scrollHeight = 0;
|
6181 |
+
EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());
|
6182 |
+
this.refresh();
|
6183 |
+
|
6184 |
+
this._process();
|
6185 |
+
} // Getters
|
6186 |
+
|
6187 |
+
|
6188 |
+
static get Default() {
|
6189 |
+
return Default$1;
|
6190 |
+
}
|
6191 |
+
|
6192 |
+
static get NAME() {
|
6193 |
+
return NAME$2;
|
6194 |
+
} // Public
|
6195 |
+
|
6196 |
+
|
6197 |
+
refresh() {
|
6198 |
+
const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
|
6199 |
+
const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
|
6200 |
+
const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
|
6201 |
+
this._offsets = [];
|
6202 |
+
this._targets = [];
|
6203 |
+
this._scrollHeight = this._getScrollHeight();
|
6204 |
+
const targets = SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target);
|
6205 |
+
targets.map(element => {
|
6206 |
+
const targetSelector = getSelectorFromElement(element);
|
6207 |
+
const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;
|
6208 |
+
|
6209 |
+
if (target) {
|
6210 |
+
const targetBCR = target.getBoundingClientRect();
|
6211 |
+
|
6212 |
+
if (targetBCR.width || targetBCR.height) {
|
6213 |
+
return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];
|
6214 |
+
}
|
6215 |
+
}
|
6216 |
+
|
6217 |
+
return null;
|
6218 |
+
}).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {
|
6219 |
+
this._offsets.push(item[0]);
|
6220 |
+
|
6221 |
+
this._targets.push(item[1]);
|
6222 |
+
});
|
6223 |
+
}
|
6224 |
+
|
6225 |
+
dispose() {
|
6226 |
+
EventHandler.off(this._scrollElement, EVENT_KEY$2);
|
6227 |
+
super.dispose();
|
6228 |
+
} // Private
|
6229 |
+
|
6230 |
+
|
6231 |
+
_getConfig(config) {
|
6232 |
+
config = { ...Default$1,
|
6233 |
+
...Manipulator.getDataAttributes(this._element),
|
6234 |
+
...(typeof config === 'object' && config ? config : {})
|
6235 |
+
};
|
6236 |
+
config.target = getElement(config.target) || document.documentElement;
|
6237 |
+
typeCheckConfig(NAME$2, config, DefaultType$1);
|
6238 |
+
return config;
|
6239 |
+
}
|
6240 |
+
|
6241 |
+
_getScrollTop() {
|
6242 |
+
return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
|
6243 |
+
}
|
6244 |
+
|
6245 |
+
_getScrollHeight() {
|
6246 |
+
return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
|
6247 |
+
}
|
6248 |
+
|
6249 |
+
_getOffsetHeight() {
|
6250 |
+
return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
|
6251 |
+
}
|
6252 |
+
|
6253 |
+
_process() {
|
6254 |
+
const scrollTop = this._getScrollTop() + this._config.offset;
|
6255 |
+
|
6256 |
+
const scrollHeight = this._getScrollHeight();
|
6257 |
+
|
6258 |
+
const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
|
6259 |
+
|
6260 |
+
if (this._scrollHeight !== scrollHeight) {
|
6261 |
+
this.refresh();
|
6262 |
+
}
|
6263 |
+
|
6264 |
+
if (scrollTop >= maxScroll) {
|
6265 |
+
const target = this._targets[this._targets.length - 1];
|
6266 |
+
|
6267 |
+
if (this._activeTarget !== target) {
|
6268 |
+
this._activate(target);
|
6269 |
+
}
|
6270 |
+
|
6271 |
+
return;
|
6272 |
+
}
|
6273 |
+
|
6274 |
+
if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
|
6275 |
+
this._activeTarget = null;
|
6276 |
+
|
6277 |
+
this._clear();
|
6278 |
+
|
6279 |
+
return;
|
6280 |
+
}
|
6281 |
+
|
6282 |
+
for (let i = this._offsets.length; i--;) {
|
6283 |
+
const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
|
6284 |
+
|
6285 |
+
if (isActiveTarget) {
|
6286 |
+
this._activate(this._targets[i]);
|
6287 |
+
}
|
6288 |
+
}
|
6289 |
+
}
|
6290 |
+
|
6291 |
+
_activate(target) {
|
6292 |
+
this._activeTarget = target;
|
6293 |
+
|
6294 |
+
this._clear();
|
6295 |
+
|
6296 |
+
const queries = SELECTOR_LINK_ITEMS.split(',').map(selector => `${selector}[data-bs-target="${target}"],${selector}[href="${target}"]`);
|
6297 |
+
const link = SelectorEngine.findOne(queries.join(','), this._config.target);
|
6298 |
+
link.classList.add(CLASS_NAME_ACTIVE$1);
|
6299 |
+
|
6300 |
+
if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
|
6301 |
+
SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);
|
6302 |
+
} else {
|
6303 |
+
SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {
|
6304 |
+
// Set triggered links parents as active
|
6305 |
+
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
|
6306 |
+
SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item
|
6307 |
+
|
6308 |
+
SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {
|
6309 |
+
SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));
|
6310 |
+
});
|
6311 |
+
});
|
6312 |
+
}
|
6313 |
+
|
6314 |
+
EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {
|
6315 |
+
relatedTarget: target
|
6316 |
+
});
|
6317 |
+
}
|
6318 |
+
|
6319 |
+
_clear() {
|
6320 |
+
SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));
|
6321 |
+
} // Static
|
6322 |
+
|
6323 |
+
|
6324 |
+
static jQueryInterface(config) {
|
6325 |
+
return this.each(function () {
|
6326 |
+
const data = ScrollSpy.getOrCreateInstance(this, config);
|
6327 |
+
|
6328 |
+
if (typeof config !== 'string') {
|
6329 |
+
return;
|
6330 |
+
}
|
6331 |
+
|
6332 |
+
if (typeof data[config] === 'undefined') {
|
6333 |
+
throw new TypeError(`No method named "${config}"`);
|
6334 |
+
}
|
6335 |
+
|
6336 |
+
data[config]();
|
6337 |
+
});
|
6338 |
+
}
|
6339 |
+
|
6340 |
+
}
|
6341 |
+
/**
|
6342 |
+
* ------------------------------------------------------------------------
|
6343 |
+
* Data Api implementation
|
6344 |
+
* ------------------------------------------------------------------------
|
6345 |
+
*/
|
6346 |
+
|
6347 |
+
|
6348 |
+
EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
|
6349 |
+
SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));
|
6350 |
+
});
|
6351 |
+
/**
|
6352 |
+
* ------------------------------------------------------------------------
|
6353 |
+
* jQuery
|
6354 |
+
* ------------------------------------------------------------------------
|
6355 |
+
* add .ScrollSpy to jQuery only if jQuery is present
|
6356 |
+
*/
|
6357 |
+
|
6358 |
+
defineJQueryPlugin(ScrollSpy);
|
6359 |
+
|
6360 |
+
/**
|
6361 |
+
* --------------------------------------------------------------------------
|
6362 |
+
* Bootstrap (v5.1.3): tab.js
|
6363 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
6364 |
+
* --------------------------------------------------------------------------
|
6365 |
+
*/
|
6366 |
+
/**
|
6367 |
+
* ------------------------------------------------------------------------
|
6368 |
+
* Constants
|
6369 |
+
* ------------------------------------------------------------------------
|
6370 |
+
*/
|
6371 |
+
|
6372 |
+
const NAME$1 = 'tab';
|
6373 |
+
const DATA_KEY$1 = 'bs.tab';
|
6374 |
+
const EVENT_KEY$1 = `.${DATA_KEY$1}`;
|
6375 |
+
const DATA_API_KEY = '.data-api';
|
6376 |
+
const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;
|
6377 |
+
const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;
|
6378 |
+
const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;
|
6379 |
+
const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;
|
6380 |
+
const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;
|
6381 |
+
const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
|
6382 |
+
const CLASS_NAME_ACTIVE = 'active';
|
6383 |
+
const CLASS_NAME_FADE$1 = 'fade';
|
6384 |
+
const CLASS_NAME_SHOW$1 = 'show';
|
6385 |
+
const SELECTOR_DROPDOWN = '.dropdown';
|
6386 |
+
const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
|
6387 |
+
const SELECTOR_ACTIVE = '.active';
|
6388 |
+
const SELECTOR_ACTIVE_UL = ':scope > li > .active';
|
6389 |
+
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]';
|
6390 |
+
const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
|
6391 |
+
const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';
|
6392 |
+
/**
|
6393 |
+
* ------------------------------------------------------------------------
|
6394 |
+
* Class Definition
|
6395 |
+
* ------------------------------------------------------------------------
|
6396 |
+
*/
|
6397 |
+
|
6398 |
+
class Tab extends BaseComponent {
|
6399 |
+
// Getters
|
6400 |
+
static get NAME() {
|
6401 |
+
return NAME$1;
|
6402 |
+
} // Public
|
6403 |
+
|
6404 |
+
|
6405 |
+
show() {
|
6406 |
+
if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {
|
6407 |
+
return;
|
6408 |
+
}
|
6409 |
+
|
6410 |
+
let previous;
|
6411 |
+
const target = getElementFromSelector(this._element);
|
6412 |
+
|
6413 |
+
const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);
|
6414 |
+
|
6415 |
+
if (listElement) {
|
6416 |
+
const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
|
6417 |
+
previous = SelectorEngine.find(itemSelector, listElement);
|
6418 |
+
previous = previous[previous.length - 1];
|
6419 |
+
}
|
6420 |
+
|
6421 |
+
const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {
|
6422 |
+
relatedTarget: this._element
|
6423 |
+
}) : null;
|
6424 |
+
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {
|
6425 |
+
relatedTarget: previous
|
6426 |
+
});
|
6427 |
+
|
6428 |
+
if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {
|
6429 |
+
return;
|
6430 |
+
}
|
6431 |
+
|
6432 |
+
this._activate(this._element, listElement);
|
6433 |
+
|
6434 |
+
const complete = () => {
|
6435 |
+
EventHandler.trigger(previous, EVENT_HIDDEN$1, {
|
6436 |
+
relatedTarget: this._element
|
6437 |
+
});
|
6438 |
+
EventHandler.trigger(this._element, EVENT_SHOWN$1, {
|
6439 |
+
relatedTarget: previous
|
6440 |
+
});
|
6441 |
+
};
|
6442 |
+
|
6443 |
+
if (target) {
|
6444 |
+
this._activate(target, target.parentNode, complete);
|
6445 |
+
} else {
|
6446 |
+
complete();
|
6447 |
+
}
|
6448 |
+
} // Private
|
6449 |
+
|
6450 |
+
|
6451 |
+
_activate(element, container, callback) {
|
6452 |
+
const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);
|
6453 |
+
const active = activeElements[0];
|
6454 |
+
const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);
|
6455 |
+
|
6456 |
+
const complete = () => this._transitionComplete(element, active, callback);
|
6457 |
+
|
6458 |
+
if (active && isTransitioning) {
|
6459 |
+
active.classList.remove(CLASS_NAME_SHOW$1);
|
6460 |
+
|
6461 |
+
this._queueCallback(complete, element, true);
|
6462 |
+
} else {
|
6463 |
+
complete();
|
6464 |
+
}
|
6465 |
+
}
|
6466 |
+
|
6467 |
+
_transitionComplete(element, active, callback) {
|
6468 |
+
if (active) {
|
6469 |
+
active.classList.remove(CLASS_NAME_ACTIVE);
|
6470 |
+
const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);
|
6471 |
+
|
6472 |
+
if (dropdownChild) {
|
6473 |
+
dropdownChild.classList.remove(CLASS_NAME_ACTIVE);
|
6474 |
+
}
|
6475 |
+
|
6476 |
+
if (active.getAttribute('role') === 'tab') {
|
6477 |
+
active.setAttribute('aria-selected', false);
|
6478 |
+
}
|
6479 |
+
}
|
6480 |
+
|
6481 |
+
element.classList.add(CLASS_NAME_ACTIVE);
|
6482 |
+
|
6483 |
+
if (element.getAttribute('role') === 'tab') {
|
6484 |
+
element.setAttribute('aria-selected', true);
|
6485 |
+
}
|
6486 |
+
|
6487 |
+
reflow(element);
|
6488 |
+
|
6489 |
+
if (element.classList.contains(CLASS_NAME_FADE$1)) {
|
6490 |
+
element.classList.add(CLASS_NAME_SHOW$1);
|
6491 |
+
}
|
6492 |
+
|
6493 |
+
let parent = element.parentNode;
|
6494 |
+
|
6495 |
+
if (parent && parent.nodeName === 'LI') {
|
6496 |
+
parent = parent.parentNode;
|
6497 |
+
}
|
6498 |
+
|
6499 |
+
if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {
|
6500 |
+
const dropdownElement = element.closest(SELECTOR_DROPDOWN);
|
6501 |
+
|
6502 |
+
if (dropdownElement) {
|
6503 |
+
SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));
|
6504 |
+
}
|
6505 |
+
|
6506 |
+
element.setAttribute('aria-expanded', true);
|
6507 |
+
}
|
6508 |
+
|
6509 |
+
if (callback) {
|
6510 |
+
callback();
|
6511 |
+
}
|
6512 |
+
} // Static
|
6513 |
+
|
6514 |
+
|
6515 |
+
static jQueryInterface(config) {
|
6516 |
+
return this.each(function () {
|
6517 |
+
const data = Tab.getOrCreateInstance(this);
|
6518 |
+
|
6519 |
+
if (typeof config === 'string') {
|
6520 |
+
if (typeof data[config] === 'undefined') {
|
6521 |
+
throw new TypeError(`No method named "${config}"`);
|
6522 |
+
}
|
6523 |
+
|
6524 |
+
data[config]();
|
6525 |
+
}
|
6526 |
+
});
|
6527 |
+
}
|
6528 |
+
|
6529 |
+
}
|
6530 |
+
/**
|
6531 |
+
* ------------------------------------------------------------------------
|
6532 |
+
* Data Api implementation
|
6533 |
+
* ------------------------------------------------------------------------
|
6534 |
+
*/
|
6535 |
+
|
6536 |
+
|
6537 |
+
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
6538 |
+
if (['A', 'AREA'].includes(this.tagName)) {
|
6539 |
+
event.preventDefault();
|
6540 |
+
}
|
6541 |
+
|
6542 |
+
if (isDisabled(this)) {
|
6543 |
+
return;
|
6544 |
+
}
|
6545 |
+
|
6546 |
+
const data = Tab.getOrCreateInstance(this);
|
6547 |
+
data.show();
|
6548 |
+
});
|
6549 |
+
/**
|
6550 |
+
* ------------------------------------------------------------------------
|
6551 |
+
* jQuery
|
6552 |
+
* ------------------------------------------------------------------------
|
6553 |
+
* add .Tab to jQuery only if jQuery is present
|
6554 |
+
*/
|
6555 |
+
|
6556 |
+
defineJQueryPlugin(Tab);
|
6557 |
+
|
6558 |
+
/**
|
6559 |
+
* --------------------------------------------------------------------------
|
6560 |
+
* Bootstrap (v5.1.3): toast.js
|
6561 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
6562 |
+
* --------------------------------------------------------------------------
|
6563 |
+
*/
|
6564 |
+
/**
|
6565 |
+
* ------------------------------------------------------------------------
|
6566 |
+
* Constants
|
6567 |
+
* ------------------------------------------------------------------------
|
6568 |
+
*/
|
6569 |
+
|
6570 |
+
const NAME = 'toast';
|
6571 |
+
const DATA_KEY = 'bs.toast';
|
6572 |
+
const EVENT_KEY = `.${DATA_KEY}`;
|
6573 |
+
const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;
|
6574 |
+
const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;
|
6575 |
+
const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
|
6576 |
+
const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;
|
6577 |
+
const EVENT_HIDE = `hide${EVENT_KEY}`;
|
6578 |
+
const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
|
6579 |
+
const EVENT_SHOW = `show${EVENT_KEY}`;
|
6580 |
+
const EVENT_SHOWN = `shown${EVENT_KEY}`;
|
6581 |
+
const CLASS_NAME_FADE = 'fade';
|
6582 |
+
const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
|
6583 |
+
|
6584 |
+
const CLASS_NAME_SHOW = 'show';
|
6585 |
+
const CLASS_NAME_SHOWING = 'showing';
|
6586 |
+
const DefaultType = {
|
6587 |
+
animation: 'boolean',
|
6588 |
+
autohide: 'boolean',
|
6589 |
+
delay: 'number'
|
6590 |
+
};
|
6591 |
+
const Default = {
|
6592 |
+
animation: true,
|
6593 |
+
autohide: true,
|
6594 |
+
delay: 5000
|
6595 |
+
};
|
6596 |
+
/**
|
6597 |
+
* ------------------------------------------------------------------------
|
6598 |
+
* Class Definition
|
6599 |
+
* ------------------------------------------------------------------------
|
6600 |
+
*/
|
6601 |
+
|
6602 |
+
class Toast extends BaseComponent {
|
6603 |
+
constructor(element, config) {
|
6604 |
+
super(element);
|
6605 |
+
this._config = this._getConfig(config);
|
6606 |
+
this._timeout = null;
|
6607 |
+
this._hasMouseInteraction = false;
|
6608 |
+
this._hasKeyboardInteraction = false;
|
6609 |
+
|
6610 |
+
this._setListeners();
|
6611 |
+
} // Getters
|
6612 |
+
|
6613 |
+
|
6614 |
+
static get DefaultType() {
|
6615 |
+
return DefaultType;
|
6616 |
+
}
|
6617 |
+
|
6618 |
+
static get Default() {
|
6619 |
+
return Default;
|
6620 |
+
}
|
6621 |
+
|
6622 |
+
static get NAME() {
|
6623 |
+
return NAME;
|
6624 |
+
} // Public
|
6625 |
+
|
6626 |
+
|
6627 |
+
show() {
|
6628 |
+
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);
|
6629 |
+
|
6630 |
+
if (showEvent.defaultPrevented) {
|
6631 |
+
return;
|
6632 |
+
}
|
6633 |
+
|
6634 |
+
this._clearTimeout();
|
6635 |
+
|
6636 |
+
if (this._config.animation) {
|
6637 |
+
this._element.classList.add(CLASS_NAME_FADE);
|
6638 |
+
}
|
6639 |
+
|
6640 |
+
const complete = () => {
|
6641 |
+
this._element.classList.remove(CLASS_NAME_SHOWING);
|
6642 |
+
|
6643 |
+
EventHandler.trigger(this._element, EVENT_SHOWN);
|
6644 |
+
|
6645 |
+
this._maybeScheduleHide();
|
6646 |
+
};
|
6647 |
+
|
6648 |
+
this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
|
6649 |
+
|
6650 |
+
|
6651 |
+
reflow(this._element);
|
6652 |
+
|
6653 |
+
this._element.classList.add(CLASS_NAME_SHOW);
|
6654 |
+
|
6655 |
+
this._element.classList.add(CLASS_NAME_SHOWING);
|
6656 |
+
|
6657 |
+
this._queueCallback(complete, this._element, this._config.animation);
|
6658 |
+
}
|
6659 |
+
|
6660 |
+
hide() {
|
6661 |
+
if (!this._element.classList.contains(CLASS_NAME_SHOW)) {
|
6662 |
+
return;
|
6663 |
+
}
|
6664 |
+
|
6665 |
+
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
|
6666 |
+
|
6667 |
+
if (hideEvent.defaultPrevented) {
|
6668 |
+
return;
|
6669 |
+
}
|
6670 |
+
|
6671 |
+
const complete = () => {
|
6672 |
+
this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
|
6673 |
+
|
6674 |
+
|
6675 |
+
this._element.classList.remove(CLASS_NAME_SHOWING);
|
6676 |
+
|
6677 |
+
this._element.classList.remove(CLASS_NAME_SHOW);
|
6678 |
+
|
6679 |
+
EventHandler.trigger(this._element, EVENT_HIDDEN);
|
6680 |
+
};
|
6681 |
+
|
6682 |
+
this._element.classList.add(CLASS_NAME_SHOWING);
|
6683 |
+
|
6684 |
+
this._queueCallback(complete, this._element, this._config.animation);
|
6685 |
+
}
|
6686 |
+
|
6687 |
+
dispose() {
|
6688 |
+
this._clearTimeout();
|
6689 |
+
|
6690 |
+
if (this._element.classList.contains(CLASS_NAME_SHOW)) {
|
6691 |
+
this._element.classList.remove(CLASS_NAME_SHOW);
|
6692 |
+
}
|
6693 |
+
|
6694 |
+
super.dispose();
|
6695 |
+
} // Private
|
6696 |
+
|
6697 |
+
|
6698 |
+
_getConfig(config) {
|
6699 |
+
config = { ...Default,
|
6700 |
+
...Manipulator.getDataAttributes(this._element),
|
6701 |
+
...(typeof config === 'object' && config ? config : {})
|
6702 |
+
};
|
6703 |
+
typeCheckConfig(NAME, config, this.constructor.DefaultType);
|
6704 |
+
return config;
|
6705 |
+
}
|
6706 |
+
|
6707 |
+
_maybeScheduleHide() {
|
6708 |
+
if (!this._config.autohide) {
|
6709 |
+
return;
|
6710 |
+
}
|
6711 |
+
|
6712 |
+
if (this._hasMouseInteraction || this._hasKeyboardInteraction) {
|
6713 |
+
return;
|
6714 |
+
}
|
6715 |
+
|
6716 |
+
this._timeout = setTimeout(() => {
|
6717 |
+
this.hide();
|
6718 |
+
}, this._config.delay);
|
6719 |
+
}
|
6720 |
+
|
6721 |
+
_onInteraction(event, isInteracting) {
|
6722 |
+
switch (event.type) {
|
6723 |
+
case 'mouseover':
|
6724 |
+
case 'mouseout':
|
6725 |
+
this._hasMouseInteraction = isInteracting;
|
6726 |
+
break;
|
6727 |
+
|
6728 |
+
case 'focusin':
|
6729 |
+
case 'focusout':
|
6730 |
+
this._hasKeyboardInteraction = isInteracting;
|
6731 |
+
break;
|
6732 |
+
}
|
6733 |
+
|
6734 |
+
if (isInteracting) {
|
6735 |
+
this._clearTimeout();
|
6736 |
+
|
6737 |
+
return;
|
6738 |
+
}
|
6739 |
+
|
6740 |
+
const nextElement = event.relatedTarget;
|
6741 |
+
|
6742 |
+
if (this._element === nextElement || this._element.contains(nextElement)) {
|
6743 |
+
return;
|
6744 |
+
}
|
6745 |
+
|
6746 |
+
this._maybeScheduleHide();
|
6747 |
+
}
|
6748 |
+
|
6749 |
+
_setListeners() {
|
6750 |
+
EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
|
6751 |
+
EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
|
6752 |
+
EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
|
6753 |
+
EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
|
6754 |
+
}
|
6755 |
+
|
6756 |
+
_clearTimeout() {
|
6757 |
+
clearTimeout(this._timeout);
|
6758 |
+
this._timeout = null;
|
6759 |
+
} // Static
|
6760 |
+
|
6761 |
+
|
6762 |
+
static jQueryInterface(config) {
|
6763 |
+
return this.each(function () {
|
6764 |
+
const data = Toast.getOrCreateInstance(this, config);
|
6765 |
+
|
6766 |
+
if (typeof config === 'string') {
|
6767 |
+
if (typeof data[config] === 'undefined') {
|
6768 |
+
throw new TypeError(`No method named "${config}"`);
|
6769 |
+
}
|
6770 |
+
|
6771 |
+
data[config](this);
|
6772 |
+
}
|
6773 |
+
});
|
6774 |
+
}
|
6775 |
+
|
6776 |
+
}
|
6777 |
+
|
6778 |
+
enableDismissTrigger(Toast);
|
6779 |
+
/**
|
6780 |
+
* ------------------------------------------------------------------------
|
6781 |
+
* jQuery
|
6782 |
+
* ------------------------------------------------------------------------
|
6783 |
+
* add .Toast to jQuery only if jQuery is present
|
6784 |
+
*/
|
6785 |
+
|
6786 |
+
defineJQueryPlugin(Toast);
|
6787 |
+
|
6788 |
+
/**
|
6789 |
+
* --------------------------------------------------------------------------
|
6790 |
+
* Bootstrap (v5.1.3): index.umd.js
|
6791 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
6792 |
+
* --------------------------------------------------------------------------
|
6793 |
+
*/
|
6794 |
+
const index_umd = {
|
6795 |
+
Alert,
|
6796 |
+
Button,
|
6797 |
+
Carousel,
|
6798 |
+
Collapse,
|
6799 |
+
Dropdown,
|
6800 |
+
Modal,
|
6801 |
+
Offcanvas,
|
6802 |
+
Popover,
|
6803 |
+
ScrollSpy,
|
6804 |
+
Tab,
|
6805 |
+
Toast,
|
6806 |
+
Tooltip
|
6807 |
+
};
|
6808 |
+
|
6809 |
+
return index_umd;
|
6810 |
+
|
6811 |
+
}));
|
6812 |
+
//# sourceMappingURL=bootstrap.bundle.js.map
|
js/bootstrap/js/bootstrap.bundle.min.js
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* Bootstrap v5.1.3 (https://getbootstrap.com/)
|
3 |
+
* Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
4 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
5 |
+
*/
|
6 |
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t="transitionend",e=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e},i=t=>{const i=e(t);return i&&document.querySelector(i)?i:null},n=t=>{const i=e(t);return i?document.querySelector(i):null},s=e=>{e.dispatchEvent(new Event(t))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,a=(t,e,i)=>{Object.keys(i).forEach((n=>{const s=i[n],r=e[n],a=r&&o(r)?"element":null==(l=r)?`${l}`:{}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();var l;if(!new RegExp(s).test(a))throw new TypeError(`${t.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${s}".`)}))},l=t=>!(!o(t)||0===t.getClientRects().length)&&"visible"===getComputedStyle(t).getPropertyValue("visibility"),c=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),h=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?h(t.parentNode):null},d=()=>{},u=t=>{t.offsetHeight},f=()=>{const{jQuery:t}=window;return t&&!document.body.hasAttribute("data-bs-no-jquery")?t:null},p=[],m=()=>"rtl"===document.documentElement.dir,g=t=>{var e;e=()=>{const e=f();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(p.length||document.addEventListener("DOMContentLoaded",(()=>{p.forEach((t=>t()))})),p.push(e)):e()},_=t=>{"function"==typeof t&&t()},b=(e,i,n=!0)=>{if(!n)return void _(e);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(i)+5;let r=!1;const a=({target:n})=>{n===i&&(r=!0,i.removeEventListener(t,a),_(e))};i.addEventListener(t,a),setTimeout((()=>{r||s(i)}),o)},v=(t,e,i,n)=>{let s=t.indexOf(e);if(-1===s)return t[!i&&n?t.length-1:0];const o=t.length;return s+=i?1:-1,n&&(s=(s+o)%o),t[Math.max(0,Math.min(s,o-1))]},y=/[^.]*(?=\..*)\.|.*/,w=/\..*/,E=/::\d+$/,A={};let T=1;const O={mouseenter:"mouseover",mouseleave:"mouseout"},C=/^(mouseenter|mouseleave)/i,k=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function L(t,e){return e&&`${e}::${T++}`||t.uidEvent||T++}function x(t){const e=L(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function D(t,e,i=null){const n=Object.keys(t);for(let s=0,o=n.length;s<o;s++){const o=t[n[s]];if(o.originalHandler===e&&o.delegationSelector===i)return o}return null}function S(t,e,i){const n="string"==typeof e,s=n?i:e;let o=P(t);return k.has(o)||(o=t),[n,s,o]}function N(t,e,i,n,s){if("string"!=typeof e||!t)return;if(i||(i=n,n=null),C.test(e)){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};n?n=t(n):i=t(i)}const[o,r,a]=S(e,i,n),l=x(t),c=l[a]||(l[a]={}),h=D(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=L(r,e.replace(y,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(let a=o.length;a--;)if(o[a]===r)return s.delegateTarget=r,n.oneOff&&j.off(t,s.type,e,i),i.apply(r,[s]);return null}}(t,i,n):function(t,e){return function i(n){return n.delegateTarget=t,i.oneOff&&j.off(t,n.type,e),e.apply(t,[n])}}(t,i);u.delegationSelector=o?i:null,u.originalHandler=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function I(t,e,i,n,s){const o=D(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function P(t){return t=t.replace(w,""),O[t]||t}const j={on(t,e,i,n){N(t,e,i,n,!1)},one(t,e,i,n){N(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=S(e,i,n),a=r!==e,l=x(t),c=e.startsWith(".");if(void 0!==o){if(!l||!l[r])return;return void I(t,l,r,o,s?i:null)}c&&Object.keys(l).forEach((i=>{!function(t,e,i,n){const s=e[i]||{};Object.keys(s).forEach((o=>{if(o.includes(n)){const n=s[o];I(t,e,i,n.originalHandler,n.delegationSelector)}}))}(t,l,i,e.slice(1))}));const h=l[r]||{};Object.keys(h).forEach((i=>{const n=i.replace(E,"");if(!a||e.includes(n)){const e=h[i];I(t,l,r,e.originalHandler,e.delegationSelector)}}))},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=f(),s=P(e),o=e!==s,r=k.has(s);let a,l=!0,c=!0,h=!1,d=null;return o&&n&&(a=n.Event(e,i),n(t).trigger(a),l=!a.isPropagationStopped(),c=!a.isImmediatePropagationStopped(),h=a.isDefaultPrevented()),r?(d=document.createEvent("HTMLEvents"),d.initEvent(s,l,!0)):d=new CustomEvent(e,{bubbles:l,cancelable:!0}),void 0!==i&&Object.keys(i).forEach((t=>{Object.defineProperty(d,t,{get:()=>i[t]})})),h&&d.preventDefault(),c&&t.dispatchEvent(d),d.defaultPrevented&&void 0!==a&&a.preventDefault(),d}},M=new Map,H={set(t,e,i){M.has(t)||M.set(t,new Map);const n=M.get(t);n.has(e)||0===n.size?n.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>M.has(t)&&M.get(t).get(e)||null,remove(t,e){if(!M.has(t))return;const i=M.get(t);i.delete(e),0===i.size&&M.delete(t)}};class B{constructor(t){(t=r(t))&&(this._element=t,H.set(this._element,this.constructor.DATA_KEY,this))}dispose(){H.remove(this._element,this.constructor.DATA_KEY),j.off(this._element,this.constructor.EVENT_KEY),Object.getOwnPropertyNames(this).forEach((t=>{this[t]=null}))}_queueCallback(t,e,i=!0){b(t,e,i)}static getInstance(t){return H.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.1.3"}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}}const R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,s=t.NAME;j.on(document,i,`[data-bs-dismiss="${s}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),c(this))return;const o=n(this)||this.closest(`.${s}`);t.getOrCreateInstance(o)[e]()}))};class W extends B{static get NAME(){return"alert"}close(){if(j.trigger(this._element,"close.bs.alert").defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),j.trigger(this._element,"closed.bs.alert"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=W.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(W,"close"),g(W);const $='[data-bs-toggle="button"]';class z extends B{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=z.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}function q(t){return"true"===t||"false"!==t&&(t===Number(t).toString()?Number(t):""===t||"null"===t?null:t)}function F(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}j.on(document,"click.bs.button.data-api",$,(t=>{t.preventDefault();const e=t.target.closest($);z.getOrCreateInstance(e).toggle()})),g(z);const U={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${F(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${F(e)}`)},getDataAttributes(t){if(!t)return{};const e={};return Object.keys(t.dataset).filter((t=>t.startsWith("bs"))).forEach((i=>{let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),e[n]=q(t.dataset[i])})),e},getDataAttribute:(t,e)=>q(t.getAttribute(`data-bs-${F(e)}`)),offset(t){const e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset,left:e.left+window.pageXOffset}},position:t=>({top:t.offsetTop,left:t.offsetLeft})},V={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode;for(;n&&n.nodeType===Node.ELEMENT_NODE&&3!==n.nodeType;)n.matches(e)&&i.push(n),n=n.parentNode;return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(", ");return this.find(e,t).filter((t=>!c(t)&&l(t)))}},K="carousel",X={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},Y={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},Q="next",G="prev",Z="left",J="right",tt={ArrowLeft:J,ArrowRight:Z},et="slid.bs.carousel",it="active",nt=".active.carousel-item";class st extends B{constructor(t,e){super(t),this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._indicatorsElement=V.findOne(".carousel-indicators",this._element),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent),this._addEventListeners()}static get Default(){return X}static get NAME(){return K}next(){this._slide(Q)}nextWhenVisible(){!document.hidden&&l(this._element)&&this.next()}prev(){this._slide(G)}pause(t){t||(this._isPaused=!0),V.findOne(".carousel-item-next, .carousel-item-prev",this._element)&&(s(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}cycle(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config&&this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(t){this._activeElement=V.findOne(nt,this._element);const e=this._getItemIndex(this._activeElement);if(t>this._items.length-1||t<0)return;if(this._isSliding)return void j.one(this._element,et,(()=>this.to(t)));if(e===t)return this.pause(),void this.cycle();const i=t>e?Q:G;this._slide(i,this._items[t])}_getConfig(t){return t={...X,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(K,t,Y),t}_handleSwipe(){const t=Math.abs(this.touchDeltaX);if(t<=40)return;const e=t/this.touchDeltaX;this.touchDeltaX=0,e&&this._slide(e>0?J:Z)}_addEventListeners(){this._config.keyboard&&j.on(this._element,"keydown.bs.carousel",(t=>this._keydown(t))),"hover"===this._config.pause&&(j.on(this._element,"mouseenter.bs.carousel",(t=>this.pause(t))),j.on(this._element,"mouseleave.bs.carousel",(t=>this.cycle(t)))),this._config.touch&&this._touchSupported&&this._addTouchEventListeners()}_addTouchEventListeners(){const t=t=>this._pointerEvent&&("pen"===t.pointerType||"touch"===t.pointerType),e=e=>{t(e)?this.touchStartX=e.clientX:this._pointerEvent||(this.touchStartX=e.touches[0].clientX)},i=t=>{this.touchDeltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this.touchStartX},n=e=>{t(e)&&(this.touchDeltaX=e.clientX-this.touchStartX),this._handleSwipe(),"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((t=>this.cycle(t)),500+this._config.interval))};V.find(".carousel-item img",this._element).forEach((t=>{j.on(t,"dragstart.bs.carousel",(t=>t.preventDefault()))})),this._pointerEvent?(j.on(this._element,"pointerdown.bs.carousel",(t=>e(t))),j.on(this._element,"pointerup.bs.carousel",(t=>n(t))),this._element.classList.add("pointer-event")):(j.on(this._element,"touchstart.bs.carousel",(t=>e(t))),j.on(this._element,"touchmove.bs.carousel",(t=>i(t))),j.on(this._element,"touchend.bs.carousel",(t=>n(t))))}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=tt[t.key];e&&(t.preventDefault(),this._slide(e))}_getItemIndex(t){return this._items=t&&t.parentNode?V.find(".carousel-item",t.parentNode):[],this._items.indexOf(t)}_getItemByOrder(t,e){const i=t===Q;return v(this._items,e,i,this._config.wrap)}_triggerSlideEvent(t,e){const i=this._getItemIndex(t),n=this._getItemIndex(V.findOne(nt,this._element));return j.trigger(this._element,"slide.bs.carousel",{relatedTarget:t,direction:e,from:n,to:i})}_setActiveIndicatorElement(t){if(this._indicatorsElement){const e=V.findOne(".active",this._indicatorsElement);e.classList.remove(it),e.removeAttribute("aria-current");const i=V.find("[data-bs-target]",this._indicatorsElement);for(let e=0;e<i.length;e++)if(Number.parseInt(i[e].getAttribute("data-bs-slide-to"),10)===this._getItemIndex(t)){i[e].classList.add(it),i[e].setAttribute("aria-current","true");break}}}_updateInterval(){const t=this._activeElement||V.findOne(nt,this._element);if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);e?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=e):this._config.interval=this._config.defaultInterval||this._config.interval}_slide(t,e){const i=this._directionToOrder(t),n=V.findOne(nt,this._element),s=this._getItemIndex(n),o=e||this._getItemByOrder(i,n),r=this._getItemIndex(o),a=Boolean(this._interval),l=i===Q,c=l?"carousel-item-start":"carousel-item-end",h=l?"carousel-item-next":"carousel-item-prev",d=this._orderToDirection(i);if(o&&o.classList.contains(it))return void(this._isSliding=!1);if(this._isSliding)return;if(this._triggerSlideEvent(o,d).defaultPrevented)return;if(!n||!o)return;this._isSliding=!0,a&&this.pause(),this._setActiveIndicatorElement(o),this._activeElement=o;const f=()=>{j.trigger(this._element,et,{relatedTarget:o,direction:d,from:s,to:r})};if(this._element.classList.contains("slide")){o.classList.add(h),u(o),n.classList.add(c),o.classList.add(c);const t=()=>{o.classList.remove(c,h),o.classList.add(it),n.classList.remove(it,h,c),this._isSliding=!1,setTimeout(f,0)};this._queueCallback(t,n,!0)}else n.classList.remove(it),o.classList.add(it),this._isSliding=!1,f();a&&this.cycle()}_directionToOrder(t){return[J,Z].includes(t)?m()?t===Z?G:Q:t===Z?Q:G:t}_orderToDirection(t){return[Q,G].includes(t)?m()?t===G?Z:J:t===G?J:Z:t}static carouselInterface(t,e){const i=st.getOrCreateInstance(t,e);let{_config:n}=i;"object"==typeof e&&(n={...n,...e});const s="string"==typeof e?e:n.slide;if("number"==typeof e)i.to(e);else if("string"==typeof s){if(void 0===i[s])throw new TypeError(`No method named "${s}"`);i[s]()}else n.interval&&n.ride&&(i.pause(),i.cycle())}static jQueryInterface(t){return this.each((function(){st.carouselInterface(this,t)}))}static dataApiClickHandler(t){const e=n(this);if(!e||!e.classList.contains("carousel"))return;const i={...U.getDataAttributes(e),...U.getDataAttributes(this)},s=this.getAttribute("data-bs-slide-to");s&&(i.interval=!1),st.carouselInterface(e,i),s&&st.getInstance(e).to(s),t.preventDefault()}}j.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",st.dataApiClickHandler),j.on(window,"load.bs.carousel.data-api",(()=>{const t=V.find('[data-bs-ride="carousel"]');for(let e=0,i=t.length;e<i;e++)st.carouselInterface(t[e],st.getInstance(t[e]))})),g(st);const ot="collapse",rt={toggle:!0,parent:null},at={toggle:"boolean",parent:"(null|element)"},lt="show",ct="collapse",ht="collapsing",dt="collapsed",ut=":scope .collapse .collapse",ft='[data-bs-toggle="collapse"]';class pt extends B{constructor(t,e){super(t),this._isTransitioning=!1,this._config=this._getConfig(e),this._triggerArray=[];const n=V.find(ft);for(let t=0,e=n.length;t<e;t++){const e=n[t],s=i(e),o=V.find(s).filter((t=>t===this._element));null!==s&&o.length&&(this._selector=s,this._triggerArray.push(e))}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return rt}static get NAME(){return ot}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t,e=[];if(this._config.parent){const t=V.find(ut,this._config.parent);e=V.find(".collapse.show, .collapse.collapsing",this._config.parent).filter((e=>!t.includes(e)))}const i=V.findOne(this._selector);if(e.length){const n=e.find((t=>i!==t));if(t=n?pt.getInstance(n):null,t&&t._isTransitioning)return}if(j.trigger(this._element,"show.bs.collapse").defaultPrevented)return;e.forEach((e=>{i!==e&&pt.getOrCreateInstance(e,{toggle:!1}).hide(),t||H.set(e,"bs.collapse",null)}));const n=this._getDimension();this._element.classList.remove(ct),this._element.classList.add(ht),this._element.style[n]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const s=`scroll${n[0].toUpperCase()+n.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct,lt),this._element.style[n]="",j.trigger(this._element,"shown.bs.collapse")}),this._element,!0),this._element.style[n]=`${this._element[s]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(j.trigger(this._element,"hide.bs.collapse").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,u(this._element),this._element.classList.add(ht),this._element.classList.remove(ct,lt);const e=this._triggerArray.length;for(let t=0;t<e;t++){const e=this._triggerArray[t],i=n(e);i&&!this._isShown(i)&&this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct),j.trigger(this._element,"hidden.bs.collapse")}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(lt)}_getConfig(t){return(t={...rt,...U.getDataAttributes(this._element),...t}).toggle=Boolean(t.toggle),t.parent=r(t.parent),a(ot,t,at),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=V.find(ut,this._config.parent);V.find(ft,this._config.parent).filter((e=>!t.includes(e))).forEach((t=>{const e=n(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}))}_addAriaAndCollapsedClass(t,e){t.length&&t.forEach((t=>{e?t.classList.remove(dt):t.classList.add(dt),t.setAttribute("aria-expanded",e)}))}static jQueryInterface(t){return this.each((function(){const e={};"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1);const i=pt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}j.on(document,"click.bs.collapse.data-api",ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();const e=i(this);V.find(e).forEach((t=>{pt.getOrCreateInstance(t,{toggle:!1}).toggle()}))})),g(pt);var mt="top",gt="bottom",_t="right",bt="left",vt="auto",yt=[mt,gt,_t,bt],wt="start",Et="end",At="clippingParents",Tt="viewport",Ot="popper",Ct="reference",kt=yt.reduce((function(t,e){return t.concat([e+"-"+wt,e+"-"+Et])}),[]),Lt=[].concat(yt,[vt]).reduce((function(t,e){return t.concat([e,e+"-"+wt,e+"-"+Et])}),[]),xt="beforeRead",Dt="read",St="afterRead",Nt="beforeMain",It="main",Pt="afterMain",jt="beforeWrite",Mt="write",Ht="afterWrite",Bt=[xt,Dt,St,Nt,It,Pt,jt,Mt,Ht];function Rt(t){return t?(t.nodeName||"").toLowerCase():null}function Wt(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function $t(t){return t instanceof Wt(t).Element||t instanceof Element}function zt(t){return t instanceof Wt(t).HTMLElement||t instanceof HTMLElement}function qt(t){return"undefined"!=typeof ShadowRoot&&(t instanceof Wt(t).ShadowRoot||t instanceof ShadowRoot)}const Ft={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];zt(s)&&Rt(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});zt(n)&&Rt(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function Ut(t){return t.split("-")[0]}function Vt(t,e){var i=t.getBoundingClientRect();return{width:i.width/1,height:i.height/1,top:i.top/1,right:i.right/1,bottom:i.bottom/1,left:i.left/1,x:i.left/1,y:i.top/1}}function Kt(t){var e=Vt(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Xt(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&qt(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function Yt(t){return Wt(t).getComputedStyle(t)}function Qt(t){return["table","td","th"].indexOf(Rt(t))>=0}function Gt(t){return(($t(t)?t.ownerDocument:t.document)||window.document).documentElement}function Zt(t){return"html"===Rt(t)?t:t.assignedSlot||t.parentNode||(qt(t)?t.host:null)||Gt(t)}function Jt(t){return zt(t)&&"fixed"!==Yt(t).position?t.offsetParent:null}function te(t){for(var e=Wt(t),i=Jt(t);i&&Qt(i)&&"static"===Yt(i).position;)i=Jt(i);return i&&("html"===Rt(i)||"body"===Rt(i)&&"static"===Yt(i).position)?e:i||function(t){var e=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&zt(t)&&"fixed"===Yt(t).position)return null;for(var i=Zt(t);zt(i)&&["html","body"].indexOf(Rt(i))<0;){var n=Yt(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function ee(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}var ie=Math.max,ne=Math.min,se=Math.round;function oe(t,e,i){return ie(t,ne(e,i))}function re(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function ae(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const le={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=Ut(i.placement),l=ee(a),c=[bt,_t].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return re("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:ae(t,yt))}(s.padding,i),d=Kt(o),u="y"===l?mt:bt,f="y"===l?gt:_t,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=te(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,E=oe(v,w,y),A=l;i.modifiersData[n]=((e={})[A]=E,e.centerOffset=E-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Xt(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ce(t){return t.split("-")[1]}var he={top:"auto",right:"auto",bottom:"auto",left:"auto"};function de(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=!0===h?function(t){var e=t.x,i=t.y,n=window.devicePixelRatio||1;return{x:se(se(e*n)/n)||0,y:se(se(i*n)/n)||0}}(r):"function"==typeof h?h(r):r,u=d.x,f=void 0===u?0:u,p=d.y,m=void 0===p?0:p,g=r.hasOwnProperty("x"),_=r.hasOwnProperty("y"),b=bt,v=mt,y=window;if(c){var w=te(i),E="clientHeight",A="clientWidth";w===Wt(i)&&"static"!==Yt(w=Gt(i)).position&&"absolute"===a&&(E="scrollHeight",A="scrollWidth"),w=w,s!==mt&&(s!==bt&&s!==_t||o!==Et)||(v=gt,m-=w[E]-n.height,m*=l?1:-1),s!==bt&&(s!==mt&&s!==gt||o!==Et)||(b=_t,f-=w[A]-n.width,f*=l?1:-1)}var T,O=Object.assign({position:a},c&&he);return l?Object.assign({},O,((T={})[v]=_?"0":"",T[b]=g?"0":"",T.transform=(y.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",T)):Object.assign({},O,((e={})[v]=_?m+"px":"",e[b]=g?f+"px":"",e.transform="",e))}const ue={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:Ut(e.placement),variation:ce(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,de(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,de(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var fe={passive:!0};const pe={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=Wt(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,fe)})),a&&l.addEventListener("resize",i.update,fe),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,fe)})),a&&l.removeEventListener("resize",i.update,fe)}},data:{}};var me={left:"right",right:"left",bottom:"top",top:"bottom"};function ge(t){return t.replace(/left|right|bottom|top/g,(function(t){return me[t]}))}var _e={start:"end",end:"start"};function be(t){return t.replace(/start|end/g,(function(t){return _e[t]}))}function ve(t){var e=Wt(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ye(t){return Vt(Gt(t)).left+ve(t).scrollLeft}function we(t){var e=Yt(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ee(t){return["html","body","#document"].indexOf(Rt(t))>=0?t.ownerDocument.body:zt(t)&&we(t)?t:Ee(Zt(t))}function Ae(t,e){var i;void 0===e&&(e=[]);var n=Ee(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=Wt(n),r=s?[o].concat(o.visualViewport||[],we(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Ae(Zt(r)))}function Te(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Oe(t,e){return e===Tt?Te(function(t){var e=Wt(t),i=Gt(t),n=e.visualViewport,s=i.clientWidth,o=i.clientHeight,r=0,a=0;return n&&(s=n.width,o=n.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(r=n.offsetLeft,a=n.offsetTop)),{width:s,height:o,x:r+ye(t),y:a}}(t)):zt(e)?function(t){var e=Vt(t);return e.top=e.top+t.clientTop,e.left=e.left+t.clientLeft,e.bottom=e.top+t.clientHeight,e.right=e.left+t.clientWidth,e.width=t.clientWidth,e.height=t.clientHeight,e.x=e.left,e.y=e.top,e}(e):Te(function(t){var e,i=Gt(t),n=ve(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ie(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ie(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ye(t),l=-n.scrollTop;return"rtl"===Yt(s||i).direction&&(a+=ie(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Gt(t)))}function Ce(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?Ut(s):null,r=s?ce(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case mt:e={x:a,y:i.y-n.height};break;case gt:e={x:a,y:i.y+i.height};break;case _t:e={x:i.x+i.width,y:l};break;case bt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?ee(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case wt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Et:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ke(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.boundary,r=void 0===o?At:o,a=i.rootBoundary,l=void 0===a?Tt:a,c=i.elementContext,h=void 0===c?Ot:c,d=i.altBoundary,u=void 0!==d&&d,f=i.padding,p=void 0===f?0:f,m=re("number"!=typeof p?p:ae(p,yt)),g=h===Ot?Ct:Ot,_=t.rects.popper,b=t.elements[u?g:h],v=function(t,e,i){var n="clippingParents"===e?function(t){var e=Ae(Zt(t)),i=["absolute","fixed"].indexOf(Yt(t).position)>=0&&zt(t)?te(t):t;return $t(i)?e.filter((function(t){return $t(t)&&Xt(t,i)&&"body"!==Rt(t)})):[]}(t):[].concat(e),s=[].concat(n,[i]),o=s[0],r=s.reduce((function(e,i){var n=Oe(t,i);return e.top=ie(n.top,e.top),e.right=ne(n.right,e.right),e.bottom=ne(n.bottom,e.bottom),e.left=ie(n.left,e.left),e}),Oe(t,o));return r.width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}($t(b)?b:b.contextElement||Gt(t.elements.popper),r,l),y=Vt(t.elements.reference),w=Ce({reference:y,element:_,strategy:"absolute",placement:s}),E=Te(Object.assign({},_,w)),A=h===Ot?E:y,T={top:v.top-A.top+m.top,bottom:A.bottom-v.bottom+m.bottom,left:v.left-A.left+m.left,right:A.right-v.right+m.right},O=t.modifiersData.offset;if(h===Ot&&O){var C=O[s];Object.keys(T).forEach((function(t){var e=[_t,gt].indexOf(t)>=0?1:-1,i=[mt,gt].indexOf(t)>=0?"y":"x";T[t]+=C[i]*e}))}return T}function Le(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?Lt:l,h=ce(n),d=h?a?kt:kt.filter((function(t){return ce(t)===h})):yt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ke(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[Ut(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const xe={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=Ut(g),b=l||(_!==g&&p?function(t){if(Ut(t)===vt)return[];var e=ge(t);return[be(t),e,be(e)]}(g):[ge(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(Ut(i)===vt?Le(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,E=new Map,A=!0,T=v[0],O=0;O<v.length;O++){var C=v[O],k=Ut(C),L=ce(C)===wt,x=[mt,gt].indexOf(k)>=0,D=x?"width":"height",S=ke(e,{placement:C,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),N=x?L?_t:bt:L?gt:mt;y[D]>w[D]&&(N=ge(N));var I=ge(N),P=[];if(o&&P.push(S[k]<=0),a&&P.push(S[N]<=0,S[I]<=0),P.every((function(t){return t}))){T=C,A=!1;break}E.set(C,P)}if(A)for(var j=function(t){var e=v.find((function(e){var i=E.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==j(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function De(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Se(t){return[mt,_t,gt,bt].some((function(e){return t[e]>=0}))}const Ne={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ke(e,{elementContext:"reference"}),a=ke(e,{altBoundary:!0}),l=De(r,n),c=De(a,s,o),h=Se(l),d=Se(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},Ie={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=Lt.reduce((function(t,i){return t[i]=function(t,e,i){var n=Ut(t),s=[bt,mt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[bt,_t].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},Pe={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=Ce({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},je={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ke(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=Ut(e.placement),b=ce(e.placement),v=!b,y=ee(_),w="x"===y?"y":"x",E=e.modifiersData.popperOffsets,A=e.rects.reference,T=e.rects.popper,O="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,C={x:0,y:0};if(E){if(o||a){var k="y"===y?mt:bt,L="y"===y?gt:_t,x="y"===y?"height":"width",D=E[y],S=E[y]+g[k],N=E[y]-g[L],I=f?-T[x]/2:0,P=b===wt?A[x]:T[x],j=b===wt?-T[x]:-A[x],M=e.elements.arrow,H=f&&M?Kt(M):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},R=B[k],W=B[L],$=oe(0,A[x],H[x]),z=v?A[x]/2-I-$-R-O:P-$-R-O,q=v?-A[x]/2+I+$+W+O:j+$+W+O,F=e.elements.arrow&&te(e.elements.arrow),U=F?"y"===y?F.clientTop||0:F.clientLeft||0:0,V=e.modifiersData.offset?e.modifiersData.offset[e.placement][y]:0,K=E[y]+z-V-U,X=E[y]+q-V;if(o){var Y=oe(f?ne(S,K):S,D,f?ie(N,X):N);E[y]=Y,C[y]=Y-D}if(a){var Q="x"===y?mt:bt,G="x"===y?gt:_t,Z=E[w],J=Z+g[Q],tt=Z-g[G],et=oe(f?ne(J,K):J,Z,f?ie(tt,X):tt);E[w]=et,C[w]=et-Z}}e.modifiersData[n]=C}},requiresIfExists:["offset"]};function Me(t,e,i){void 0===i&&(i=!1);var n=zt(e);zt(e)&&function(t){var e=t.getBoundingClientRect();e.width,t.offsetWidth,e.height,t.offsetHeight}(e);var s,o,r=Gt(e),a=Vt(t),l={scrollLeft:0,scrollTop:0},c={x:0,y:0};return(n||!n&&!i)&&(("body"!==Rt(e)||we(r))&&(l=(s=e)!==Wt(s)&&zt(s)?{scrollLeft:(o=s).scrollLeft,scrollTop:o.scrollTop}:ve(s)),zt(e)?((c=Vt(e)).x+=e.clientLeft,c.y+=e.clientTop):r&&(c.x=ye(r))),{x:a.left+l.scrollLeft-c.x,y:a.top+l.scrollTop-c.y,width:a.width,height:a.height}}function He(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var Be={placement:"bottom",modifiers:[],strategy:"absolute"};function Re(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return!e.some((function(t){return!(t&&"function"==typeof t.getBoundingClientRect)}))}function We(t){void 0===t&&(t={});var e=t,i=e.defaultModifiers,n=void 0===i?[]:i,s=e.defaultOptions,o=void 0===s?Be:s;return function(t,e,i){void 0===i&&(i=o);var s,r,a={placement:"bottom",orderedModifiers:[],options:Object.assign({},Be,o),modifiersData:{},elements:{reference:t,popper:e},attributes:{},styles:{}},l=[],c=!1,h={state:a,setOptions:function(i){var s="function"==typeof i?i(a.options):i;d(),a.options=Object.assign({},o,a.options,s),a.scrollParents={reference:$t(t)?Ae(t):t.contextElement?Ae(t.contextElement):[],popper:Ae(e)};var r,c,u=function(t){var e=He(t);return Bt.reduce((function(t,i){return t.concat(e.filter((function(t){return t.phase===i})))}),[])}((r=[].concat(n,a.options.modifiers),c=r.reduce((function(t,e){var i=t[e.name];return t[e.name]=i?Object.assign({},i,e,{options:Object.assign({},i.options,e.options),data:Object.assign({},i.data,e.data)}):e,t}),{}),Object.keys(c).map((function(t){return c[t]}))));return a.orderedModifiers=u.filter((function(t){return t.enabled})),a.orderedModifiers.forEach((function(t){var e=t.name,i=t.options,n=void 0===i?{}:i,s=t.effect;if("function"==typeof s){var o=s({state:a,name:e,instance:h,options:n});l.push(o||function(){})}})),h.update()},forceUpdate:function(){if(!c){var t=a.elements,e=t.reference,i=t.popper;if(Re(e,i)){a.rects={reference:Me(e,te(i),"fixed"===a.options.strategy),popper:Kt(i)},a.reset=!1,a.placement=a.options.placement,a.orderedModifiers.forEach((function(t){return a.modifiersData[t.name]=Object.assign({},t.data)}));for(var n=0;n<a.orderedModifiers.length;n++)if(!0!==a.reset){var s=a.orderedModifiers[n],o=s.fn,r=s.options,l=void 0===r?{}:r,d=s.name;"function"==typeof o&&(a=o({state:a,options:l,name:d,instance:h})||a)}else a.reset=!1,n=-1}}},update:(s=function(){return new Promise((function(t){h.forceUpdate(),t(a)}))},function(){return r||(r=new Promise((function(t){Promise.resolve().then((function(){r=void 0,t(s())}))}))),r}),destroy:function(){d(),c=!0}};if(!Re(t,e))return h;function d(){l.forEach((function(t){return t()})),l=[]}return h.setOptions(i).then((function(t){!c&&i.onFirstUpdate&&i.onFirstUpdate(t)})),h}}var $e=We(),ze=We({defaultModifiers:[pe,Pe,ue,Ft]}),qe=We({defaultModifiers:[pe,Pe,ue,Ft,Ie,xe,je,le,Ne]});const Fe=Object.freeze({__proto__:null,popperGenerator:We,detectOverflow:ke,createPopperBase:$e,createPopper:qe,createPopperLite:ze,top:mt,bottom:gt,right:_t,left:bt,auto:vt,basePlacements:yt,start:wt,end:Et,clippingParents:At,viewport:Tt,popper:Ot,reference:Ct,variationPlacements:kt,placements:Lt,beforeRead:xt,read:Dt,afterRead:St,beforeMain:Nt,main:It,afterMain:Pt,beforeWrite:jt,write:Mt,afterWrite:Ht,modifierPhases:Bt,applyStyles:Ft,arrow:le,computeStyles:ue,eventListeners:pe,flip:xe,hide:Ne,offset:Ie,popperOffsets:Pe,preventOverflow:je}),Ue="dropdown",Ve="Escape",Ke="Space",Xe="ArrowUp",Ye="ArrowDown",Qe=new RegExp("ArrowUp|ArrowDown|Escape"),Ge="click.bs.dropdown.data-api",Ze="keydown.bs.dropdown.data-api",Je="show",ti='[data-bs-toggle="dropdown"]',ei=".dropdown-menu",ii=m()?"top-end":"top-start",ni=m()?"top-start":"top-end",si=m()?"bottom-end":"bottom-start",oi=m()?"bottom-start":"bottom-end",ri=m()?"left-start":"right-start",ai=m()?"right-start":"left-start",li={offset:[0,2],boundary:"clippingParents",reference:"toggle",display:"dynamic",popperConfig:null,autoClose:!0},ci={offset:"(array|string|function)",boundary:"(string|element)",reference:"(string|element|object)",display:"string",popperConfig:"(null|object|function)",autoClose:"(boolean|string)"};class hi extends B{constructor(t,e){super(t),this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar()}static get Default(){return li}static get DefaultType(){return ci}static get NAME(){return Ue}toggle(){return this._isShown()?this.hide():this.show()}show(){if(c(this._element)||this._isShown(this._menu))return;const t={relatedTarget:this._element};if(j.trigger(this._element,"show.bs.dropdown",t).defaultPrevented)return;const e=hi.getParentFromElement(this._element);this._inNavbar?U.setDataAttribute(this._menu,"popper","none"):this._createPopper(e),"ontouchstart"in document.documentElement&&!e.closest(".navbar-nav")&&[].concat(...document.body.children).forEach((t=>j.on(t,"mouseover",d))),this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Je),this._element.classList.add(Je),j.trigger(this._element,"shown.bs.dropdown",t)}hide(){if(c(this._element)||!this._isShown(this._menu))return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){j.trigger(this._element,"hide.bs.dropdown",t).defaultPrevented||("ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>j.off(t,"mouseover",d))),this._popper&&this._popper.destroy(),this._menu.classList.remove(Je),this._element.classList.remove(Je),this._element.setAttribute("aria-expanded","false"),U.removeDataAttribute(this._menu,"popper"),j.trigger(this._element,"hidden.bs.dropdown",t))}_getConfig(t){if(t={...this.constructor.Default,...U.getDataAttributes(this._element),...t},a(Ue,t,this.constructor.DefaultType),"object"==typeof t.reference&&!o(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${Ue.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(t){if(void 0===Fe)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;"parent"===this._config.reference?e=t:o(this._config.reference)?e=r(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const i=this._getPopperConfig(),n=i.modifiers.find((t=>"applyStyles"===t.name&&!1===t.enabled));this._popper=qe(e,this._menu,i),n&&U.setDataAttribute(this._menu,"popper","static")}_isShown(t=this._element){return t.classList.contains(Je)}_getMenuElement(){return V.next(this._element,ei)[0]}_getPlacement(){const t=this._element.parentNode;if(t.classList.contains("dropend"))return ri;if(t.classList.contains("dropstart"))return ai;const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?ni:ii:e?oi:si}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return"static"===this._config.display&&(t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i=V.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(l);i.length&&v(i,e,t===Ye,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=hi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(t&&(2===t.button||"keyup"===t.type&&"Tab"!==t.key))return;const e=V.find(ti);for(let i=0,n=e.length;i<n;i++){const n=hi.getInstance(e[i]);if(!n||!1===n._config.autoClose)continue;if(!n._isShown())continue;const s={relatedTarget:n._element};if(t){const e=t.composedPath(),i=e.includes(n._menu);if(e.includes(n._element)||"inside"===n._config.autoClose&&!i||"outside"===n._config.autoClose&&i)continue;if(n._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;"click"===t.type&&(s.clickEvent=t)}n._completeHide(s)}}static getParentFromElement(t){return n(t)||t.parentNode}static dataApiKeydownHandler(t){if(/input|textarea/i.test(t.target.tagName)?t.key===Ke||t.key!==Ve&&(t.key!==Ye&&t.key!==Xe||t.target.closest(ei)):!Qe.test(t.key))return;const e=this.classList.contains(Je);if(!e&&t.key===Ve)return;if(t.preventDefault(),t.stopPropagation(),c(this))return;const i=this.matches(ti)?this:V.prev(this,ti)[0],n=hi.getOrCreateInstance(i);if(t.key!==Ve)return t.key===Xe||t.key===Ye?(e||n.show(),void n._selectMenuItem(t)):void(e&&t.key!==Ke||hi.clearMenus());n.hide()}}j.on(document,Ze,ti,hi.dataApiKeydownHandler),j.on(document,Ze,ei,hi.dataApiKeydownHandler),j.on(document,Ge,hi.clearMenus),j.on(document,"keyup.bs.dropdown.data-api",hi.clearMenus),j.on(document,Ge,ti,(function(t){t.preventDefault(),hi.getOrCreateInstance(this).toggle()})),g(hi);const di=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",ui=".sticky-top";class fi{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,"paddingRight",(e=>e+t)),this._setElementAttributes(di,"paddingRight",(e=>e+t)),this._setElementAttributes(ui,"marginRight",(e=>e-t))}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t)[e];t.style[e]=`${i(Number.parseFloat(s))}px`}))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,"paddingRight"),this._resetElementAttributes(di,"paddingRight"),this._resetElementAttributes(ui,"marginRight")}_saveInitialAttribute(t,e){const i=t.style[e];i&&U.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=U.getDataAttribute(t,e);void 0===i?t.style.removeProperty(e):(U.removeDataAttribute(t,e),t.style[e]=i)}))}_applyManipulationCallback(t,e){o(t)?e(t):V.find(t,this._element).forEach(e)}isOverflowing(){return this.getWidth()>0}}const pi={className:"modal-backdrop",isVisible:!0,isAnimated:!1,rootElement:"body",clickCallback:null},mi={className:"string",isVisible:"boolean",isAnimated:"boolean",rootElement:"(element|string)",clickCallback:"(function|null)"},gi="show",_i="mousedown.bs.backdrop";class bi{constructor(t){this._config=this._getConfig(t),this._isAppended=!1,this._element=null}show(t){this._config.isVisible?(this._append(),this._config.isAnimated&&u(this._getElement()),this._getElement().classList.add(gi),this._emulateAnimation((()=>{_(t)}))):_(t)}hide(t){this._config.isVisible?(this._getElement().classList.remove(gi),this._emulateAnimation((()=>{this.dispose(),_(t)}))):_(t)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_getConfig(t){return(t={...pi,..."object"==typeof t?t:{}}).rootElement=r(t.rootElement),a("backdrop",t,mi),t}_append(){this._isAppended||(this._config.rootElement.append(this._getElement()),j.on(this._getElement(),_i,(()=>{_(this._config.clickCallback)})),this._isAppended=!0)}dispose(){this._isAppended&&(j.off(this._element,_i),this._element.remove(),this._isAppended=!1)}_emulateAnimation(t){b(t,this._getElement(),this._config.isAnimated)}}const vi={trapElement:null,autofocus:!0},yi={trapElement:"element",autofocus:"boolean"},wi=".bs.focustrap",Ei="backward";class Ai{constructor(t){this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}activate(){const{trapElement:t,autofocus:e}=this._config;this._isActive||(e&&t.focus(),j.off(document,wi),j.on(document,"focusin.bs.focustrap",(t=>this._handleFocusin(t))),j.on(document,"keydown.tab.bs.focustrap",(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,j.off(document,wi))}_handleFocusin(t){const{target:e}=t,{trapElement:i}=this._config;if(e===document||e===i||i.contains(e))return;const n=V.focusableChildren(i);0===n.length?i.focus():this._lastTabNavDirection===Ei?n[n.length-1].focus():n[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?Ei:"forward")}_getConfig(t){return t={...vi,..."object"==typeof t?t:{}},a("focustrap",t,yi),t}}const Ti="modal",Oi="Escape",Ci={backdrop:!0,keyboard:!0,focus:!0},ki={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean"},Li="hidden.bs.modal",xi="show.bs.modal",Di="resize.bs.modal",Si="click.dismiss.bs.modal",Ni="keydown.dismiss.bs.modal",Ii="mousedown.dismiss.bs.modal",Pi="modal-open",ji="show",Mi="modal-static";class Hi extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._dialog=V.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollBar=new fi}static get Default(){return Ci}static get NAME(){return Ti}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||j.trigger(this._element,xi,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isAnimated()&&(this._isTransitioning=!0),this._scrollBar.hide(),document.body.classList.add(Pi),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),j.on(this._dialog,Ii,(()=>{j.one(this._element,"mouseup.dismiss.bs.modal",(t=>{t.target===this._element&&(this._ignoreBackdropClick=!0)}))})),this._showBackdrop((()=>this._showElement(t))))}hide(){if(!this._isShown||this._isTransitioning)return;if(j.trigger(this._element,"hide.bs.modal").defaultPrevented)return;this._isShown=!1;const t=this._isAnimated();t&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),this._focustrap.deactivate(),this._element.classList.remove(ji),j.off(this._element,Si),j.off(this._dialog,Ii),this._queueCallback((()=>this._hideModal()),this._element,t)}dispose(){[window,this._dialog].forEach((t=>j.off(t,".bs.modal"))),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new bi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_getConfig(t){return t={...Ci,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(Ti,t,ki),t}_showElement(t){const e=this._isAnimated(),i=V.findOne(".modal-body",this._dialog);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0,i&&(i.scrollTop=0),e&&u(this._element),this._element.classList.add(ji),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,j.trigger(this._element,"shown.bs.modal",{relatedTarget:t})}),this._dialog,e)}_setEscapeEvent(){this._isShown?j.on(this._element,Ni,(t=>{this._config.keyboard&&t.key===Oi?(t.preventDefault(),this.hide()):this._config.keyboard||t.key!==Oi||this._triggerBackdropTransition()})):j.off(this._element,Ni)}_setResizeEvent(){this._isShown?j.on(window,Di,(()=>this._adjustDialog())):j.off(window,Di)}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(Pi),this._resetAdjustments(),this._scrollBar.reset(),j.trigger(this._element,Li)}))}_showBackdrop(t){j.on(this._element,Si,(t=>{this._ignoreBackdropClick?this._ignoreBackdropClick=!1:t.target===t.currentTarget&&(!0===this._config.backdrop?this.hide():"static"===this._config.backdrop&&this._triggerBackdropTransition())})),this._backdrop.show(t)}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(j.trigger(this._element,"hidePrevented.bs.modal").defaultPrevented)return;const{classList:t,scrollHeight:e,style:i}=this._element,n=e>document.documentElement.clientHeight;!n&&"hidden"===i.overflowY||t.contains(Mi)||(n||(i.overflowY="hidden"),t.add(Mi),this._queueCallback((()=>{t.remove(Mi),n||this._queueCallback((()=>{i.overflowY=""}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;(!i&&t&&!m()||i&&!t&&m())&&(this._element.style.paddingLeft=`${e}px`),(i&&!t&&!m()||!i&&t&&m())&&(this._element.style.paddingRight=`${e}px`)}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=Hi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}j.on(document,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',(function(t){const e=n(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),j.one(e,xi,(t=>{t.defaultPrevented||j.one(e,Li,(()=>{l(this)&&this.focus()}))}));const i=V.findOne(".modal.show");i&&Hi.getInstance(i).hide(),Hi.getOrCreateInstance(e).toggle(this)})),R(Hi),g(Hi);const Bi="offcanvas",Ri={backdrop:!0,keyboard:!0,scroll:!1},Wi={backdrop:"boolean",keyboard:"boolean",scroll:"boolean"},$i="show",zi=".offcanvas.show",qi="hidden.bs.offcanvas";class Fi extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get NAME(){return Bi}static get Default(){return Ri}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||j.trigger(this._element,"show.bs.offcanvas",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._element.style.visibility="visible",this._backdrop.show(),this._config.scroll||(new fi).hide(),this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add($i),this._queueCallback((()=>{this._config.scroll||this._focustrap.activate(),j.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(j.trigger(this._element,"hide.bs.offcanvas").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.remove($i),this._backdrop.hide(),this._queueCallback((()=>{this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._element.style.visibility="hidden",this._config.scroll||(new fi).reset(),j.trigger(this._element,qi)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_getConfig(t){return t={...Ri,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(Bi,t,Wi),t}_initializeBackDrop(){return new bi({className:"offcanvas-backdrop",isVisible:this._config.backdrop,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:()=>this.hide()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_addEventListeners(){j.on(this._element,"keydown.dismiss.bs.offcanvas",(t=>{this._config.keyboard&&"Escape"===t.key&&this.hide()}))}static jQueryInterface(t){return this.each((function(){const e=Fi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}j.on(document,"click.bs.offcanvas.data-api",'[data-bs-toggle="offcanvas"]',(function(t){const e=n(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this))return;j.one(e,qi,(()=>{l(this)&&this.focus()}));const i=V.findOne(zi);i&&i!==e&&Fi.getInstance(i).hide(),Fi.getOrCreateInstance(e).toggle(this)})),j.on(window,"load.bs.offcanvas.data-api",(()=>V.find(zi).forEach((t=>Fi.getOrCreateInstance(t).show())))),R(Fi),g(Fi);const Ui=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Vi=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,Ki=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,Xi=(t,e)=>{const i=t.nodeName.toLowerCase();if(e.includes(i))return!Ui.has(i)||Boolean(Vi.test(t.nodeValue)||Ki.test(t.nodeValue));const n=e.filter((t=>t instanceof RegExp));for(let t=0,e=n.length;t<e;t++)if(n[t].test(i))return!0;return!1};function Yi(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(let t=0,i=s.length;t<i;t++){const i=s[t],n=i.nodeName.toLowerCase();if(!Object.keys(e).includes(n)){i.remove();continue}const o=[].concat(...i.attributes),r=[].concat(e["*"]||[],e[n]||[]);o.forEach((t=>{Xi(t,r)||i.removeAttribute(t.nodeName)}))}return n.body.innerHTML}const Qi="tooltip",Gi=new Set(["sanitize","allowList","sanitizeFn"]),Zi={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(array|string|function)",container:"(string|element|boolean)",fallbackPlacements:"array",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",allowList:"object",popperConfig:"(null|object|function)"},Ji={AUTO:"auto",TOP:"top",RIGHT:m()?"left":"right",BOTTOM:"bottom",LEFT:m()?"right":"left"},tn={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:[0,0],container:!1,fallbackPlacements:["top","right","bottom","left"],boundary:"clippingParents",customClass:"",sanitize:!0,sanitizeFn:null,allowList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},en={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},nn="fade",sn="show",on="show",rn="out",an=".tooltip-inner",ln=".modal",cn="hide.bs.modal",hn="hover",dn="focus";class un extends B{constructor(t,e){if(void 0===Fe)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t),this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this._config=this._getConfig(e),this.tip=null,this._setListeners()}static get Default(){return tn}static get NAME(){return Qi}static get Event(){return en}static get DefaultType(){return Zi}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(t){if(this._isEnabled)if(t){const e=this._initializeOnDelegatedTarget(t);e._activeTrigger.click=!e._activeTrigger.click,e._isWithActiveTrigger()?e._enter(null,e):e._leave(null,e)}else{if(this.getTipElement().classList.contains(sn))return void this._leave(null,this);this._enter(null,this)}}dispose(){clearTimeout(this._timeout),j.off(this._element.closest(ln),cn,this._hideModalHandler),this.tip&&this.tip.remove(),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this.isWithContent()||!this._isEnabled)return;const t=j.trigger(this._element,this.constructor.Event.SHOW),e=h(this._element),i=null===e?this._element.ownerDocument.documentElement.contains(this._element):e.contains(this._element);if(t.defaultPrevented||!i)return;"tooltip"===this.constructor.NAME&&this.tip&&this.getTitle()!==this.tip.querySelector(an).innerHTML&&(this._disposePopper(),this.tip.remove(),this.tip=null);const n=this.getTipElement(),s=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME);n.setAttribute("id",s),this._element.setAttribute("aria-describedby",s),this._config.animation&&n.classList.add(nn);const o="function"==typeof this._config.placement?this._config.placement.call(this,n,this._element):this._config.placement,r=this._getAttachment(o);this._addAttachmentClass(r);const{container:a}=this._config;H.set(n,this.constructor.DATA_KEY,this),this._element.ownerDocument.documentElement.contains(this.tip)||(a.append(n),j.trigger(this._element,this.constructor.Event.INSERTED)),this._popper?this._popper.update():this._popper=qe(this._element,n,this._getPopperConfig(r)),n.classList.add(sn);const l=this._resolvePossibleFunction(this._config.customClass);l&&n.classList.add(...l.split(" ")),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>{j.on(t,"mouseover",d)}));const c=this.tip.classList.contains(nn);this._queueCallback((()=>{const t=this._hoverState;this._hoverState=null,j.trigger(this._element,this.constructor.Event.SHOWN),t===rn&&this._leave(null,this)}),this.tip,c)}hide(){if(!this._popper)return;const t=this.getTipElement();if(j.trigger(this._element,this.constructor.Event.HIDE).defaultPrevented)return;t.classList.remove(sn),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>j.off(t,"mouseover",d))),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1;const e=this.tip.classList.contains(nn);this._queueCallback((()=>{this._isWithActiveTrigger()||(this._hoverState!==on&&t.remove(),this._cleanTipClass(),this._element.removeAttribute("aria-describedby"),j.trigger(this._element,this.constructor.Event.HIDDEN),this._disposePopper())}),this.tip,e),this._hoverState=""}update(){null!==this._popper&&this._popper.update()}isWithContent(){return Boolean(this.getTitle())}getTipElement(){if(this.tip)return this.tip;const t=document.createElement("div");t.innerHTML=this._config.template;const e=t.children[0];return this.setContent(e),e.classList.remove(nn,sn),this.tip=e,this.tip}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),an)}_sanitizeAndSetContent(t,e,i){const n=V.findOne(i,t);e||!n?this.setElementContent(n,e):n.remove()}setElementContent(t,e){if(null!==t)return o(e)?(e=r(e),void(this._config.html?e.parentNode!==t&&(t.innerHTML="",t.append(e)):t.textContent=e.textContent)):void(this._config.html?(this._config.sanitize&&(e=Yi(e,this._config.allowList,this._config.sanitizeFn)),t.innerHTML=e):t.textContent=e)}getTitle(){const t=this._element.getAttribute("data-bs-original-title")||this._config.title;return this._resolvePossibleFunction(t)}updateAttachment(t){return"right"===t?"end":"left"===t?"start":t}_initializeOnDelegatedTarget(t,e){return e||this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return"function"==typeof t?t.call(this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"onChange",enabled:!0,phase:"afterWrite",fn:t=>this._handlePopperPlacementChange(t)}],onFirstUpdate:t=>{t.options.placement!==t.placement&&this._handlePopperPlacementChange(t)}};return{...e,..."function"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_addAttachmentClass(t){this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(t)}`)}_getAttachment(t){return Ji[t.toUpperCase()]}_setListeners(){this._config.trigger.split(" ").forEach((t=>{if("click"===t)j.on(this._element,this.constructor.Event.CLICK,this._config.selector,(t=>this.toggle(t)));else if("manual"!==t){const e=t===hn?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,i=t===hn?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;j.on(this._element,e,this._config.selector,(t=>this._enter(t))),j.on(this._element,i,this._config.selector,(t=>this._leave(t)))}})),this._hideModalHandler=()=>{this._element&&this.hide()},j.on(this._element.closest(ln),cn,this._hideModalHandler),this._config.selector?this._config={...this._config,trigger:"manual",selector:""}:this._fixTitle()}_fixTitle(){const t=this._element.getAttribute("title"),e=typeof this._element.getAttribute("data-bs-original-title");(t||"string"!==e)&&(this._element.setAttribute("data-bs-original-title",t||""),!t||this._element.getAttribute("aria-label")||this._element.textContent||this._element.setAttribute("aria-label",t),this._element.setAttribute("title",""))}_enter(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusin"===t.type?dn:hn]=!0),e.getTipElement().classList.contains(sn)||e._hoverState===on?e._hoverState=on:(clearTimeout(e._timeout),e._hoverState=on,e._config.delay&&e._config.delay.show?e._timeout=setTimeout((()=>{e._hoverState===on&&e.show()}),e._config.delay.show):e.show())}_leave(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusout"===t.type?dn:hn]=e._element.contains(t.relatedTarget)),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=rn,e._config.delay&&e._config.delay.hide?e._timeout=setTimeout((()=>{e._hoverState===rn&&e.hide()}),e._config.delay.hide):e.hide())}_isWithActiveTrigger(){for(const t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1}_getConfig(t){const e=U.getDataAttributes(this._element);return Object.keys(e).forEach((t=>{Gi.has(t)&&delete e[t]})),(t={...this.constructor.Default,...e,..."object"==typeof t&&t?t:{}}).container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),a(Qi,t,this.constructor.DefaultType),t.sanitize&&(t.template=Yi(t.template,t.allowList,t.sanitizeFn)),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t}_cleanTipClass(){const t=this.getTipElement(),e=new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`,"g"),i=t.getAttribute("class").match(e);null!==i&&i.length>0&&i.map((t=>t.trim())).forEach((e=>t.classList.remove(e)))}_getBasicClassPrefix(){return"bs-tooltip"}_handlePopperPlacementChange(t){const{state:e}=t;e&&(this.tip=e.elements.popper,this._cleanTipClass(),this._addAttachmentClass(this._getAttachment(e.placement)))}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null)}static jQueryInterface(t){return this.each((function(){const e=un.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(un);const fn={...un.Default,placement:"right",offset:[0,8],trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'},pn={...un.DefaultType,content:"(string|element|function)"},mn={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"};class gn extends un{static get Default(){return fn}static get NAME(){return"popover"}static get Event(){return mn}static get DefaultType(){return pn}isWithContent(){return this.getTitle()||this._getContent()}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),".popover-header"),this._sanitizeAndSetContent(t,this._getContent(),".popover-body")}_getContent(){return this._resolvePossibleFunction(this._config.content)}_getBasicClassPrefix(){return"bs-popover"}static jQueryInterface(t){return this.each((function(){const e=gn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(gn);const _n="scrollspy",bn={offset:10,method:"auto",target:""},vn={offset:"number",method:"string",target:"(string|element)"},yn="active",wn=".nav-link, .list-group-item, .dropdown-item",En="position";class An extends B{constructor(t,e){super(t),this._scrollElement="BODY"===this._element.tagName?window:this._element,this._config=this._getConfig(e),this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,j.on(this._scrollElement,"scroll.bs.scrollspy",(()=>this._process())),this.refresh(),this._process()}static get Default(){return bn}static get NAME(){return _n}refresh(){const t=this._scrollElement===this._scrollElement.window?"offset":En,e="auto"===this._config.method?t:this._config.method,n=e===En?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),V.find(wn,this._config.target).map((t=>{const s=i(t),o=s?V.findOne(s):null;if(o){const t=o.getBoundingClientRect();if(t.width||t.height)return[U[e](o).top+n,s]}return null})).filter((t=>t)).sort(((t,e)=>t[0]-e[0])).forEach((t=>{this._offsets.push(t[0]),this._targets.push(t[1])}))}dispose(){j.off(this._scrollElement,".bs.scrollspy"),super.dispose()}_getConfig(t){return(t={...bn,...U.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}}).target=r(t.target)||document.documentElement,a(_n,t,vn),t}_getScrollTop(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),i=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=i){const t=this._targets[this._targets.length-1];this._activeTarget!==t&&this._activate(t)}else{if(this._activeTarget&&t<this._offsets[0]&&this._offsets[0]>0)return this._activeTarget=null,void this._clear();for(let e=this._offsets.length;e--;)this._activeTarget!==this._targets[e]&&t>=this._offsets[e]&&(void 0===this._offsets[e+1]||t<this._offsets[e+1])&&this._activate(this._targets[e])}}_activate(t){this._activeTarget=t,this._clear();const e=wn.split(",").map((e=>`${e}[data-bs-target="${t}"],${e}[href="${t}"]`)),i=V.findOne(e.join(","),this._config.target);i.classList.add(yn),i.classList.contains("dropdown-item")?V.findOne(".dropdown-toggle",i.closest(".dropdown")).classList.add(yn):V.parents(i,".nav, .list-group").forEach((t=>{V.prev(t,".nav-link, .list-group-item").forEach((t=>t.classList.add(yn))),V.prev(t,".nav-item").forEach((t=>{V.children(t,".nav-link").forEach((t=>t.classList.add(yn)))}))})),j.trigger(this._scrollElement,"activate.bs.scrollspy",{relatedTarget:t})}_clear(){V.find(wn,this._config.target).filter((t=>t.classList.contains(yn))).forEach((t=>t.classList.remove(yn)))}static jQueryInterface(t){return this.each((function(){const e=An.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}j.on(window,"load.bs.scrollspy.data-api",(()=>{V.find('[data-bs-spy="scroll"]').forEach((t=>new An(t)))})),g(An);const Tn="active",On="fade",Cn="show",kn=".active",Ln=":scope > li > .active";class xn extends B{static get NAME(){return"tab"}show(){if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&this._element.classList.contains(Tn))return;let t;const e=n(this._element),i=this._element.closest(".nav, .list-group");if(i){const e="UL"===i.nodeName||"OL"===i.nodeName?Ln:kn;t=V.find(e,i),t=t[t.length-1]}const s=t?j.trigger(t,"hide.bs.tab",{relatedTarget:this._element}):null;if(j.trigger(this._element,"show.bs.tab",{relatedTarget:t}).defaultPrevented||null!==s&&s.defaultPrevented)return;this._activate(this._element,i);const o=()=>{j.trigger(t,"hidden.bs.tab",{relatedTarget:this._element}),j.trigger(this._element,"shown.bs.tab",{relatedTarget:t})};e?this._activate(e,e.parentNode,o):o()}_activate(t,e,i){const n=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?V.children(e,kn):V.find(Ln,e))[0],s=i&&n&&n.classList.contains(On),o=()=>this._transitionComplete(t,n,i);n&&s?(n.classList.remove(Cn),this._queueCallback(o,t,!0)):o()}_transitionComplete(t,e,i){if(e){e.classList.remove(Tn);const t=V.findOne(":scope > .dropdown-menu .active",e.parentNode);t&&t.classList.remove(Tn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}t.classList.add(Tn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),u(t),t.classList.contains(On)&&t.classList.add(Cn);let n=t.parentNode;if(n&&"LI"===n.nodeName&&(n=n.parentNode),n&&n.classList.contains("dropdown-menu")){const e=t.closest(".dropdown");e&&V.find(".dropdown-toggle",e).forEach((t=>t.classList.add(Tn))),t.setAttribute("aria-expanded",!0)}i&&i()}static jQueryInterface(t){return this.each((function(){const e=xn.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}j.on(document,"click.bs.tab.data-api",'[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this)||xn.getOrCreateInstance(this).show()})),g(xn);const Dn="toast",Sn="hide",Nn="show",In="showing",Pn={animation:"boolean",autohide:"boolean",delay:"number"},jn={animation:!0,autohide:!0,delay:5e3};class Mn extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get DefaultType(){return Pn}static get Default(){return jn}static get NAME(){return Dn}show(){j.trigger(this._element,"show.bs.toast").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(Sn),u(this._element),this._element.classList.add(Nn),this._element.classList.add(In),this._queueCallback((()=>{this._element.classList.remove(In),j.trigger(this._element,"shown.bs.toast"),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this._element.classList.contains(Nn)&&(j.trigger(this._element,"hide.bs.toast").defaultPrevented||(this._element.classList.add(In),this._queueCallback((()=>{this._element.classList.add(Sn),this._element.classList.remove(In),this._element.classList.remove(Nn),j.trigger(this._element,"hidden.bs.toast")}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this._element.classList.contains(Nn)&&this._element.classList.remove(Nn),super.dispose()}_getConfig(t){return t={...jn,...U.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}},a(Dn,t,this.constructor.DefaultType),t}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){j.on(this._element,"mouseover.bs.toast",(t=>this._onInteraction(t,!0))),j.on(this._element,"mouseout.bs.toast",(t=>this._onInteraction(t,!1))),j.on(this._element,"focusin.bs.toast",(t=>this._onInteraction(t,!0))),j.on(this._element,"focusout.bs.toast",(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=Mn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(Mn),g(Mn),{Alert:W,Button:z,Carousel:st,Collapse:pt,Dropdown:hi,Modal:Hi,Offcanvas:Fi,Popover:gn,ScrollSpy:An,Tab:xn,Toast:Mn,Tooltip:un}}));
|
7 |
+
//# sourceMappingURL=bootstrap.bundle.min.js.map
|
model/model-users.php
CHANGED
@@ -255,4 +255,4 @@ class SIB_Model_Users {
|
|
255 |
return true;
|
256 |
}
|
257 |
|
258 |
-
}
|
255 |
return true;
|
256 |
}
|
257 |
|
258 |
+
}
|
page/page-form.php
CHANGED
@@ -6,348 +6,348 @@
|
|
6 |
*/
|
7 |
|
8 |
if ( ! class_exists( 'SIB_Page_Form' ) ) {
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
|
39 |
/**
|
40 |
* Default compliant Note
|
41 |
*
|
42 |
* @var string
|
43 |
*/
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
SIB_Manager::is_done_validation();
|
63 |
$this->forms = new SIB_Forms_List();
|
64 |
$this->forms->prepare_items();
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
'ajax_nonce' => wp_create_nonce( 'ajax_sib_admin_nonce' ),
|
80 |
'compliance_note' => $this->defaultComplianceNote
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
}
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
<span><?php esc_attr_e( 'Place holder', 'mailin' ); ?>
|
302 |
<small>(<?php esc_attr_e( 'Optional', 'mailin' ); ?>)
|
303 |
</small> </span>
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
<span><?php esc_attr_e( 'Initial value', 'mailin' ); ?>
|
309 |
<small>(<?php esc_attr_e( 'Optional', 'mailin' ); ?>)
|
310 |
</small> </span>
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
<!---- multi list per interest ----->
|
352 |
<div id="sib-multi-lists" class="card form-field"
|
353 |
style="padding-bottom: 20px;">
|
@@ -395,7 +395,7 @@ if ( ! class_exists( 'SIB_Page_Form' ) ) {
|
|
395 |
</div>
|
396 |
</div>
|
397 |
</div>
|
398 |
-
|
399 |
<div id="sib-gdpr-block" class="card form-field" style="padding-bottom: 20px;">
|
400 |
<div class="small-content2"
|
401 |
style="margin-top: 15px;margin-bottom: 15px;">
|
@@ -420,285 +420,285 @@ if ( ! class_exists( 'SIB_Page_Form' ) ) {
|
|
420 |
</div>
|
421 |
|
422 |
<!---- end block ------>
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
|
585 |
-
|
586 |
|
587 |
-
|
588 |
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
<span id="sib_disclaim_smtp"
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
<span id="sib_disclaim_confirm_template"
|
602 |
style="display: none;"><?php _e( 'You cannot select a template with the tag [DOUBLEOPTIN]', 'mailin' ); ?></span>
|
603 |
-
|
604 |
|
605 |
-
|
606 |
-
|
607 |
<span class="col-md-3">
|
608 |
<?php esc_attr_e( 'Linked List', 'mailin' ); ?>
|
609 |
<?php SIB_Page_Home::get_narration_script( __( 'Linked List', 'mailin' ), __( 'Select the list where you want to add your new subscribers', 'mailin' ) ); ?>
|
610 |
</span>
|
611 |
-
|
612 |
|
613 |
-
|
614 |
<select data-placeholder="Please select the list" id="sib_select_list"
|
615 |
class="col-md-12 chosen-select" name="list_id[]" multiple=""
|
616 |
tabindex="-1"></select>
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
<span
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
702 |
<div class="row sib-small-content mt-3" id="sib_final_confirm_template_area">
|
703 |
<span class="col-md-3"><?php esc_attr_e( 'Select final confirmation email template', 'mailin' ); ?><?php echo esc_html( SIB_Page_Home::get_narration_script( __( 'Final confirmation', 'mailin' ), __( 'This is the final confirmation email your contacts will receive once they click on the double opt-in confirmation link. You can select one of the default templates we have created for you, e.g. \'Default template - Final confirmation\'.
|
704 |
For your information, you cannot select a template with the tag [DOUBLEOPTIN].', 'mailin' ) ) ); ?></span>
|
@@ -715,77 +715,77 @@ For your information, you cannot select a template with the tag [DOUBLEOPTIN].',
|
|
715 |
</div>
|
716 |
</div>
|
717 |
|
718 |
-
|
719 |
<span
|
720 |
-
|
721 |
-
|
722 |
-
|
723 |
-
|
724 |
-
|
725 |
-
|
726 |
-
|
727 |
-
|
728 |
-
|
729 |
-
|
730 |
-
|
731 |
-
|
732 |
-
|
733 |
|
734 |
-
|
735 |
-
|
736 |
-
|
737 |
-
|
738 |
-
|
739 |
-
|
740 |
-
|
741 |
-
|
742 |
-
|
743 |
-
|
744 |
-
|
745 |
-
|
746 |
-
|
747 |
-
|
748 |
|
749 |
-
|
750 |
-
|
751 |
-
|
752 |
-
|
753 |
-
|
754 |
|
755 |
-
|
756 |
-
|
757 |
-
|
758 |
-
|
759 |
-
|
760 |
|
761 |
-
|
762 |
-
|
763 |
|
764 |
-
|
765 |
-
|
766 |
-
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
-
|
775 |
-
|
776 |
-
|
777 |
-
|
778 |
-
|
779 |
-
|
780 |
-
|
781 |
|
782 |
-
|
783 |
-
|
784 |
-
|
785 |
-
|
786 |
-
|
787 |
-
|
788 |
-
|
789 |
<div class="row sib-small-content mt-3">
|
790 |
<span class="col-md-3"><?php esc_attr_e( 'Existing subscribers', 'mailin' ); ?></span>
|
791 |
|
@@ -796,15 +796,15 @@ For your information, you cannot select a template with the tag [DOUBLEOPTIN].',
|
|
796 |
</div>
|
797 |
</div>
|
798 |
-->
|
799 |
-
|
800 |
-
|
801 |
|
802 |
-
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
-
|
808 |
<div class="row sib-small-content mt-3">
|
809 |
<span class="col-md-3"><?php esc_attr_e( 'Required Field', 'mailin' ); ?></span>
|
810 |
|
@@ -814,296 +814,296 @@ For your information, you cannot select a template with the tag [DOUBLEOPTIN].',
|
|
814 |
<?php echo esc_html( SIB_Page_Home::get_narration_script( __( 'Required Field', 'mailin' ), __( 'Set up the message that will appear when the required field is empty', 'mailin' ) ) ); ?>
|
815 |
</div>
|
816 |
</div>
|
817 |
-
|
818 |
-
|
819 |
-
|
820 |
-
|
821 |
-
|
822 |
-
|
823 |
-
|
824 |
-
|
825 |
-
|
826 |
-
|
827 |
-
|
828 |
-
|
829 |
-
|
830 |
-
|
831 |
-
|
832 |
-
|
833 |
-
|
834 |
-
|
835 |
-
|
836 |
-
|
837 |
-
|
838 |
-
|
839 |
-
|
840 |
-
|
841 |
-
|
842 |
-
|
843 |
-
|
844 |
-
|
845 |
-
|
846 |
-
|
847 |
-
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
-
|
858 |
-
|
859 |
-
|
860 |
-
|
861 |
-
|
862 |
-
|
863 |
-
|
864 |
-
|
865 |
-
|
866 |
-
|
867 |
-
|
868 |
-
|
869 |
-
|
870 |
-
|
871 |
-
|
872 |
-
|
873 |
-
|
874 |
-
|
875 |
-
|
876 |
-
|
877 |
-
|
878 |
-
|
879 |
-
|
880 |
-
|
881 |
-
|
882 |
-
|
883 |
-
|
884 |
-
|
885 |
-
|
886 |
-
|
887 |
-
|
888 |
-
|
889 |
-
|
890 |
-
|
891 |
-
|
892 |
-
|
893 |
-
|
894 |
-
|
895 |
-
|
896 |
-
|
897 |
-
|
898 |
-
|
899 |
-
|
900 |
-
|
901 |
-
|
902 |
-
|
903 |
-
|
904 |
-
|
905 |
-
|
906 |
-
|
907 |
-
|
908 |
-
|
909 |
-
|
910 |
-
|
911 |
-
|
912 |
-
|
913 |
-
|
914 |
-
|
915 |
-
|
916 |
-
|
917 |
-
|
918 |
-
|
919 |
-
|
920 |
-
|
921 |
-
|
922 |
-
|
923 |
-
|
924 |
$confirmID = isset( $_POST['confirm_template_id'] ) ? sanitize_text_field( $_POST['confirm_template_id'] ) : '-1';
|
925 |
-
|
926 |
-
|
927 |
-
|
928 |
-
|
929 |
-
|
930 |
-
|
931 |
-
|
932 |
-
|
933 |
-
|
934 |
-
|
935 |
-
|
936 |
-
|
937 |
-
|
938 |
-
|
939 |
-
|
940 |
-
|
941 |
-
|
942 |
-
|
943 |
-
|
944 |
-
|
945 |
-
|
946 |
-
|
947 |
-
|
948 |
-
|
949 |
-
|
950 |
-
|
951 |
-
|
952 |
-
|
953 |
-
|
954 |
-
|
955 |
-
|
956 |
-
|
957 |
-
|
958 |
-
|
959 |
-
|
960 |
-
|
961 |
-
|
962 |
-
|
963 |
-
|
964 |
-
|
965 |
-
|
966 |
-
|
967 |
-
|
968 |
-
|
969 |
-
|
970 |
-
|
971 |
-
|
972 |
-
|
973 |
-
|
974 |
-
|
975 |
-
|
976 |
-
|
977 |
-
|
978 |
-
|
979 |
-
|
980 |
-
|
981 |
-
|
982 |
-
|
983 |
-
|
984 |
-
|
985 |
-
|
986 |
-
|
987 |
-
|
988 |
-
|
989 |
-
|
990 |
-
|
991 |
-
|
992 |
-
|
993 |
-
|
994 |
-
|
995 |
-
|
996 |
-
|
997 |
-
|
998 |
-
|
999 |
-
|
1000 |
-
|
1001 |
-
|
1002 |
-
|
1003 |
-
|
1004 |
-
|
1005 |
-
|
1006 |
-
|
1007 |
-
|
1008 |
-
|
1009 |
-
|
1010 |
-
|
1011 |
-
|
1012 |
-
|
1013 |
-
|
1014 |
-
|
1015 |
-
|
1016 |
-
|
1017 |
-
|
1018 |
-
|
1019 |
-
|
1020 |
-
|
1021 |
-
|
1022 |
-
|
1023 |
-
|
1024 |
-
|
1025 |
-
|
1026 |
-
|
1027 |
-
|
1028 |
-
|
1029 |
-
|
1030 |
-
|
1031 |
-
|
1032 |
-
|
1033 |
-
|
1034 |
-
|
1035 |
-
|
1036 |
-
|
1037 |
-
|
1038 |
-
|
1039 |
-
|
1040 |
-
|
1041 |
-
|
1042 |
-
|
1043 |
-
|
1044 |
-
|
1045 |
-
|
1046 |
-
|
1047 |
-
|
1048 |
-
|
1049 |
-
|
1050 |
-
|
1051 |
-
|
1052 |
-
|
1053 |
-
|
1054 |
-
|
1055 |
-
|
1056 |
-
|
1057 |
-
|
1058 |
-
|
1059 |
-
|
1060 |
-
|
1061 |
-
|
1062 |
-
|
1063 |
-
|
1064 |
-
|
1065 |
-
|
1066 |
-
|
1067 |
-
|
1068 |
-
|
1069 |
-
|
1070 |
-
|
1071 |
-
|
1072 |
-
|
1073 |
-
|
1074 |
-
|
1075 |
-
|
1076 |
-
|
1077 |
-
|
1078 |
-
|
1079 |
-
|
1080 |
-
|
1081 |
-
|
1082 |
-
|
1083 |
-
|
1084 |
-
|
1085 |
-
|
1086 |
-
|
1087 |
-
|
1088 |
-
|
1089 |
-
|
1090 |
-
|
1091 |
-
|
1092 |
-
|
1093 |
-
|
1094 |
-
|
1095 |
-
|
1096 |
-
|
1097 |
-
|
1098 |
-
|
1099 |
-
|
1100 |
-
|
1101 |
-
|
1102 |
-
|
1103 |
-
|
1104 |
-
|
1105 |
-
|
1106 |
-
|
1107 |
-
|
1108 |
-
|
1109 |
}
|
6 |
*/
|
7 |
|
8 |
if ( ! class_exists( 'SIB_Page_Form' ) ) {
|
9 |
+
/**
|
10 |
+
* Page class that handles backend page <i>dashboard ( for admin )</i> with form generation and processing
|
11 |
+
*
|
12 |
+
* @package SIB_Page_Form
|
13 |
+
*/
|
14 |
+
class SIB_Page_Form {
|
15 |
+
/** Page slug */
|
16 |
+
const PAGE_ID = 'sib_page_form';
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Page hook
|
20 |
+
*
|
21 |
+
* @var false|string
|
22 |
+
*/
|
23 |
+
protected $page_hook;
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Page tabs
|
27 |
+
*
|
28 |
+
* @var mixed
|
29 |
+
*/
|
30 |
+
protected $tabs;
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Form ID
|
34 |
+
*
|
35 |
+
* @var string
|
36 |
+
*/
|
37 |
+
public $formID;
|
38 |
|
39 |
/**
|
40 |
* Default compliant Note
|
41 |
*
|
42 |
* @var string
|
43 |
*/
|
44 |
+
public $defaultComplianceNote;
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Constructs new page object and adds entry to WordPress admin menu
|
48 |
+
*/
|
49 |
+
function __construct() {
|
50 |
+
$title = get_bloginfo('name');
|
51 |
+
$this->defaultComplianceNote = sprintf( esc_attr('Your e-mail address is only used to send you our newsletter and information about the activities of %s. You can always use the unsubscribe link included in the newsletter.', 'mailin'), $title);
|
52 |
+
$this->page_hook = add_submenu_page( SIB_Page_Home::PAGE_ID, __( 'Forms', 'mailin' ), __( 'Forms', 'mailin' ), 'manage_options', self::PAGE_ID, array( &$this, 'generate' ) );
|
53 |
+
add_action( 'admin_print_scripts-' . $this->page_hook, array( $this, 'enqueue_scripts' ) );
|
54 |
+
add_action( 'admin_print_styles-' . $this->page_hook, array( $this, 'enqueue_styles' ) );
|
55 |
+
add_action( 'load-' . $this->page_hook, array( &$this, 'init' ) );
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Init Process
|
60 |
+
*/
|
61 |
+
function Init() {
|
62 |
SIB_Manager::is_done_validation();
|
63 |
$this->forms = new SIB_Forms_List();
|
64 |
$this->forms->prepare_items();
|
65 |
+
}
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Enqueue scripts of plugin
|
69 |
+
*/
|
70 |
+
function enqueue_scripts() {
|
71 |
+
wp_enqueue_script( 'sib-admin-js' );
|
72 |
+
wp_enqueue_script( 'sib-bootstrap-js' );
|
73 |
+
wp_enqueue_script( 'sib-chosen-js' );
|
74 |
+
|
75 |
+
wp_localize_script(
|
76 |
+
'sib-admin-js', 'ajax_sib_object',
|
77 |
+
array(
|
78 |
+
'ajax_url' => admin_url( 'admin-ajax.php' ),
|
79 |
'ajax_nonce' => wp_create_nonce( 'ajax_sib_admin_nonce' ),
|
80 |
'compliance_note' => $this->defaultComplianceNote
|
81 |
+
)
|
82 |
+
);
|
83 |
+
wp_localize_script( 'sib-admin-js', 'sib_img_url', array(SIB_Manager::$plugin_url.'/img/flags/') );
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Enqueue style sheets of plugin
|
88 |
+
*/
|
89 |
+
function enqueue_styles() {
|
90 |
+
wp_enqueue_style( 'sib-admin-css' );
|
91 |
+
wp_enqueue_style( 'sib-bootstrap-css' );
|
92 |
+
wp_enqueue_style( 'sib-chosen-css' );
|
93 |
+
wp_enqueue_style( 'sib-fontawesome-css' );
|
94 |
+
wp_enqueue_style( 'thickbox' );
|
95 |
+
}
|
96 |
+
|
97 |
+
/** Generate page script */
|
98 |
+
function generate() {
|
99 |
+
?>
|
100 |
+
<div id="wrap" class="wrap box-border-box container-fluid">
|
101 |
+
<h1><img id="logo-img" src="<?php echo esc_url( SIB_Manager::$plugin_url . '/img/logo.png' ); ?>">
|
102 |
+
<?php
|
103 |
+
$return_btn = 'none';
|
104 |
+
if (isset( $_GET['id'] ) ) {
|
105 |
+
$return_btn = 'inline-block';
|
106 |
+
}
|
107 |
+
?>
|
108 |
+
<a href="<?php echo esc_url( add_query_arg( 'page', self::PAGE_ID, admin_url( 'admin.php' ) ) ); ?>" class="button" style="margin-top: 6px; display: <?php echo esc_attr( $return_btn ); ?>;"><?php esc_attr_e( 'Back to form\'s list' ,'mailin' ); ?></a>
|
109 |
+
</h1>
|
110 |
+
<div class="row">
|
111 |
+
<div id="wrap-left" class="box-border-box col-md-9 ">
|
112 |
+
<input type="hidden" class="sib-dateformat" value="<?php echo esc_attr( 'yyyy-mm-dd' ); ?>">
|
113 |
+
<?php
|
114 |
+
if ( SIB_Manager::is_api_key_set() ) {
|
115 |
+
if ( ( isset( $_GET['action'] ) && 'edit' === sanitize_text_field($_GET['action'] )) || ( isset( $_GET['action'] ) && 'duplicate' === sanitize_text_field($_GET['action'] )) ) {
|
116 |
+
$this->formID = isset( $_GET['id'] ) ? sanitize_text_field( $_GET['id'] ) : 'new';
|
117 |
+
$this->generate_form_edit();
|
118 |
+
} else {
|
119 |
+
$this->generate_forms_page();
|
120 |
+
}
|
121 |
+
} else {
|
122 |
+
$this->generate_welcome_page();
|
123 |
+
}
|
124 |
+
?>
|
125 |
+
</div>
|
126 |
+
<div id="wrap-right-side" class="box-border-box col-md-3">
|
127 |
+
<?php
|
128 |
+
|
129 |
+
SIB_Page_Home::generate_side_bar();
|
130 |
+
?>
|
131 |
+
</div>
|
132 |
+
</div>
|
133 |
+
</div>
|
134 |
+
<div id="sib_modal" class="modal fade" role="dialog">
|
135 |
+
<div class="modal-dialog">
|
136 |
+
<div class="modal-content">
|
137 |
+
<div class="modal-header">
|
138 |
+
<button type="button" class="close" data-dismiss="modal">×</button>
|
139 |
+
<h4><?php esc_attr_e( 'You are about to change the language', 'mailin' ); ?></h4>
|
140 |
+
</div>
|
141 |
+
<div class="modal-body">
|
142 |
+
<p><?php esc_attr_e( "Please make sure that you've saved all the changes. We will have to reload the page.", 'mailin' ); ?></p>
|
143 |
+
<p><?php esc_attr_e( 'Do you want to continue?', 'mailin' ); ?></p>
|
144 |
+
</div>
|
145 |
+
<div class="modal-footer">
|
146 |
+
<button type="button" class="btn btn-default" id="sib_modal_ok"><?php esc_attr_e( 'Ok', 'mailin' ); ?></button>
|
147 |
+
<button type="button" class="btn btn-default" id="sib_modal_cancel"><?php esc_attr_e( 'Cancel', 'mailin' ); ?></button>
|
148 |
+
</div>
|
149 |
+
</div>
|
150 |
+
</div>
|
151 |
+
</div>
|
152 |
+
<?php
|
153 |
+
}
|
154 |
+
/** Generate forms page */
|
155 |
+
function generate_forms_page() {
|
156 |
+
?>
|
157 |
+
<div id="main-content" class="sib-content">
|
158 |
+
<div class="card sib-small-content">
|
159 |
+
<div class="card-header"><strong><?php esc_attr_e( 'Forms', 'mailin' ); ?></strong></div>
|
160 |
+
|
161 |
+
<form method="post" class="sib-forms-wrapper" style="padding:20px;min-height: 500px;">
|
162 |
+
<i style="font-size: 13px;"><?php esc_attr_e( "Note: Forms created in Sendinblue plugin for WordPress won't be displayed in Forms section in Sendinblue application", 'mailin' ); ?></i>
|
163 |
+
<?php
|
164 |
+
$this->forms->display();
|
165 |
+
?>
|
166 |
+
</form>
|
167 |
+
</div>
|
168 |
+
</div>
|
169 |
+
<?php
|
170 |
+
}
|
171 |
+
/** Generate form edit page */
|
172 |
+
function generate_form_edit() {
|
173 |
+
$is_activated_smtp = SIB_API_Manager::get_smtp_status() == 'disabled' ? 0 : 1;
|
174 |
+
$formData = SIB_Forms::getForm( $this->formID );
|
175 |
+
$invisibleCaptcha = '1';
|
176 |
+
if ( ! empty( $formData ) ) {
|
177 |
+
if ( isset( $_GET['action'] ) && 'duplicate' === sanitize_text_field($_GET['action']) ) {
|
178 |
+
$this->formID = 'new';
|
179 |
+
$formData['title'] = '';
|
180 |
+
}
|
181 |
+
if ( 'new' === $this->formID && isset( $_GET['pid'] ) ) {
|
182 |
+
$parent_formData = SIB_Forms::getForm( sanitize_text_field( $_GET['pid'] ) );
|
183 |
+
$formData['title'] = $parent_formData['title'];
|
184 |
+
}
|
185 |
+
if ( ! isset( $formData['gCaptcha'] ) ) {
|
186 |
+
$gCaptcha = '0';
|
187 |
+
}
|
188 |
+
else {
|
189 |
+
if( '0' == $formData['gCaptcha'] ) {
|
190 |
+
$gCaptcha = '0';
|
191 |
+
}
|
192 |
+
else {
|
193 |
+
$gCaptcha = '1';
|
194 |
+
}
|
195 |
+
if ( '3' == $formData['gCaptcha'] ) {
|
196 |
+
$invisibleCaptcha = '0';
|
197 |
+
}
|
198 |
+
else {
|
199 |
+
$invisibleCaptcha = '1';
|
200 |
+
}
|
201 |
+
}
|
202 |
+
if ( ! isset( $formData['termAccept'] ) ) {
|
203 |
+
$formData['termAccept'] = '0';
|
204 |
+
}
|
205 |
+
|
206 |
+
?>
|
207 |
+
<div id="main-content" class="sib-content">
|
208 |
+
<form action="admin.php" class="" method="post" role="form">
|
209 |
+
<input type="hidden" name="action" value="sib_setting_subscription">
|
210 |
+
<input type="hidden" name="sib_form_id" value="<?php echo esc_attr( $this->formID ) ; ?>">
|
211 |
+
<input type="hidden" id="is_smtp_activated" value="<?php echo esc_attr( $is_activated_smtp ) ; ?>">
|
212 |
+
<?php
|
213 |
+
if ( isset( $_GET['pid'] ) ) {
|
214 |
+
?>
|
215 |
+
<input type="hidden" name="pid" value="<?php echo esc_attr( $_GET['pid'] ); ?>">
|
216 |
+
<?php
|
217 |
+
$lang = isset( $_GET['lang'] ) ? sanitize_text_field( $_GET['lang'] ) : '';
|
218 |
+
if ( $lang ) { ?>
|
219 |
+
<input type="hidden" name="lang" value="<?php echo esc_attr( $lang ); ?>">
|
220 |
+
<?php
|
221 |
}
|
222 |
+
}
|
223 |
+
?>
|
224 |
+
<?php wp_nonce_field( 'sib_setting_subscription' ); ?>
|
225 |
+
<!-- Subscription form -->
|
226 |
+
<div class="card sib-small-content">
|
227 |
+
<div class="card-header">
|
228 |
+
<strong><?php esc_attr_e( 'Subscription form', 'mailin' ); ?></strong> <i
|
229 |
+
id="sib_setting_form_spin" class="fa fa-spinner fa-spin fa-fw fa-lg fa-2x"></i>
|
230 |
+
</div>
|
231 |
+
<div id="sib_setting_form_body" class="card-body">
|
232 |
+
<div class="row <!--small-content-->">
|
233 |
+
<div style="margin: 12px 0 34px 0px;">
|
234 |
+
<b><?php esc_attr_e( 'Form Name : ', 'mailin' ); ?></b> <input type="text"
|
235 |
+
name="sib_form_name"
|
236 |
+
value="<?php echo esc_attr( $formData['title'] ); ?>"
|
237 |
+
style="width: 60%;"
|
238 |
+
required="required"/>
|
239 |
+
</div>
|
240 |
+
<div class="col-md-6">
|
241 |
+
|
242 |
+
<?php
|
243 |
+
if ( function_exists( 'wp_editor' ) ) {
|
244 |
+
// phpcs:ignore
|
245 |
+
wp_editor(
|
246 |
+
esc_html(stripcslashes($formData['html'])), 'sibformmarkup', array(
|
247 |
+
'tinymce' => false,
|
248 |
+
'media_buttons' => true,
|
249 |
+
'textarea_name' => 'sib_form_html',
|
250 |
+
'textarea_rows' => 15,
|
251 |
+
)
|
252 |
+
);
|
253 |
+
} else {
|
254 |
+
?>
|
255 |
+
<textarea class="widefat" cols="160" rows="20" id="sibformmarkup"
|
256 |
+
name="sib_form_html"><?php
|
257 |
+
// phpcs:ignore
|
258 |
+
echo esc_html( $formData['html'] ); ?></textarea>
|
259 |
+
<?php
|
260 |
+
}
|
261 |
+
?>
|
262 |
+
<br>
|
263 |
+
|
264 |
+
<p>
|
265 |
+
<?php
|
266 |
+
esc_attr_e( 'Use the shortcode', 'mailin' );
|
267 |
+
if ( isset( $_GET['pid'] ) ) {
|
268 |
+
$id = sanitize_text_field( $_GET['pid'] );
|
269 |
+
} else {
|
270 |
+
$id = 'new' !== $this->formID ? $this->formID : '';
|
271 |
+
}
|
272 |
+
?>
|
273 |
+
<i style="background-color: #eee;padding: 3px;">[sibwp_form
|
274 |
+
id=<?php echo esc_attr( $id ); ?>]</i>
|
275 |
+
<?php
|
276 |
+
esc_attr_e( 'inside a post, page or text widget to display your sign-up form.', 'mailin' );
|
277 |
+
?>
|
278 |
+
<b><?php esc_attr_e( 'Do not copy and paste the above form mark up, that will not work', 'mailin' ); ?></b>
|
279 |
+
</p>
|
280 |
+
<div id="sib-field-form" class="card form-field"
|
281 |
+
style="padding-bottom: 20px;">
|
282 |
+
|
283 |
+
<div class="small-content2"
|
284 |
+
style="margin-top: 15px;">
|
285 |
+
<b><?php esc_attr_e( 'Add a new Field', 'mailin' ); ?></b>
|
286 |
+
<?php SIB_Page_Home::get_narration_script( __( 'Add a New Field', 'mailin' ), __( 'Choose an attribute and add it to the subscription form of your Website', 'mailin' ) ); ?>
|
287 |
+
</div>
|
288 |
+
<div id="sib_sel_attribute_area" class="small-content2"
|
289 |
+
style="margin-top: 20px;">
|
290 |
+
</div>
|
291 |
+
<div id="sib-field-content">
|
292 |
+
<div style="margin-top: 30px;">
|
293 |
+
<div class="sib-attr-normal sib-attr-category small-content2"
|
294 |
+
style="margin-top: 10px;" id="sib_field_label_area">
|
295 |
+
<?php esc_attr_e( 'Label', 'mailin' ); ?>
|
296 |
+
<small>(<?php esc_attr_e( 'Optional', 'mailin' ); ?>)</small>
|
297 |
+
<input type="text" class="col-md-12 sib_field_changes" id="sib_field_label">
|
298 |
+
</div>
|
299 |
+
<div class="sib-attr-normal small-content2"
|
300 |
+
style="margin-top: 10px;" id="sib_field_placeholder_area">
|
301 |
<span><?php esc_attr_e( 'Place holder', 'mailin' ); ?>
|
302 |
<small>(<?php esc_attr_e( 'Optional', 'mailin' ); ?>)
|
303 |
</small> </span>
|
304 |
+
<input type="text" class="col-md-12 sib_field_changes" id="sib_field_placeholder">
|
305 |
+
</div>
|
306 |
+
<div class="sib-attr-normal small-content2"
|
307 |
+
style="margin-top: 10px;" id="sib_field_initial_area">
|
308 |
<span><?php esc_attr_e( 'Initial value', 'mailin' ); ?>
|
309 |
<small>(<?php esc_attr_e( 'Optional', 'mailin' ); ?>)
|
310 |
</small> </span>
|
311 |
+
<input type="text" class="col-md-12 sib_field_changes" id="sib_field_initial">
|
312 |
+
</div>
|
313 |
+
<div class="sib-attr-other small-content2"
|
314 |
+
style="margin-top: 10px;" id="sib_field_button_text_area">
|
315 |
+
<span><?php esc_attr_e( 'Button Text', 'mailin' ); ?></span>
|
316 |
+
<input type="text" class="col-md-12 sib_field_changes" id="sib_field_button_text">
|
317 |
+
</div>
|
318 |
+
</div>
|
319 |
+
<div style="margin-top: 20px;">
|
320 |
+
|
321 |
+
<div class="sib-attr-normal sib-attr-category small-content2" style="margin-top: 5px;" id="sib_field_required_area">
|
322 |
+
<label style="font-weight: normal;"><input type="checkbox" class="sib_field_changes" id="sib_field_required"> <?php esc_attr_e( 'Required field ?', 'mailin' ); ?>
|
323 |
+
</label>
|
324 |
+
</div>
|
325 |
+
<div class="sib-attr-category small-content2"
|
326 |
+
style="margin-top: 5px;" id="sib_field_type_area">
|
327 |
+
<label style="font-weight: normal;"><input type="radio" class="sib_field_changes" name="sib_field_type" value="select"
|
328 |
+
checked> <?php esc_attr_e( 'Drop-down List', 'mailin' ); ?>
|
329 |
+
</label>
|
330 |
+
<label style="font-weight: normal;"><input type="radio" class="sib_field_changes" name="sib_field_type"
|
331 |
+
value="radio"> <?php esc_attr_e( 'Radio List', 'mailin' ); ?>
|
332 |
+
</label>
|
333 |
+
</div>
|
334 |
+
</div>
|
335 |
+
<div class="small-content2" style="margin-top: 20px;"
|
336 |
+
id="sib_field_add_area">
|
337 |
+
<button type="button" id="sib_add_to_form_btn"
|
338 |
+
class="btn btn-primary sib-add-to-form"><span
|
339 |
+
class="sib-large-icon"><</span> <?php esc_attr_e( 'Add to form', 'mailin' ); ?>
|
340 |
+
</button>
|
341 |
+
<?php SIB_Page_Home::get_narration_script( __( 'Add to form', 'mailin' ), __( 'Please click where you want to insert the field and click on this button. By default, the new field will be added at top.', 'mailin' ) ); ?>
|
342 |
+
</div>
|
343 |
+
<div class="small-content2" style="margin-top: 20px;"
|
344 |
+
id="sib_field_html_area">
|
345 |
+
<span><?php esc_attr_e( 'Generated HTML', 'mailin' ); ?></span>
|
346 |
+
<textarea class="col-md-12" style="height: 140px;"
|
347 |
+
id="sib_field_html"></textarea>
|
348 |
+
</div>
|
349 |
+
</div>
|
350 |
+
</div>
|
351 |
<!---- multi list per interest ----->
|
352 |
<div id="sib-multi-lists" class="card form-field"
|
353 |
style="padding-bottom: 20px;">
|
395 |
</div>
|
396 |
</div>
|
397 |
</div>
|
398 |
+
|
399 |
<div id="sib-gdpr-block" class="card form-field" style="padding-bottom: 20px;">
|
400 |
<div class="small-content2"
|
401 |
style="margin-top: 15px;margin-bottom: 15px;">
|
420 |
</div>
|
421 |
|
422 |
<!---- end block ------>
|
423 |
+
<div id="sib_form_captcha" class="card form-field"
|
424 |
+
style="padding-bottom: 20px;">
|
425 |
+
<div class="alert alert-danger" style="margin:5px;display: none;"></div>
|
426 |
+
<div class="small-content2" style="margin-top: 15px;margin-bottom: 15px;">
|
427 |
+
<b><?php esc_attr_e( 'Add Captcha', 'mailin' ); ?></b>
|
428 |
+
<?php SIB_Page_Home::get_narration_script( __( 'Add Captcha', 'mailin' ), __( 'We are using Google reCaptcha for this form. To use Google reCaptcha on this form, you should input site key and secret key.' , 'mailin' ) ); ?>
|
429 |
+
</div>
|
430 |
+
<div class="small-content2" style="margin-top: 0px;">
|
431 |
+
<input type="radio" name="sib_add_captcha" class="sib-add-captcha" value="1" <?php checked( $gCaptcha, '1' ); ?>><label class="sib-radio-label"> <?php esc_attr_e( 'Yes', 'mailin' ); ?></label>
|
432 |
+
<input type="radio" name="sib_add_captcha" class="sib-add-captcha" value="0" <?php checked( $gCaptcha, '0' ); ?>><label class="sib-radio-label"> <?php esc_attr_e( 'No', 'mailin' ); ?></label>
|
433 |
+
</div>
|
434 |
+
<div class="small-content2 sib-captcha-key"
|
435 |
+
<?php
|
436 |
+
if ( '1' !== $gCaptcha ) {
|
437 |
+
echo("style='display: none;'");}
|
438 |
+
?>
|
439 |
+
>
|
440 |
+
<i><?php esc_attr_e( 'Site Key', 'mailin' ); ?></i>
|
441 |
+
<input type="text" class="col-md-12" id="sib_captcha_site" name="sib_captcha_site" value="<?php
|
442 |
+
if ( isset( $formData['gCaptcha_site'] ) && ! empty( $formData['gCaptcha_site'] ) ) {
|
443 |
+
echo esc_attr( $formData['gCaptcha_site'] );
|
444 |
+
} else {
|
445 |
+
echo '';
|
446 |
+
}
|
447 |
+
?>">
|
448 |
+
</div>
|
449 |
+
<div class="small-content2 sib-captcha-key"
|
450 |
+
<?php
|
451 |
+
if ( '1' !== $gCaptcha ) {
|
452 |
+
echo("style='display: none;'");}
|
453 |
+
?>
|
454 |
+
>
|
455 |
+
<i><?php esc_attr_e( 'Secret Key', 'mailin' ); ?></i>
|
456 |
+
<input type="text" class="col-md-12" id="sib_captcha_secret" name="sib_captcha_secret" value="<?php
|
457 |
+
if ( isset( $formData['gCaptcha_secret'] ) && ! empty( $formData['gCaptcha_secret'] ) ) {
|
458 |
+
echo esc_attr( $formData['gCaptcha_secret'] );
|
459 |
+
} else {
|
460 |
+
echo '';
|
461 |
+
}
|
462 |
+
?>">
|
463 |
+
</div>
|
464 |
+
<div class="small-content2 sib-captcha-key"
|
465 |
+
<?php
|
466 |
+
if ( '1' !== $gCaptcha ) {
|
467 |
+
echo("style='display: none;'");}
|
468 |
+
?>
|
469 |
+
>
|
470 |
+
<input type="radio" name="sib_recaptcha_type" class="sib-captcha-type" value="0" <?php checked( $invisibleCaptcha, '0' ); ?>><label class="sib-radio-label"> <?php esc_attr_e( 'Google Captcha', 'mailin');?></label>
|
471 |
+
<input type="radio" name="sib_recaptcha_type" class="sib-captcha-type" value="1" <?php checked( $invisibleCaptcha, '1' ); ?>><label class="sib-radio-label"> <?php esc_attr_e( 'Google Invisible Captcha', 'mailin');?></label>
|
472 |
+
</div>
|
473 |
+
<div class="small-content2 sib-captcha-key"
|
474 |
+
<?php
|
475 |
+
if ( '1' !== $gCaptcha ) {
|
476 |
+
echo("style='display: none;'");}
|
477 |
+
?>
|
478 |
+
>
|
479 |
+
<button type="button" id="sib_add_captcha_btn"
|
480 |
+
class="btn btn-primary sib-add-to-form"><span
|
481 |
+
class="sib-large-icon"><</span> <?php esc_attr_e( 'Add to form', 'mailin' ); ?>
|
482 |
+
</button>
|
483 |
+
<?php SIB_Page_Home::get_narration_script( __( 'Add Captcha', 'mailin' ), __( 'Please click where you want to insert the field and click on this button. By default, the new field will be added at top.', 'mailin' ) ); ?>
|
484 |
+
</div>
|
485 |
+
</div>
|
486 |
+
<div id="sib_form_terms" class="card form-field"
|
487 |
+
style="padding-bottom: 20px;">
|
488 |
+
<div class="alert alert-danger" style="margin:5px;display: none;"></div>
|
489 |
+
<!-- for terms -->
|
490 |
+
<div class="small-content2" style="margin-top: 15px;margin-bottom: 15px;">
|
491 |
+
<b><?php esc_attr_e( 'Add a Term acceptance checkbox', 'mailin' ); ?></b>
|
492 |
+
<?php SIB_Page_Home::get_narration_script( __( 'Add a Term acceptance checkbox', 'mailin' ), __( 'If the terms and condition checkbox is added to the form, the field will be mandatory for subscription.' , 'mailin' ) ); ?>
|
493 |
+
</div>
|
494 |
+
<div class="small-content2" style="margin-top: 0px;">
|
495 |
+
<input type="radio" name="sib_add_terms" class="sib-add-terms" value="1" <?php checked( $formData['termAccept'], '1' ); ?>><label class="sib-radio-label"> <?php esc_attr_e( 'Yes', 'mailin');?></label>
|
496 |
+
<input type="radio" name="sib_add_terms" class="sib-add-terms" value="0" <?php checked( $formData['termAccept'], '0' ); ?>><label class="sib-radio-label"> <?php esc_attr_e( 'No', 'mailin');?></label>
|
497 |
+
</div>
|
498 |
+
<div class="small-content2 sib-terms-url"
|
499 |
+
<?php
|
500 |
+
if ( '1' !== $formData['termAccept'] ) {
|
501 |
+
echo("style='display: none;'");}
|
502 |
+
?>
|
503 |
+
>
|
504 |
+
<i><?php esc_attr_e( 'URL to terms and conditions', 'mailin' ); ?></i>
|
505 |
+
<input type="text" class="col-md-12" id="sib_terms_url" name="sib_terms_url" value="<?php
|
506 |
+
if ( isset( $formData['termsURL'] ) && ! empty( $formData['termsURL'] ) ) {
|
507 |
+
echo esc_attr( $formData['termsURL'] );
|
508 |
+
} else {
|
509 |
+
echo '';
|
510 |
+
}
|
511 |
+
?>">
|
512 |
+
</div>
|
513 |
+
<div class="small-content2 sib-terms-url"
|
514 |
+
<?php
|
515 |
+
if ( '1' !== $formData['termAccept'] ) {
|
516 |
+
echo("style='display: none;'");}
|
517 |
+
?>
|
518 |
+
>
|
519 |
+
<button type="button" id="sib_add_termsUrl_btn"
|
520 |
+
class="btn btn-primary sib-add-to-form"><span
|
521 |
+
class="sib-large-icon"><</span> <?php esc_attr_e( 'Add to form', 'mailin' ); ?>
|
522 |
+
</button>
|
523 |
+
<?php SIB_Page_Home::get_narration_script( __( 'Add Terms URL', 'mailin' ), __( 'Please click where you want to insert the field and click on this button. By default, the new field will be added at top.', 'mailin' ) ); ?>
|
524 |
+
</div>
|
525 |
+
|
526 |
+
</div>
|
527 |
+
<!-- use css of custom or theme -->
|
528 |
+
<div class="card form-field">
|
529 |
+
<div class="small-content2" style="margin-top: 15px;margin-bottom: 10px;">
|
530 |
+
<b><?php esc_attr_e( 'Form Style', 'mailin' ); ?> </b>
|
531 |
+
<?php SIB_Page_Home::get_narration_script( __( 'Form Style', 'mailin' ), __( 'Select the style you favorite. Your custom css will be applied to form only.', 'mailin' ) ); ?>
|
532 |
+
</div>
|
533 |
+
<div id="sib_form_css_area" class="small-content2" style="margin-bottom: 15px;">
|
534 |
+
<label style="font-weight: normal;"><input type="radio" name="sib_css_type" value="1" <?php checked( $formData['dependTheme'], '1' ); ?>> <?php esc_attr_e( 'Current Theme', 'mailin' ); ?>
|
535 |
+
</label>
|
536 |
+
<label style="font-weight: normal;"><input type="radio" name="sib_css_type" value="0" <?php checked( $formData['dependTheme'], '0' ); ?>> <?php esc_attr_e( 'Custom style', 'mailin' ); ?>
|
537 |
+
</label>
|
538 |
+
<textarea class="widefat" cols="60" rows="10" id="sibcssmarkup" style="margin-top: 10px; font-size: 13px; display: <?php echo '0' == $formData['dependTheme'] ? 'block' : 'none'; ?>;"
|
539 |
+
name="sib_form_css"><?php echo esc_textarea( $formData['css'] ); ?></textarea>
|
540 |
+
|
541 |
+
</div>
|
542 |
+
|
543 |
+
</div>
|
544 |
+
</div>
|
545 |
+
<div class="col-md-6">
|
546 |
+
<!-- hidden fields for attributes -->
|
547 |
+
<input type="hidden" id="sib_hidden_email" data-type="email" data-name="email"
|
548 |
+
data-text="<?php esc_attr_e( 'Email Address', 'mailin' ); ?>">
|
549 |
+
<input type="hidden" id="sib_hidden_submit" data-type="submit"
|
550 |
+
data-name="submit" data-text="<?php esc_attr_e( 'Subscribe', 'mailin' ); ?>">
|
551 |
+
<input type="hidden" id="sib_hidden_message_1"
|
552 |
+
value="<?php esc_attr_e( 'Select Sendinblue Attribute', 'mailin' ); ?>">
|
553 |
+
<input type="hidden" id="sib_hidden_message_2"
|
554 |
+
value="<?php esc_attr_e( 'Sendinblue merge fields : Normal', 'mailin' ); ?>">
|
555 |
+
<input type="hidden" id="sib_hidden_message_3"
|
556 |
+
value="<?php esc_attr_e( 'Sendinblue merge fields : Category', 'mailin' ); ?>">
|
557 |
+
<input type="hidden" id="sib_hidden_message_4"
|
558 |
+
value="<?php esc_attr_e( 'Other', 'mailin' ); ?>">
|
559 |
+
<input type="hidden" id="sib_hidden_message_5"
|
560 |
+
value="<?php esc_attr_e( 'Submit Button', 'mailin' ); ?>">
|
561 |
+
|
562 |
+
<!-- preview field -->
|
563 |
+
|
564 |
+
<div class="card form-field">
|
565 |
+
<div class="small-content2" style="margin-top: 15px;margin-bottom: 15px;">
|
566 |
+
<b><?php esc_attr_e( 'Preview', 'mailin' ); ?>
|
567 |
+
<span id="sib-preview-form-refresh"
|
568 |
+
class="glyphicon glyphicon-refresh"
|
569 |
+
style="cursor:pointer"></span></b>
|
570 |
+
</div>
|
571 |
+
<iframe id="sib-preview-form"
|
572 |
+
src="<?php echo esc_url( site_url() . '/?sib_form=' . esc_attr( $this->formID ) ); ?>"
|
573 |
+
width="300px" height="428"></iframe>
|
574 |
+
</div>
|
575 |
+
</div>
|
576 |
+
</div>
|
577 |
+
<div class="sib-small-content" style="margin-top: 30px;">
|
578 |
+
<div class="col-md-3">
|
579 |
+
<button class="btn btn-primary"><?php esc_attr_e( 'Save', 'mailin' ); ?></button>
|
580 |
+
</div>
|
581 |
+
</div>
|
582 |
+
</div>
|
583 |
+
</div> <!-- End Subscription form-->
|
584 |
|
585 |
+
<!-- Sign up Process -->
|
586 |
|
587 |
+
<div class="card sib-small-content">
|
588 |
|
589 |
+
<!-- Adding security through hidden referrer field -->
|
590 |
+
<div class="card-header">
|
591 |
+
<strong><?php esc_attr_e( 'Sign up process', 'mailin' ); ?></strong> <i
|
592 |
+
id="sib_setting_signup_spin" class="fa fa-spinner fa-spin fa-fw fa-lg fa-2x"></i>
|
593 |
+
</div>
|
594 |
+
<div id="sib_setting_signup_body" class="card-body">
|
595 |
+
<div id="sib_form_alert_message" class="alert alert-danger alert-dismissable fade in"
|
596 |
+
role="alert" style="display: none;">
|
597 |
<span id="sib_disclaim_smtp"
|
598 |
+
style="display: none;"><?php _e( 'Confirmation emails will be sent through your own email server, but you have no guarantees on their deliverability. <br/> <a href="https://app-smtp.sendinblue.com/" target="_blank">Click here</a> to send your emails through Sendinblue in order to improve your deliverability and get statistics', 'mailin' ); ?></span>
|
599 |
+
<span id="sib_disclaim_do_template"
|
600 |
+
style="display: none;"><?php _e( 'The template you selected does not include a link [DOUBLEOPTIN] to allow subscribers to confirm their subscription. <br/> Please edit the template to include a link with [DOUBLEOPTIN] as URL.', 'mailin' ); ?></span>
|
601 |
<span id="sib_disclaim_confirm_template"
|
602 |
style="display: none;"><?php _e( 'You cannot select a template with the tag [DOUBLEOPTIN]', 'mailin' ); ?></span>
|
603 |
+
</div>
|
604 |
|
605 |
+
<!-- Linked List -->
|
606 |
+
<div class="row sib-small-content">
|
607 |
<span class="col-md-3">
|
608 |
<?php esc_attr_e( 'Linked List', 'mailin' ); ?>
|
609 |
<?php SIB_Page_Home::get_narration_script( __( 'Linked List', 'mailin' ), __( 'Select the list where you want to add your new subscribers', 'mailin' ) ); ?>
|
610 |
</span>
|
611 |
+
<div id="sib_select_list_area" class="col-md-4">
|
612 |
|
613 |
+
<input type="hidden" id="sib_selected_list_id" value="">
|
614 |
<select data-placeholder="Please select the list" id="sib_select_list"
|
615 |
class="col-md-12 chosen-select" name="list_id[]" multiple=""
|
616 |
tabindex="-1"></select>
|
617 |
+
</div>
|
618 |
+
<div class="col-md-5">
|
619 |
+
<small
|
620 |
+
style="font-style: italic;"><?php esc_attr_e( 'You can use Marketing Automation to create specific workflow when a user is added to the list.', 'mailin' ); ?></small>
|
621 |
+
</div>
|
622 |
|
623 |
+
</div>
|
624 |
+
<!-- confirmation email -->
|
625 |
+
<div class="row small-content">
|
626 |
+
<span class="col-md-3"><?php esc_attr_e( 'Send a confirmation email', 'mailin' ); ?><?php echo esc_html( SIB_Page_Home::get_narration_script( __( 'Confirmation message', 'mailin' ), __( 'You can choose to send a confirmation email. You will be able to set up the template that will be sent to your new suscribers', 'mailin' ) ) ); ?></span>
|
627 |
+
|
628 |
+
<div class="col-md-4">
|
629 |
+
<label class="col-md-6" style="font-weight: normal;"><input type="radio"
|
630 |
+
id="is_confirm_email_yes"
|
631 |
+
name="is_confirm_email"
|
632 |
+
value="1" <?php checked( $formData['isOpt'], '1' ); ?>> <?php esc_attr_e( 'Yes', 'mailin' ); ?>
|
633 |
+
</label>
|
634 |
+
<label class="col-md-5" style="font-weight: normal;"><input type="radio"
|
635 |
+
id="is_confirm_email_no"
|
636 |
+
name="is_confirm_email"
|
637 |
+
value="0" <?php checked( $formData['isOpt'], '0' ); ?>> <?php esc_attr_e( 'No', 'mailin' ); ?>
|
638 |
+
</label>
|
639 |
+
</div>
|
640 |
+
<div class="col-md-5">
|
641 |
+
<small
|
642 |
+
style="font-style: italic;"><?php esc_attr_e( 'Select "Yes" if you want your subscribers to receive a confirmation email', 'mailin' ); ?></small>
|
643 |
+
</div>
|
644 |
+
</div>
|
645 |
+
<!-- select template id for confirmation email -->
|
646 |
+
<div class="row" id="sib_confirm_template_area">
|
647 |
+
<input type="hidden" id="sib_selected_template_id"
|
648 |
+
value="<?php echo esc_attr( $formData['templateID'] ); ?>">
|
649 |
+
<input type="hidden" id="sib_default_template_name"
|
650 |
+
value="<?php esc_attr_e( 'Default', 'mailin' ); ?>">
|
651 |
+
|
652 |
+
<div class="col-md-3" id="sib_template_id_area">
|
653 |
+
</div>
|
654 |
+
<div class="col-md-4">
|
655 |
+
<a href="https://my.sendinblue.com/camp/lists/template" class="col-md-12"
|
656 |
+
target="_blank"><i
|
657 |
+
class="fa fa-angle-right"></i> <?php esc_attr_e( 'Set up my templates', 'mailin' ); ?>
|
658 |
+
</a>
|
659 |
+
</div>
|
660 |
+
</div>
|
661 |
+
<!-- double optin confirmation email -->
|
662 |
+
<div class="row sib-small-content mt-3">
|
663 |
<span
|
664 |
+
class="col-md-3"><?php esc_attr_e( 'Double Opt-In', 'mailin' ); ?><?php echo esc_html( SIB_Page_Home::get_narration_script( __( 'Double Opt-In', 'mailin' ), __( 'Your subscribers will receive an email inviting them to confirm their subscription. Be careful, your subscribers are not saved in your list before confirming their subscription.', 'mailin' ) ) ); ?></span>
|
665 |
+
|
666 |
+
<div class="col-md-4">
|
667 |
+
<label class="col-md-6" style="font-weight: normal;"><input type="radio"
|
668 |
+
id="is_double_optin_yes"
|
669 |
+
name="is_double_optin"
|
670 |
+
value="1" <?php checked( $formData['isDopt'], '1' ); ?>> <?php esc_attr_e( 'Yes', 'mailin' ); ?>
|
671 |
+
</label>
|
672 |
+
<label class="col-md-5" style="font-weight: normal;"><input type="radio"
|
673 |
+
id="is_double_optin_no"
|
674 |
+
name="is_double_optin"
|
675 |
+
value="0" <?php checked( $formData['isDopt'], '0' ); ?>> <?php esc_attr_e( 'No', 'mailin' ); ?>
|
676 |
+
</label>
|
677 |
+
</div>
|
678 |
+
<div class="col-md-5">
|
679 |
+
<small
|
680 |
+
style="font-style: italic;"><?php esc_attr_e( 'Select "Yes" if you want your subscribers to confirm their email address', 'mailin' ); ?></small>
|
681 |
+
</div>
|
682 |
+
</div>
|
683 |
+
<!-- select template id for double optin confirmation email -->
|
684 |
+
<div class="row" id="sib_doubleoptin_template_area">
|
685 |
+
<input type="hidden" id="sib_selected_do_template_id" value="<?php echo esc_attr( $formData['templateID'] ); ?>">
|
686 |
+
<div class="col-md-3" id="sib_doubleoptin_template_id_area">
|
687 |
+
</div>
|
688 |
+
<div class="col-md-4">
|
689 |
+
<a href="https://my.sendinblue.com/camp/lists/template"
|
690 |
+
class="col-md-12" target="_blank"><i
|
691 |
+
class="fa fa-angle-right"></i> <?php esc_attr_e( 'Set up my templates', 'mailin' ); ?>
|
692 |
+
</a>
|
693 |
+
</div>
|
694 |
+
</div>
|
695 |
+
<div class="row sib-small-content mt-3" id="sib_double_redirect_area">
|
696 |
+
<span class="col-md-3"><?php esc_attr_e( 'Redirect to this URL after clicking in the email', 'mailin' ); ?></span>
|
697 |
|
698 |
+
<div class="col-md-8">
|
699 |
+
<input type="url" class="col-md-11" name="redirect_url" value="<?php echo esc_attr( $formData['redirectInEmail'] ); ?>">
|
700 |
+
</div>
|
701 |
+
</div>
|
702 |
<div class="row sib-small-content mt-3" id="sib_final_confirm_template_area">
|
703 |
<span class="col-md-3"><?php esc_attr_e( 'Select final confirmation email template', 'mailin' ); ?><?php echo esc_html( SIB_Page_Home::get_narration_script( __( 'Final confirmation', 'mailin' ), __( 'This is the final confirmation email your contacts will receive once they click on the double opt-in confirmation link. You can select one of the default templates we have created for you, e.g. \'Default template - Final confirmation\'.
|
704 |
For your information, you cannot select a template with the tag [DOUBLEOPTIN].', 'mailin' ) ) ); ?></span>
|
715 |
</div>
|
716 |
</div>
|
717 |
|
718 |
+
<div class="row sib-small-content mt-3">
|
719 |
<span
|
720 |
+
class="col-md-3"><?php esc_attr_e( 'Redirect to this URL after subscription', 'mailin' ); ?></span>
|
721 |
+
|
722 |
+
<div class="col-md-4">
|
723 |
+
<label class="col-md-6" style="font-weight: normal;"><input type="radio"
|
724 |
+
id="is_redirect_url_click_yes"
|
725 |
+
name="is_redirect_url_click"
|
726 |
+
value="1" checked> <?php esc_attr_e( 'Yes', 'mailin' ); ?>
|
727 |
+
</label>
|
728 |
+
<label class="col-md-5" style="font-weight: normal;"><input type="radio"
|
729 |
+
id="is_redirect_url_click_no"
|
730 |
+
name="is_redirect_url_click"
|
731 |
+
value="0" <?php checked( $formData['redirectInForm'], '' ); ?>> <?php esc_attr_e( 'No', 'mailin' ); ?>
|
732 |
+
</label>
|
733 |
|
734 |
+
</div>
|
735 |
+
<div class="col-md-5">
|
736 |
+
<small
|
737 |
+
style="font-style: italic;"><?php esc_attr_e( 'Select "Yes" if you want to redirect your subscribers to a specific page after they fullfill the form', 'mailin' ); ?></small>
|
738 |
+
</div>
|
739 |
+
</div>
|
740 |
+
<div class="row" style="margin-top: 10px;
|
741 |
+
<?php
|
742 |
+
if ( '' == $formData['redirectInForm'] ) {
|
743 |
+
echo 'display:none;';
|
744 |
+
}
|
745 |
+
?>
|
746 |
+
" id="sib_subscrition_redirect_area">
|
747 |
+
<span class="col-md-3"></span>
|
748 |
|
749 |
+
<div class="col-md-8">
|
750 |
+
<input type="url" class="col-md-11" name="redirect_url_click"
|
751 |
+
value="<?php echo esc_attr( $formData['redirectInForm'] ); ?>">
|
752 |
+
</div>
|
753 |
+
</div>
|
754 |
|
755 |
+
<div class="row sib-small-content" style="margin-top: 30px;">
|
756 |
+
<div class="col-md-3">
|
757 |
+
<button class="btn btn-primary"><?php esc_attr_e( 'Save', 'mailin' ); ?></button>
|
758 |
+
</div>
|
759 |
+
</div>
|
760 |
|
761 |
+
</div>
|
762 |
+
</div><!-- End Sign up process form-->
|
763 |
|
764 |
+
<!-- Confirmation message form -->
|
765 |
+
<div class="card sib-small-content">
|
766 |
+
<div class="card-header">
|
767 |
+
<strong><?php esc_attr_e( 'Confirmation message', 'mailin' ); ?></strong>
|
768 |
+
</div>
|
769 |
+
<div class="card-body">
|
770 |
+
<div class="row sib-small-content mt-3">
|
771 |
+
<!-- <span class="col-md-3"></span> -->
|
772 |
+
<label for="inputEmail3" class="col-md-3"><?php esc_attr_e( 'Success message', 'mailin' ); ?></label>
|
773 |
+
<div class="col-md-8">
|
774 |
+
<input type="text" class="col-md-11" name="alert_success_message"
|
775 |
+
value="<?php echo esc_attr( $formData['successMsg'] ); ?>" required>
|
776 |
+
<?php echo esc_html( SIB_Page_Home::get_narration_script( __( 'Success message', 'mailin' ), __( 'Set up the success message that will appear when one of your visitors surccessfully signs up', 'mailin' ) ) ); ?>
|
777 |
+
</div>
|
778 |
+
</div>
|
779 |
+
<div class="row sib-small-content mt-3">
|
780 |
+
<span class="col-md-3"><?php esc_attr_e( 'General error message', 'mailin' ); ?></span>
|
781 |
|
782 |
+
<div class="col-md-8">
|
783 |
+
<input type="text" class="col-md-11" name="alert_error_message"
|
784 |
+
value="<?php echo esc_attr( $formData['errorMsg'] ); ?>" required>
|
785 |
+
<?php echo esc_html( SIB_Page_Home::get_narration_script( __( 'General message error', 'mailin' ), __( 'Set up the message that will appear when an error occurs during the subscritpion process', 'mailin' ) ) ); ?>
|
786 |
+
</div>
|
787 |
+
</div>
|
788 |
+
<!--
|
789 |
<div class="row sib-small-content mt-3">
|
790 |
<span class="col-md-3"><?php esc_attr_e( 'Existing subscribers', 'mailin' ); ?></span>
|
791 |
|
796 |
</div>
|
797 |
</div>
|
798 |
-->
|
799 |
+
<div class="row sib-small-content mt-3">
|
800 |
+
<span class="col-md-3"><?php esc_attr_e( 'Invalid email address', 'mailin' ); ?></span>
|
801 |
|
802 |
+
<div class="col-md-8">
|
803 |
+
<input type="text" class="col-md-11" name="alert_invalid_email"
|
804 |
+
value="<?php echo esc_attr( $formData['invalidMsg'] ); ?>" required>
|
805 |
+
<?php echo esc_html( SIB_Page_Home::get_narration_script( __( 'Invalid email address', 'mailin' ), __( 'Set up the message that will appear when the email address used to sign up is not valid', 'mailin' ) ) ); ?>
|
806 |
+
</div>
|
807 |
+
</div>
|
808 |
<div class="row sib-small-content mt-3">
|
809 |
<span class="col-md-3"><?php esc_attr_e( 'Required Field', 'mailin' ); ?></span>
|
810 |
|
814 |
<?php echo esc_html( SIB_Page_Home::get_narration_script( __( 'Required Field', 'mailin' ), __( 'Set up the message that will appear when the required field is empty', 'mailin' ) ) ); ?>
|
815 |
</div>
|
816 |
</div>
|
817 |
+
<div class="row sib-small-content" style="margin-top: 30px;">
|
818 |
+
<div class="col-md-3">
|
819 |
+
<button class="btn btn-primary"><?php esc_attr_e( 'Save', 'mailin' ); ?></button>
|
820 |
+
</div>
|
821 |
+
</div>
|
822 |
+
</div>
|
823 |
+
</div> <!-- End Confirmation message form-->
|
824 |
+
</form>
|
825 |
+
</div>
|
826 |
+
<script>
|
827 |
+
jQuery(document).ready(function () {
|
828 |
+
jQuery('#sib_add_to_form_btn').click(function () {
|
829 |
+
//var field_html = jQuery('#sib_field_html').html();
|
830 |
+
|
831 |
+
// tinyMCE.activeEditor.selection.setContent(field_html);
|
832 |
+
|
833 |
+
return false;
|
834 |
+
});
|
835 |
+
});
|
836 |
+
</script>
|
837 |
+
<?php
|
838 |
+
} else {
|
839 |
+
// If empty?
|
840 |
+
?>
|
841 |
+
<div id="main-content" class="sib-content">
|
842 |
+
<div class="card sib-small-content">
|
843 |
+
<div class="card-header">
|
844 |
+
<strong><?php esc_attr_e( 'Subscription form', 'mailin' ); ?></strong>
|
845 |
+
</div>
|
846 |
+
<div style="padding: 24px 32px; margin-bottom: 12px;">
|
847 |
+
<?php esc_attr_e( 'Sorry, you selected invalid form ID. Please check again if the ID is right', 'mailin' ); ?>
|
848 |
+
</div>
|
849 |
+
</div>
|
850 |
+
</div>
|
851 |
+
<?php
|
852 |
+
}
|
853 |
+
}
|
854 |
+
|
855 |
+
/** Generate welcome page */
|
856 |
+
function generate_welcome_page() {
|
857 |
+
?>
|
858 |
+
<div id="main-content" class="row">
|
859 |
+
<img class="small-content" src="<?php echo esc_url( SIB_Manager::$plugin_url . '/img/background/setting.png' ); ?>" style="width: 100%;">
|
860 |
+
</div>
|
861 |
+
<?php
|
862 |
+
SIB_Page_Home::print_disable_popup();
|
863 |
+
}
|
864 |
+
|
865 |
+
/** Save subscription form setting */
|
866 |
+
public static function save_setting_subscription() {
|
867 |
+
// Check user role.
|
868 |
+
if ( ! current_user_can( 'manage_options' ) ) {
|
869 |
+
wp_die( 'Not allowed' );
|
870 |
+
}
|
871 |
+
|
872 |
+
// Check secret through hidden referrer field.
|
873 |
+
check_admin_referer( 'sib_setting_subscription' );
|
874 |
+
|
875 |
+
//Handling of backslash added by WP because magic quotes are enabled by default
|
876 |
+
array_walk_recursive( $_POST, function(&$value) {
|
877 |
+
$value = stripslashes($value);
|
878 |
+
});
|
879 |
+
|
880 |
+
// Subscription form.
|
881 |
+
$formID = isset( $_POST['sib_form_id'] ) ? sanitize_text_field( $_POST['sib_form_id'] ) : '';
|
882 |
+
$form_name = isset( $_POST['sib_form_name'] ) ? sanitize_text_field( $_POST['sib_form_name'] ) : '';
|
883 |
+
// phpcs:disable
|
884 |
+
$form_html = isset( $_POST['sib_form_html'] ) ? wp_kses($_POST['sib_form_html'], SIB_Manager::wordpress_allowed_attributes()) : '';
|
885 |
+
$list_ids = '';
|
886 |
+
|
887 |
+
if (!empty($_POST['list_id']) && is_array($_POST['list_id'])) {
|
888 |
+
$list_ids = array_filter($_POST['list_id'], 'is_int');
|
889 |
+
$list_ids = maybe_serialize($_POST['list_id']);
|
890 |
+
}
|
891 |
+
|
892 |
+
// phpcs:enable
|
893 |
+
$dependTheme = isset( $_POST['sib_css_type'] ) ? sanitize_text_field( $_POST['sib_css_type'] ) : '';
|
894 |
+
$customCss = isset( $_POST['sib_form_css'] ) ? sanitize_text_field( $_POST['sib_form_css'] ) : '';
|
895 |
+
$gCaptcha = isset( $_POST['sib_add_captcha'] ) ? sanitize_text_field( $_POST['sib_add_captcha'] ) : '0';
|
896 |
+
$gCaptchaSecret = isset( $_POST['sib_captcha_secret'] ) ? sanitize_text_field( $_POST['sib_captcha_secret'] ) : '';
|
897 |
+
$gCaptchaSite = isset( $_POST['sib_captcha_site'] ) ? sanitize_text_field( $_POST['sib_captcha_site'] ) : '';
|
898 |
+
$termAccept = isset( $_POST['sib_add_terms'] ) ? sanitize_text_field( $_POST['sib_add_terms'] ) : '0';
|
899 |
+
$termURL = isset( $_POST['sib_terms_url'] ) ? sanitize_text_field( $_POST['sib_terms_url'] ) : '';
|
900 |
+
$gCaptchaType = isset( $_POST['sib_recaptcha_type'] ) ? sanitize_text_field( $_POST['sib_recaptcha_type'] ) : '0';
|
901 |
+
if ( $gCaptcha != '0' ) {
|
902 |
+
if ( $gCaptchaType == '0' ) {
|
903 |
+
$gCaptcha = '3'; // google recaptcha.
|
904 |
+
}
|
905 |
+
elseif ( $gCaptchaType == '1' ) {
|
906 |
+
$gCaptcha = '2'; // google invisible recaptcha.
|
907 |
+
}
|
908 |
+
}
|
909 |
+
// for wpml plugins.
|
910 |
+
$pid = isset( $_POST['pid'] ) ? sanitize_text_field( $_POST['pid'] ) : '';
|
911 |
+
$lang = isset( $_POST['lang'] ) ? sanitize_text_field( $_POST['lang'] ) : '';
|
912 |
+
// sign up process.
|
913 |
+
$templateID = '-1';
|
914 |
+
$confirmID = '-1';
|
915 |
+
$redirectInForm = '';
|
916 |
+
|
917 |
+
$isOpt = isset( $_POST['is_confirm_email'] ) ? sanitize_text_field( $_POST['is_confirm_email'] ) : false;
|
918 |
+
if ( $isOpt ) {
|
919 |
+
$templateID = isset( $_POST['template_id'] ) ? sanitize_text_field( $_POST['template_id'] ) : '-1';
|
920 |
+
}
|
921 |
+
$isDopt = isset( $_POST['is_double_optin'] ) ? sanitize_text_field( $_POST['is_double_optin'] ) : false;
|
922 |
+
if ( $isDopt ) {
|
923 |
+
$templateID = isset( $_POST['doubleoptin_template_id'] ) ? sanitize_text_field( $_POST['doubleoptin_template_id'] ) : '-1';
|
924 |
$confirmID = isset( $_POST['confirm_template_id'] ) ? sanitize_text_field( $_POST['confirm_template_id'] ) : '-1';
|
925 |
+
}
|
926 |
+
$redirectInEmail = isset( $_POST['redirect_url'] ) ? sanitize_text_field( $_POST['redirect_url'] ) : '';
|
927 |
+
$isRedirectInForm = isset( $_POST['is_redirect_url_click'] ) ? sanitize_text_field( $_POST['is_redirect_url_click'] ) : false;
|
928 |
+
if ( $isRedirectInForm ) {
|
929 |
+
$redirectInForm = isset( $_POST['redirect_url_click'] ) ? sanitize_text_field( $_POST['redirect_url_click'] ) : '';
|
930 |
+
}
|
931 |
+
|
932 |
+
// get available attributes list.
|
933 |
+
$attributes = SIB_API_Manager::get_attributes();
|
934 |
+
$attributes = array_merge( $attributes['attributes']['normal_attributes'],$attributes['attributes']['category_attributes'] );
|
935 |
+
$available_attrs = array( 'email' );
|
936 |
+
if ( isset( $attributes ) && is_array( $attributes ) ) {
|
937 |
+
foreach ( $attributes as $attribute ) {
|
938 |
+
$pos = strpos( $form_html, 'sib-' . $attribute['name'] . '-area' );
|
939 |
+
if ( false !== $pos ) {
|
940 |
+
$available_attrs[] = $attribute['name'];
|
941 |
+
}
|
942 |
+
}
|
943 |
+
}
|
944 |
+
$successMsg = isset( $_POST['alert_success_message'] ) ? sanitize_text_field( esc_attr ($_POST['alert_success_message'] ) ) : '';
|
945 |
+
$errorMsg = isset( $_POST['alert_error_message'] ) ? sanitize_text_field( esc_attr( $_POST['alert_error_message'] ) ) : '';
|
946 |
+
$existMsg = isset( $_POST['alert_exist_subscriber'] ) ? sanitize_text_field( esc_attr( $_POST['alert_exist_subscriber'] ) ) : '';
|
947 |
+
$invalidMsg = isset( $_POST['alert_invalid_email'] ) ? sanitize_text_field( esc_attr( $_POST['alert_invalid_email'] ) ) : '';
|
948 |
+
$requiredMsg = isset( $_POST['alert_required_message']) ? sanitize_text_field( esc_attr($_POST['alert_required_message'])) : '';
|
949 |
+
$formData = array(
|
950 |
+
'title' => $form_name,
|
951 |
+
'html' => $form_html,
|
952 |
+
'css' => $customCss,
|
953 |
+
'listID' => $list_ids,
|
954 |
+
'dependTheme' => $dependTheme,
|
955 |
+
'isOpt' => $isOpt,
|
956 |
+
'isDopt' => $isDopt,
|
957 |
+
'templateID' => $templateID,
|
958 |
+
'confirmID' => $confirmID,
|
959 |
+
'redirectInEmail' => $redirectInEmail,
|
960 |
+
'redirectInForm' => $redirectInForm,
|
961 |
+
'successMsg' => $successMsg,
|
962 |
+
'errorMsg' => $errorMsg,
|
963 |
+
'existMsg' => $existMsg,
|
964 |
+
'invalidMsg' => $invalidMsg,
|
965 |
+
'requiredMsg' => $requiredMsg,
|
966 |
+
'attributes' => implode( ',', $available_attrs ),
|
967 |
+
'gcaptcha' => $gCaptcha,
|
968 |
+
'gcaptcha_secret' => $gCaptchaSecret,
|
969 |
+
'gcaptcha_site' => $gCaptchaSite,
|
970 |
+
'termAccept' => $termAccept,
|
971 |
+
'termsURL' => $termURL,
|
972 |
+
);
|
973 |
+
if ( 'new' === $formID ) {
|
974 |
+
$formID = SIB_Forms::addForm( $formData );
|
975 |
+
if ( '' !== $pid ) {
|
976 |
+
$transID = SIB_Forms_Lang::add_form_ID( $formID, $pid, $lang );
|
977 |
+
}
|
978 |
+
} else {
|
979 |
+
SIB_Forms::updateForm( $formID, $formData );
|
980 |
+
}
|
981 |
+
if ( '' !== $pid ) {
|
982 |
+
wp_safe_redirect(
|
983 |
+
add_query_arg(
|
984 |
+
array(
|
985 |
+
'page' => self::PAGE_ID,
|
986 |
+
'action' => 'edit',
|
987 |
+
'id' => $formID,
|
988 |
+
'pid' => $pid,
|
989 |
+
'lang' => $lang,
|
990 |
+
), admin_url( 'admin.php' )
|
991 |
+
)
|
992 |
+
);
|
993 |
+
exit();
|
994 |
+
} else {
|
995 |
+
wp_safe_redirect(
|
996 |
+
add_query_arg(
|
997 |
+
array(
|
998 |
+
'page' => self::PAGE_ID,
|
999 |
+
'action' => 'edit',
|
1000 |
+
'id' => $formID,
|
1001 |
+
), admin_url( 'admin.php' )
|
1002 |
+
)
|
1003 |
+
);
|
1004 |
+
exit();
|
1005 |
+
}
|
1006 |
+
}
|
1007 |
+
|
1008 |
+
/** Ajax process when change template id */
|
1009 |
+
public static function ajax_change_template() {
|
1010 |
+
check_ajax_referer( 'ajax_sib_admin_nonce', 'security' );
|
1011 |
+
$template_id = isset( $_POST['template_id'] ) ? sanitize_text_field( $_POST['template_id'] ) : '';
|
1012 |
+
$mailin = new SendinblueApiClient( );
|
1013 |
+
$data = array(
|
1014 |
+
'id' => $template_id,
|
1015 |
+
);
|
1016 |
+
$response = $mailin->getEmailTemplate( $data["id"] );
|
1017 |
+
|
1018 |
+
$ret_email = '-1';
|
1019 |
+
if ( $mailin->getLastResponseCode() === SendinblueApiClient::RESPONSE_CODE_OK) {
|
1020 |
+
$from_email = $response[0]['sender']['email'];
|
1021 |
+
if ( '[DEFAULT_FROM_EMAIL]' == $from_email ) {
|
1022 |
+
$ret_email = '-1';
|
1023 |
+
} else {
|
1024 |
+
$ret_email = $from_email;
|
1025 |
+
}
|
1026 |
+
}
|
1027 |
+
wp_send_json( $ret_email );
|
1028 |
+
}
|
1029 |
+
|
1030 |
+
/**
|
1031 |
+
* Ajax module to get all lists.
|
1032 |
+
*/
|
1033 |
+
public static function ajax_get_lists() {
|
1034 |
+
check_ajax_referer( 'ajax_sib_admin_nonce', 'security' );
|
1035 |
+
$lists = SIB_API_Manager::get_lists();
|
1036 |
+
$frmID = isset( $_POST['frmid'] ) ? sanitize_text_field( $_POST['frmid'] ) : '';
|
1037 |
+
$formData = SIB_Forms::getForm( $frmID );
|
1038 |
+
$result = array(
|
1039 |
+
'lists' => $lists,
|
1040 |
+
'selected' => $formData['listID'],
|
1041 |
+
);
|
1042 |
+
wp_send_json( $result );
|
1043 |
+
}
|
1044 |
+
|
1045 |
+
/**
|
1046 |
+
* Ajax module to get all templates.
|
1047 |
+
*/
|
1048 |
+
public static function ajax_get_templates() {
|
1049 |
+
check_ajax_referer( 'ajax_sib_admin_nonce', 'security' );
|
1050 |
+
$templates = SIB_API_Manager::get_templates();
|
1051 |
+
$result = array(
|
1052 |
+
'templates' => $templates,
|
1053 |
+
);
|
1054 |
+
wp_send_json( $result );
|
1055 |
+
}
|
1056 |
+
|
1057 |
+
/**
|
1058 |
+
* Ajax module to get all attributes.
|
1059 |
+
*/
|
1060 |
+
public static function ajax_get_attributes() {
|
1061 |
+
check_ajax_referer( 'ajax_sib_admin_nonce', 'security' );
|
1062 |
+
$attrs = SIB_API_Manager::get_attributes();
|
1063 |
+
$result = array(
|
1064 |
+
'attrs' => $attrs,
|
1065 |
+
);
|
1066 |
+
wp_send_json( $result );
|
1067 |
+
}
|
1068 |
+
|
1069 |
+
/**
|
1070 |
+
* Ajax module to update form html for preview
|
1071 |
+
*/
|
1072 |
+
public static function ajax_update_html() {
|
1073 |
+
check_ajax_referer( 'ajax_sib_admin_nonce', 'security' );
|
1074 |
+
$gCaptchaType = isset( $_POST['gCaptchaType']) ? sanitize_text_field($_POST['gCaptchaType']) : '1';
|
1075 |
+
$gCaptcha = isset( $_POST['gCaptcha'] ) ? sanitize_text_field($_POST['gCaptcha']) : '0';
|
1076 |
+
if ( $gCaptcha != '0' ) {
|
1077 |
+
if( $gCaptchaType == '1' ) {
|
1078 |
+
$gCaptcha = '2';
|
1079 |
+
}
|
1080 |
+
elseif ( $gCaptchaType == '0' ) {
|
1081 |
+
$gCaptcha = '3';
|
1082 |
+
}
|
1083 |
+
}
|
1084 |
+
$formData = array(
|
1085 |
+
'html' => isset( $_POST['frmData'] ) ? wp_kses($_POST['frmData'], SIB_Manager::wordpress_allowed_attributes()) : '',// phpcs:ignore
|
1086 |
+
'css' => isset( $_POST['frmCss'] ) ? sanitize_text_field($_POST['frmCss']) : '',
|
1087 |
+
'dependTheme' => isset( $_POST['isDepend'] ) ? sanitize_text_field($_POST['isDepend']) : '',
|
1088 |
+
'gCaptcha' => $gCaptcha,
|
1089 |
+
'gCaptcha_site' => isset( $_POST['gCaptchaSite'] ) ? sanitize_text_field($_POST['gCaptchaSite']) : ''
|
1090 |
+
);
|
1091 |
+
|
1092 |
+
update_option( SIB_Manager::PREVIEW_OPTION_NAME, $formData );
|
1093 |
+
die;
|
1094 |
+
}
|
1095 |
+
|
1096 |
+
/**
|
1097 |
+
* Ajax module to copy content from origin form for translation
|
1098 |
+
*/
|
1099 |
+
public static function ajax_copy_origin_form() {
|
1100 |
+
check_ajax_referer( 'ajax_sib_admin_nonce', 'security' );
|
1101 |
+
$pID = isset( $_POST['pid'] ) ? sanitize_text_field( $_POST['pid'] ) : 1;
|
1102 |
+
$formData = SIB_Forms::getForm( $pID );
|
1103 |
+
// phpcs:ignore
|
1104 |
+
$html = $formData['html'];
|
1105 |
+
|
1106 |
+
wp_send_json( $html );
|
1107 |
+
}
|
1108 |
+
}
|
1109 |
}
|
page/page-home.php
CHANGED
@@ -6,578 +6,578 @@
|
|
6 |
*/
|
7 |
|
8 |
if ( ! class_exists( 'SIB_Page_Home' ) ) {
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
update_option(SIB_Manager::API_KEY_V3_OPTION_NAME, $access_key);
|
579 |
-
|
580 |
-
|
581 |
if ( $apiClient->getLastResponseCode() === SendinblueApiClient::RESPONSE_CODE_OK ) {
|
582 |
self::processInstallationInfo("login");
|
583 |
// create tables for users and forms.
|
@@ -591,163 +591,163 @@ if ( ! class_exists( 'SIB_Page_Home' ) ) {
|
|
591 |
delete_option(SIB_Manager::API_KEY_V3_OPTION_NAME);
|
592 |
$message = isset($response['code']) ? $response['code'] . ': ' . $response['message'] :'Please input a valid API v3 key';
|
593 |
}
|
594 |
-
|
595 |
-
|
596 |
delete_option(SIB_Manager::API_KEY_V3_OPTION_NAME);
|
597 |
-
|
598 |
wp_send_json($message);
|
599 |
}
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
];
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
|
709 |
-
|
710 |
-
|
711 |
-
|
712 |
-
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
|
717 |
-
|
718 |
-
|
719 |
-
|
720 |
-
|
721 |
-
|
722 |
-
|
723 |
-
|
724 |
-
|
725 |
-
|
726 |
-
|
727 |
-
|
728 |
-
|
729 |
-
|
730 |
-
|
731 |
-
|
732 |
-
|
733 |
-
|
734 |
-
|
735 |
-
|
736 |
-
|
737 |
-
|
738 |
-
|
739 |
-
|
740 |
-
|
741 |
-
|
742 |
-
|
743 |
-
|
744 |
-
|
745 |
-
|
746 |
-
|
747 |
-
|
748 |
-
|
749 |
-
|
750 |
-
|
751 |
{
|
752 |
$userData .= ';' . implode( ', ', $user_info->$attrWP ) ;
|
753 |
}
|
@@ -755,90 +755,90 @@ if ( ! class_exists( 'SIB_Page_Home' ) ) {
|
|
755 |
$userData .= ';' . $user_info->$attrWP;
|
756 |
}
|
757 |
|
758 |
-
|
759 |
-
|
760 |
-
|
761 |
-
|
762 |
-
|
763 |
-
|
764 |
-
|
765 |
-
|
766 |
-
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
-
|
775 |
-
|
776 |
-
|
777 |
-
|
778 |
-
|
779 |
-
|
780 |
-
|
781 |
-
|
782 |
-
|
783 |
-
|
784 |
-
|
785 |
-
|
786 |
-
|
787 |
-
|
788 |
-
|
789 |
-
|
790 |
-
|
791 |
-
|
792 |
-
|
793 |
-
|
794 |
-
|
795 |
-
|
796 |
-
|
797 |
-
|
798 |
-
|
799 |
-
|
800 |
-
|
801 |
-
|
802 |
-
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
-
|
808 |
-
|
809 |
-
|
810 |
-
|
811 |
-
|
812 |
-
|
813 |
-
|
814 |
-
|
815 |
-
|
816 |
-
|
817 |
-
|
818 |
-
|
819 |
-
|
820 |
-
|
821 |
-
|
822 |
-
|
823 |
-
|
824 |
-
|
825 |
-
|
826 |
-
|
827 |
-
|
828 |
-
|
829 |
-
|
830 |
-
|
831 |
-
|
832 |
-
|
833 |
-
|
834 |
-
|
835 |
-
|
836 |
-
|
837 |
-
|
838 |
-
$apiClient->updateInstallationInfo($installationId, $params);
|
839 |
-
}
|
840 |
-
}
|
841 |
-
}
|
842 |
-
}
|
6 |
*/
|
7 |
|
8 |
if ( ! class_exists( 'SIB_Page_Home' ) ) {
|
9 |
+
/**
|
10 |
+
* Page class that handles backend page <i>dashboard ( for admin )</i> with form generation and processing
|
11 |
+
*
|
12 |
+
* @package SIB_Page_Home
|
13 |
+
*/
|
14 |
+
class SIB_Page_Home {
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Page slug
|
18 |
+
*/
|
19 |
+
const PAGE_ID = 'sib_page_home';
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Page hook
|
23 |
+
*
|
24 |
+
* @var string
|
25 |
+
*/
|
26 |
+
protected $page_hook;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Page tabs
|
30 |
+
*
|
31 |
+
* @var mixed
|
32 |
+
*/
|
33 |
+
protected $tabs;
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Constructs new page object and adds entry to WordPress admin menu
|
37 |
+
*/
|
38 |
+
function __construct() {
|
39 |
+
add_menu_page( __( 'Sendinblue', 'mailin' ), __( 'Sendinblue', 'mailin' ), 'manage_options', self::PAGE_ID, array( &$this, 'generate' ), SIB_Manager::$plugin_url . '/img/favicon.ico' );
|
40 |
+
$this->page_hook = add_submenu_page( self::PAGE_ID, __( 'Home', 'mailin' ), __( 'Home', 'mailin' ), 'manage_options', self::PAGE_ID, array( &$this, 'generate' ) );
|
41 |
+
add_action( 'load-' . $this->page_hook, array( &$this, 'init' ) );
|
42 |
+
add_action( 'admin_print_scripts-' . $this->page_hook, array( $this, 'enqueue_scripts' ) );
|
43 |
+
add_action( 'admin_print_styles-' . $this->page_hook, array( $this, 'enqueue_styles' ) );
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Init Process
|
48 |
+
*/
|
49 |
+
function Init() {
|
50 |
+
if ( ( isset( $_GET['sib_action'] ) ) && ( 'logout' === sanitize_text_field($_GET['sib_action'] )) ) {
|
51 |
+
$this->logout();
|
52 |
+
}
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Enqueue scripts of plugin
|
57 |
+
*/
|
58 |
+
function enqueue_scripts() {
|
59 |
+
wp_enqueue_script( 'sib-admin-js' );
|
60 |
+
wp_enqueue_script( 'sib-bootstrap-js' );
|
61 |
+
wp_enqueue_script( 'sib-chosen-js' );
|
62 |
+
wp_localize_script(
|
63 |
+
'sib-admin-js', 'ajax_sib_object',
|
64 |
+
array(
|
65 |
+
'ajax_url' => admin_url( 'admin-ajax.php' ),
|
66 |
+
'ajax_nonce' => wp_create_nonce( 'ajax_sib_admin_nonce' ),
|
67 |
+
)
|
68 |
+
);
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Enqueue style sheets of plugin
|
73 |
+
*/
|
74 |
+
function enqueue_styles() {
|
75 |
+
wp_enqueue_style( 'sib-admin-css' );
|
76 |
+
wp_enqueue_style( 'sib-bootstrap-css' );
|
77 |
+
wp_enqueue_style( 'sib-chosen-css' );
|
78 |
+
wp_enqueue_style( 'sib-fontawesome-css' );
|
79 |
+
}
|
80 |
+
|
81 |
+
/** Generate page script */
|
82 |
+
function generate() {
|
83 |
+
?>
|
84 |
+
<div id="wrap" class="wrap box-border-box container-fluid">
|
85 |
+
<h2><img id="logo-img" src="<?php echo esc_url( SIB_Manager::$plugin_url . '/img/logo.png' ); ?>"></h2>
|
86 |
+
<div class="row">
|
87 |
+
<div id="wrap-left" class="box-border-box col-md-9">
|
88 |
+
<div id="sib-message-box" class="row alert alert-success" style="display: none;">
|
89 |
+
<p id="sib-message-body"></p>
|
90 |
+
</div>
|
91 |
+
<?php
|
92 |
+
if ( SIB_Manager::is_done_validation(false)) {
|
93 |
+
$this->generate_main_content();
|
94 |
+
} else {
|
95 |
+
$this->generate_welcome_content();
|
96 |
+
}
|
97 |
+
?>
|
98 |
+
</div>
|
99 |
+
<div id="wrap-right-side" class="box-border-box col-md-3">
|
100 |
+
<?php
|
101 |
+
self::generate_side_bar();
|
102 |
+
?>
|
103 |
+
</div>
|
104 |
+
</div>
|
105 |
+
</div>
|
106 |
+
<?php
|
107 |
+
}
|
108 |
+
|
109 |
+
/** Generate welcome page before validation */
|
110 |
+
function generate_welcome_content() {
|
111 |
+
?>
|
112 |
+
|
113 |
+
<div id="main-content" class="sib-content">
|
114 |
+
<input type="hidden" id="cur_refer_url" value="<?php echo esc_url( add_query_arg( array( 'page' => 'sib_page_home' ), admin_url( 'admin.php' ) ) ); ?> ">
|
115 |
+
<div class="card sib-small-content">
|
116 |
+
<div class="card-header">
|
117 |
+
<span style="color: #777777;"><?php esc_attr_e( 'Step', 'mailin' ); ?> 1 | </span><strong><?php esc_attr_e( 'Create a Sendinblue Account', 'mailin' ); ?></strong>
|
118 |
+
</div>
|
119 |
+
<div class="card-body">
|
120 |
+
<div class="col-md-9">
|
121 |
+
<p><?php esc_attr_e( 'By creating a free Sendinblue account, you will be able to send confirmation emails and:', 'mailin' ); ?></p>
|
122 |
+
<ul class="sib-home-feature">
|
123 |
+
<li><span class="glyphicon glyphicon-ok" style="font-size: 12px;"></span> <?php esc_attr_e( 'Collect your contacts and upload your lists', 'mailin' ); ?></li>
|
124 |
+
<li><span class="glyphicon glyphicon-ok" style="font-size: 12px;"></span> <?php esc_attr_e( 'Use Sendinblue SMTP to send your transactional emails', 'mailin' ); ?></li>
|
125 |
+
<li class="home-read-more-content"><span class="glyphicon glyphicon-ok" style="font-size: 12px;"></span> <?php esc_attr_e( 'Email marketing builders', 'mailin' ); ?></li>
|
126 |
+
<li class="home-read-more-content"><span class="glyphicon glyphicon-ok" style="font-size: 12px;"></span> <?php esc_attr_e( 'Create and schedule your email marketing campaigns', 'mailin' ); ?></li>
|
127 |
+
<li class="home-read-more-content"><span class="glyphicon glyphicon-ok" style="font-size: 12px;"></span> <?php esc_attr_e( 'Try all of', 'mailin' ); ?> <a href="https://www.sendinblue.com/features/?utm_source=wordpress_plugin&utm_medium=plugin&utm_campaign=module_link" target="_blank"><?php esc_attr_e( 'Sendinblue\'s features', 'mailin' ); ?></a></li>
|
128 |
+
</ul>
|
129 |
+
<a href="https://www.sendinblue.com/users/signup?utm_source=wordpress_plugin&utm_medium=plugin&utm_campaign=module_link" class="btn btn-primary" target="_blank" style="margin-top: 10px;"><?php esc_attr_e( 'Create an account', 'mailin' ); ?></a>
|
130 |
+
</div>
|
131 |
+
</div>
|
132 |
+
</div>
|
133 |
+
<div class="card sib-small-content">
|
134 |
+
<div class="card-header">
|
135 |
+
<span style="color: #777777;"><?php esc_attr_e( 'Step', 'mailin' ); ?> 2 | </span><strong><?php esc_attr_e( 'Activate your account with your API key v3', 'mailin' ); ?></strong>
|
136 |
+
</div>
|
137 |
+
<div class="card-body">
|
138 |
+
<div class="col-md-9 row">
|
139 |
+
<div id="success-alert" class="alert alert-success" role="alert" style="display: none;"><?php esc_attr_e( 'You successfully activate your account.', 'mailin' ); ?></div>
|
140 |
+
<input type="hidden" id="general_error" value="<?php esc_attr_e( 'Please input a valid API v3 key', 'mailin' ); ?>">
|
141 |
+
<input type="hidden" id="curl_no_exist_error" value="<?php esc_attr_e( 'Please install curl on site to use sendinblue plugin.', 'mailin' ); ?>">
|
142 |
+
<input type="hidden" id="curl_error" value="<?php esc_attr_e( 'Curl error.', 'mailin' ); ?>">
|
143 |
+
<div id="failure-alert" class="alert alert-danger" role="alert" style="display: none;"><?php esc_attr_e( 'Please input a valid API v3 key.', 'mailin' ); ?></div>
|
144 |
+
<p>
|
145 |
+
<?php esc_attr_e( 'Once you have created a Sendinblue account, activate this plugin to send all of your transactional emails via Sendinblue SMTP. Sendinblue optimizes email delivery to ensure emails reach the inbox.', 'mailin' ); ?><br>
|
146 |
+
<?php esc_attr_e( 'To activate your plugin, enter your API v3 Access key.', 'mailin' ); ?><br>
|
147 |
+
</p>
|
148 |
+
<p>
|
149 |
+
<a href="https://my.sendinblue.com/advanced/apikey/?utm_source=wordpress_plugin&utm_medium=plugin&utm_campaign=module_link" target="_blank"><i class="fa fa-angle-right"></i> <?php esc_attr_e( 'Get your API key from your account', 'mailin' ); ?></a>
|
150 |
+
</p>
|
151 |
+
<p>
|
152 |
+
<div class="col-md-7">
|
153 |
+
<p class="col-md-12"><input id="sib_access_key" type="text" class="col-md-10" style="margin-top: 10px;" placeholder="xkeysib-xxxxxx"></p>
|
154 |
+
<p class="col-md-12"><button type="button" id="sib_validate_btn" class="col-md-4 btn btn-primary"><span class="sib-spin"><i class="fa fa-circle-o-notch fa-spin fa-lg"></i> </span><?php esc_attr_e( 'Login', 'mailin' ); ?></button></p>
|
155 |
+
</div>
|
156 |
+
</p>
|
157 |
+
</div>
|
158 |
+
</div>
|
159 |
+
</div>
|
160 |
+
</div>
|
161 |
+
<?php
|
162 |
+
}
|
163 |
+
|
164 |
+
/** Generate main home page after validation */
|
165 |
+
function generate_main_content() {
|
166 |
+
|
167 |
+
// display account info.
|
168 |
+
$account_settings = SIB_API_Manager::get_account_info();
|
169 |
+
$account_email = $account_settings['account_email'];
|
170 |
+
$account_user_name = isset( $account_settings['account_user_name'] ) ? $account_settings['account_user_name'] : '';
|
171 |
+
$account_data = isset( $account_settings['account_data'] ) ? $account_settings['account_data'] : '';
|
172 |
+
// check smtp available.
|
173 |
+
$smtp_status = SIB_API_Manager::get_smtp_status();
|
174 |
+
|
175 |
+
$home_settings = get_option( SIB_Manager::HOME_OPTION_NAME );
|
176 |
+
// for upgrade to 2.6.0 from old version.
|
177 |
+
if ( ! isset( $home_settings['activate_ma'] ) ) {
|
178 |
+
$home_settings['activate_ma'] = 'no';
|
179 |
+
}
|
180 |
+
// set default sender info.
|
181 |
+
$senders = SIB_API_Manager::get_sender_lists();
|
182 |
+
if (is_array( $senders) && (!isset( $home_settings['sender'] ) || (count($senders) == 1 && $home_settings['from_email'] != $senders[0]['from_email']))) {
|
183 |
+
$home_settings['sender'] = $senders[0]['id'];
|
184 |
+
$home_settings['from_name'] = $senders[0]['from_name'];
|
185 |
+
$home_settings['from_email'] = $senders[0]['from_email'];
|
186 |
+
update_option( SIB_Manager::HOME_OPTION_NAME, $home_settings );
|
187 |
+
}
|
188 |
+
|
189 |
+
// Users Sync part.
|
190 |
+
$currentUsers = count_users();
|
191 |
+
$isSynced = get_option( 'sib_sync_users', '0' );
|
192 |
+
$isEnableSync = '0';
|
193 |
+
if ( $isSynced != $currentUsers['total_users'] ) {
|
194 |
+
$isEnableSync = '1';
|
195 |
+
/* translators: %s: total users */
|
196 |
+
$desc = sprintf( esc_attr__( 'You have %s existing users. Do you want to add them to Sendinblue?', 'mailin' ), $currentUsers['total_users'] );
|
197 |
+
} else {
|
198 |
+
$desc = esc_attr__( 'All your users have been added to a Sendinblue list.','mailin' );
|
199 |
+
}
|
200 |
+
self::print_sync_popup();
|
201 |
+
?>
|
202 |
+
|
203 |
+
<div id="main-content" class="sib-content">
|
204 |
+
<input type="hidden" id="cur_refer_url" value="<?php echo esc_url( add_query_arg( array( 'page' => 'sib_page_home' ), admin_url( 'admin.php' ) ) ); ?> ">
|
205 |
+
<!-- Account Info -->
|
206 |
+
<div class="card sib-small-content">
|
207 |
+
<div class="card-header">
|
208 |
+
<strong><?php esc_attr_e( 'My Account', 'mailin' ); ?></strong>
|
209 |
+
</div>
|
210 |
+
<div class="card-body">
|
211 |
+
<div class="col-md-12">
|
212 |
+
<span><b><?php esc_attr_e( 'You are currently logged in as : ', 'mailin' ); ?></b></span>
|
213 |
+
<div style="margin-bottom: 10px;">
|
214 |
+
<p class="col-md-12" style="margin-top: 5px;">
|
215 |
+
<?php echo esc_attr( $account_user_name ); ?> - <?php echo esc_attr( $account_email ); ?><br>
|
216 |
+
<?php
|
217 |
+
$count = count( $account_data );
|
218 |
+
for ( $i = 0; $i < $count; $i ++ ) {
|
219 |
+
if ( isset($account_data[$i]['type']) )
|
220 |
+
{
|
221 |
+
echo esc_attr( $account_data[ $i ]['type'] ) . ' - ' . esc_attr( $account_data[ $i ]['credits'] ) . ' ' . esc_attr__( 'credits', 'mailin' ) . '<br>';
|
222 |
+
}
|
223 |
+
}
|
224 |
+
?>
|
225 |
+
<a class="text-decoration-none" href="<?php echo esc_url( add_query_arg( 'sib_action', 'logout' ) ); ?>"><i class="fa fa-angle-right"></i> <?php esc_attr_e( 'Log out', 'mailin' ); ?></a>
|
226 |
+
</p>
|
227 |
+
</div>
|
228 |
+
|
229 |
+
<span><b><?php esc_attr_e( 'Contacts', 'mailin' ); ?></b></span>
|
230 |
+
</div>
|
231 |
+
<div class="row" style="padding-top: 10px;">
|
232 |
+
<div class="col-md-6">
|
233 |
+
<p style="margin-top: 5px;">
|
234 |
+
<a id="sib_list_link" class="text-decoration-none" href="https://my.sendinblue.com/users/list/?utm_source=wordpress_plugin&utm_medium=plugin&utm_campaign=module_link" target="_blank"><i class="fa fa-angle-right"></i> <?php esc_attr_e( 'Access to the list of all my contacts', 'mailin' ); ?></a>
|
235 |
+
</p>
|
236 |
+
</div>
|
237 |
+
<div class="col-md-6 row">
|
238 |
+
<p class="col-md-7">
|
239 |
+
<b><?php echo esc_attr__( 'Users Synchronisation', 'mailin' ); ?></b><br>
|
240 |
+
<?php echo esc_attr( $desc ); ?><br>
|
241 |
+
</p>
|
242 |
+
<div class="col-md-5">
|
243 |
+
<a data-bs-toggle="modal" data-bs-target="#syncUsers" <?php echo '1' === $isEnableSync ? 'id="sib-sync-btn"' : 'disabled href="javascript:void(0)"'; ?> class="btn btn-primary" style="margin-top: 28px; " name="<?php echo esc_attr__( 'Users Synchronisation', 'mailin' ); ?>" href="#"><?php esc_attr_e( 'Sync my users', 'mailin' ); ?></a>
|
244 |
+
</div>
|
245 |
+
</div>
|
246 |
+
</div>
|
247 |
+
</div>
|
248 |
+
</div>
|
249 |
+
<!-- Transactional Email -->
|
250 |
+
<div class="card sib-small-content">
|
251 |
+
<div class="card-header">
|
252 |
+
<strong><?php esc_attr_e( 'Transactional emails', 'mailin' ); ?></strong>
|
253 |
+
</div>
|
254 |
+
<div class="card-body">
|
255 |
+
<?php
|
256 |
+
if ( 'disabled' == $smtp_status ) :
|
257 |
+
?>
|
258 |
+
<div id="smtp-failure-alert" class="col-md-12 sib_alert alert alert-danger" role="alert"><?php esc_attr_e( 'Unfortunately, your "Transactional emails" are not activated because your Sendinblue SMTP account is not active. Please send an email to contact@sendinblue.com in order to ask for SMTP account activation', 'mailin' ); ?></div>
|
259 |
+
<?php
|
260 |
+
endif;
|
261 |
+
?>
|
262 |
+
<div id="success-alert" class="col-md-12 sib_alert alert alert-success" role="alert" style="display: none;"><?php esc_attr_e( 'Mail Sent.', 'mailin' ); ?></div>
|
263 |
+
<div id="failure-alert" class="col-md-12 sib_alert alert alert-danger" role="alert" style="display: none;"><?php esc_attr_e( 'Please input valid email.', 'mailin' ); ?></div>
|
264 |
+
<div class="row">
|
265 |
+
<p class="col-md-4 text-left"><?php esc_attr_e( 'Activate email through Sendinblue', 'mailin' ); ?></p>
|
266 |
+
<div class="col-md-3">
|
267 |
+
<label class="col-md-5"><input type="radio" name="activate_email" id="activate_email_radio_yes" value="yes"
|
268 |
+
<?php
|
269 |
+
checked( $home_settings['activate_email'], 'yes' );
|
270 |
+
if ( 'disabled' === $smtp_status ) {
|
271 |
+
echo ' disabled';
|
272 |
+
}
|
273 |
+
?>
|
274 |
+
> <?php esc_attr_e( 'Yes', 'mailin' ); ?></label>
|
275 |
+
<label class="col-md-5"><input type="radio" name="activate_email" id="activate_email_radio_no" value="no" <?php checked( $home_settings['activate_email'], 'no' ); ?>> <?php esc_attr_e( 'No', 'mailin' ); ?></label>
|
276 |
+
</div>
|
277 |
+
<div class="col-md-5">
|
278 |
+
<small style="font-style: italic;"><?php esc_attr_e( 'Choose "Yes" if you want to use Sendinblue SMTP to send transactional emails', 'mailin' ); ?></small>
|
279 |
+
</div>
|
280 |
+
</div>
|
281 |
+
<div id="email_send_field"
|
282 |
+
<?php
|
283 |
+
if ( 'yes' !== $home_settings['activate_email'] ) {
|
284 |
+
echo 'style="display:none;"';
|
285 |
+
}
|
286 |
+
?>
|
287 |
+
>
|
288 |
+
<div class="row" style="margin-bottom: 10px;">
|
289 |
+
<p class="col-md-4 text-left"><?php esc_attr_e( 'Choose your sender', 'mailin' ); ?></p>
|
290 |
+
<div class="col-md-3">
|
291 |
+
<select id="sender_list" class="col-md-12">
|
292 |
+
<?php
|
293 |
+
$senders = SIB_API_Manager::get_sender_lists();
|
294 |
+
foreach ( $senders as $sender ) {
|
295 |
+
echo "<option value='" . esc_attr( $sender['id'] ) . "' " . selected( $home_settings['sender'], $sender['id'] ) . '>' . esc_attr( $sender['from_name'] ) . ' <' . esc_attr( $sender['from_email'] ) . '></option>';
|
296 |
+
}
|
297 |
+
?>
|
298 |
+
</select>
|
299 |
+
</div>
|
300 |
+
<div class="col-md-5">
|
301 |
+
<a class="text-decoration-none" href="https://account.sendinblue.com/senders/" style="font-style: italic;" target="_blank" ><i class="fa fa-angle-right"></i> <?php esc_attr_e( 'Create a new sender', 'mailin' ); ?></a>
|
302 |
+
</div>
|
303 |
+
</div>
|
304 |
+
<div class="row">
|
305 |
+
<p class="col-md-4 text-left"><?php esc_attr_e( 'Enter email to send a test', 'mailin' ); ?></p>
|
306 |
+
<div class="col-md-3">
|
307 |
+
<input id="activate_email" type="email" class="col-md-12">
|
308 |
+
<button type="button" id="send_email_btn" class="col-md-12 btn btn-primary"><span class="sib-spin"><i class="fa fa-circle-o-notch fa-spin fa-lg"></i> </span><?php esc_attr_e( 'Send email', 'mailin' ); ?></button>
|
309 |
+
</div>
|
310 |
+
<div class="col-md-5">
|
311 |
+
<small style="font-style: italic;"><?php esc_attr_e( 'Select here the email address you want to send a test email to.', 'mailin' ); ?></small>
|
312 |
+
</div>
|
313 |
+
</div>
|
314 |
+
</div>
|
315 |
+
</div>
|
316 |
+
</div>
|
317 |
+
<!-- Marketing Automation -->
|
318 |
+
<div class="card sib-small-content">
|
319 |
+
<div class="card-header">
|
320 |
+
<strong><?php esc_attr_e( 'Automation', 'mailin' ); ?></strong>
|
321 |
+
</div>
|
322 |
+
<div class="card-body">
|
323 |
+
<div class="sib-ma-alert sib-ma-active alert alert-success" role="alert" style="display: none;"><?php esc_attr_e( 'Your Marketing Automation script is installed correctly.', 'mailin' ); ?></div>
|
324 |
+
<div class="sib-ma-alert sib-ma-inactive alert alert-danger" role="alert" style="display: none;"><?php esc_attr_e( 'Your Marketing Automation script has been uninstalled', 'mailin' ); ?></div>
|
325 |
+
<div class="sib-ma-alert sib-ma-disabled alert alert-danger" role="alert" style="display: none;"><?php esc_attr_e( 'To activate Marketing Automation, please go to your Sendinblue\'s account or contact us at contact@sendinblue.com', 'mailin' ); ?></div>
|
326 |
+
<input type="hidden" id="sib-ma-unistall" value="<?php esc_attr_e( 'Your Marketing Automation script will be uninstalled, you won\'t have access to any Marketing Automation data and workflows', 'mailin' ); ?>">
|
327 |
+
<div class="row">
|
328 |
+
<p class="col-md-4 text-left"><?php esc_attr_e( 'Activate Marketing Automation through Sendinblue', 'mailin' ); ?></p>
|
329 |
+
<div class="col-md-3">
|
330 |
+
<label class="col-md-5"><input type="radio" name="activate_ma" id="activate_ma_radio_yes" value="yes"
|
331 |
+
<?php
|
332 |
+
checked( $home_settings['activate_ma'], 'yes' );
|
333 |
+
?>
|
334 |
+
> <?php esc_attr_e( 'Yes', 'mailin' ); ?></label>
|
335 |
+
<label class="col-md-5"><input type="radio" name="activate_ma" id="activate_ma_radio_no" value="no" <?php checked( $home_settings['activate_ma'], 'no' ); ?>> <?php esc_attr_e( 'No', 'mailin' ); ?></label>
|
336 |
+
</div>
|
337 |
+
<div class="col-md-5">
|
338 |
+
<small style="font-style: italic;"><?php esc_attr_e( 'Choose "Yes" if you want to use Sendinblue Automation to track your website activity', 'mailin' ); ?></small>
|
339 |
+
</div>
|
340 |
+
</div>
|
341 |
+
<div class="row" style="">
|
342 |
+
<p class="col-md-4 text-left" style="font-size: 13px; font-style: italic;"><?php printf( esc_attr__( '%s Explore our resource %s to learn more about Sendinblue Automation', 'mailin' ), '<a class="text-decoration-none" href="https://help.sendinblue.com/hc/en-us/articles/208775609/?utm_source=wordpress_plugin&utm_medium=plugin&utm_campaign=module_link" target="_blank">', '</a>' ); ?></p>
|
343 |
+
<div class="col-md-3">
|
344 |
+
<button type="button" id="validate_ma_btn" class="col-md-12 btn btn-primary"><span class="sib-spin"><i class="fa fa-circle-o-notch fa-spin fa-lg"></i> </span><?php esc_attr_e( 'Activate', 'mailin' ); ?></button>
|
345 |
+
</div>
|
346 |
+
<div class="col-md-5">
|
347 |
+
</div>
|
348 |
+
</div>
|
349 |
+
</div>
|
350 |
+
</div>
|
351 |
+
|
352 |
+
</div>
|
353 |
+
<?php
|
354 |
+
}
|
355 |
+
|
356 |
+
/**
|
357 |
+
* Generate a language box on the plugin admin page.
|
358 |
+
*/
|
359 |
+
public static function generate_side_bar() {
|
360 |
+
do_action( 'sib_language_sidebar' );
|
361 |
+
?>
|
362 |
+
|
363 |
+
<div class="card text-left box-border-box sib-small-content">
|
364 |
+
<div class="card-header"><strong><?php esc_attr_e( 'About Sendinblue', 'mailin' ); ?></strong></div>
|
365 |
+
<div class="card-body">
|
366 |
+
<p><?php esc_attr_e( 'Sendinblue is an online software that helps you build and grow relationships through marketing and transactional emails, marketing automation, and text messages.', 'mailin' ); ?></p>
|
367 |
+
<ul class="sib-widget-menu list-group">
|
368 |
+
<li>
|
369 |
+
<a class="text-decoration-none" href="https://www.sendinblue.com/about/?utm_source=wordpress_plugin&utm_medium=plugin&utm_campaign=module_link" target="_blank"><i class="fa fa-angle-right"></i> <?php esc_attr_e( 'Who we are', 'mailin' ); ?></a>
|
370 |
+
</li>
|
371 |
+
<li>
|
372 |
+
<a class="text-decoration-none" href="https://www.sendinblue.com/pricing/?utm_source=wordpress_plugin&utm_medium=plugin&utm_campaign=module_link" target="_blank"><i class="fa fa-angle-right"></i> <?php esc_attr_e( 'Pricing', 'mailin' ); ?></a>
|
373 |
+
</li>
|
374 |
+
<li>
|
375 |
+
<a class="text-decoration-none" href="https://www.sendinblue.com/features/?utm_source=wordpress_plugin&utm_medium=plugin&utm_campaign=module_link" target="_blank"><i class="fa fa-angle-right"></i> <?php esc_attr_e( 'Features', 'mailin' ); ?></a>
|
376 |
+
</li>
|
377 |
+
</ul>
|
378 |
+
</div>
|
379 |
+
|
380 |
+
</div>
|
381 |
+
<div class="card text-left box-border-box sib-small-content">
|
382 |
+
<div class="card-header"><strong><?php esc_attr_e( 'Need Help?', 'mailin' ); ?></strong></div>
|
383 |
+
<div class="card-body">
|
384 |
+
<p><?php esc_attr_e( 'Do you have a question or need more information?', 'mailin' ); ?></p>
|
385 |
+
<ul class="sib-widget-menu list-group">
|
386 |
+
<li><a class="text-decoration-none" href="https://help.sendinblue.com/hc/en-us/sections/202171729/?utm_source=wordpress_plugin&utm_medium=plugin&utm_campaign=module_link" target="_blank"><i class="fa fa-angle-right"></i> <?php esc_attr_e( 'Tutorials', 'mailin' ); ?></a></li>
|
387 |
+
<li><a class="text-decoration-none" href="https://resources.sendinblue.com/category/faq/?utm_source=wordpress_plugin&utm_medium=plugin&utm_campaign=module_link" target="_blank"><i class="fa fa-angle-right"></i> <?php esc_attr_e( 'FAQ', 'mailin' ); ?></a></li>
|
388 |
+
</ul>
|
389 |
+
<hr>
|
390 |
+
</div>
|
391 |
+
</div>
|
392 |
+
<div class="card text-left box-border-box sib-small-content">
|
393 |
+
<div class="card-header"><strong><?php esc_attr_e( 'Recommend this plugin', 'mailin' ); ?></strong></div>
|
394 |
+
<div class="card-body">
|
395 |
+
<p><?php esc_attr_e( 'Let everyone know you like this plugin through a review!' ,'mailin' ); ?></p>
|
396 |
+
<ul class="sib-widget-menu list-group">
|
397 |
+
<li><a class="text-decoration-none" href="http://wordpress.org/support/view/plugin-reviews/mailin" target="_blank"><i class="fa fa-angle-right"></i> <?php esc_attr_e( 'Recommend the Sendinblue plugin', 'mailin' ); ?></a></li>
|
398 |
+
</ul>
|
399 |
+
</div>
|
400 |
+
</div>
|
401 |
+
<?php
|
402 |
+
}
|
403 |
+
|
404 |
+
/**
|
405 |
+
* Get narration script
|
406 |
+
*
|
407 |
+
* @param string $title - pop up title.
|
408 |
+
* @param string $text - pop up content text.
|
409 |
+
*/
|
410 |
+
static function get_narration_script( $title, $text ) {
|
411 |
+
?>
|
412 |
+
<i title="<?php echo esc_attr( $title ); ?>" data-bs-toggle="popover" data-bs-placement="right" data-bs-content="<?php echo esc_attr( $text ); ?>" data-html="true" class="fa fa-question-circle popover-help-form"></i>
|
413 |
+
<?php
|
414 |
+
}
|
415 |
+
|
416 |
+
/** Print disable mode popup */
|
417 |
+
static function print_disable_popup() {
|
418 |
+
?>
|
419 |
+
<div class="modal fade sib-disable-modal">
|
420 |
+
<div class="modal-dialog">
|
421 |
+
<div class="modal-content">
|
422 |
+
<div class="modal-header">
|
423 |
+
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true" style="font-size: 22px;">×</span><span class="sr-only">Close</span></button>
|
424 |
+
<h4 class="modal-title"><?php esc_attr_e( 'Sendinblue','mailin' ); ?></h4>
|
425 |
+
</div>
|
426 |
+
<div class="modal-body" style="padding: 30px;">
|
427 |
+
<p>
|
428 |
+
<?php esc_attr_e( 'You are currently not logged in. Create an account or log in to benefit from all of Sendinblue\'s features an your WordPress site.', 'mailin' ); ?>
|
429 |
+
</p>
|
430 |
+
<ul>
|
431 |
+
<li> <span class="glyphicon glyphicon-ok" style="font-size: 12px;"></span> <?php esc_attr_e( 'Collect and manage your contacts', 'mailin' ); ?></li>
|
432 |
+
<li> <span class="glyphicon glyphicon-ok" style="font-size: 12px;"></span> <?php esc_attr_e( 'Send transactional emails via SMTP or API', 'mailin' ); ?></li>
|
433 |
+
<li> <span class="glyphicon glyphicon-ok" style="font-size: 12px;"></span> <?php esc_attr_e( 'Real time statistics and email tracking', 'mailin' ); ?></li>
|
434 |
+
<li> <span class="glyphicon glyphicon-ok" style="font-size: 12px;"></span> <?php esc_attr_e( 'Edit and send email marketing', 'mailin' ); ?></li>
|
435 |
+
</ul>
|
436 |
+
<div class="row" style="margin-top: 40px;">
|
437 |
+
<div class="col-md-6">
|
438 |
+
<a href="https://www.sendinblue.com/users/login/" target="_blank"><i><?php esc_attr_e( 'Have an account?', 'mailin' ); ?></i></a>
|
439 |
+
</div>
|
440 |
+
<div class="col-md-6">
|
441 |
+
<a href="https://www.sendinblue.com/users/signup/" target="_blank" class="btn btn-default"><i class="fa fa-angle-double-right"></i> <?php esc_attr_e( 'Free Subscribe Now', 'mailin' ); ?> <i class="fa fa-angle-double-left"></i></a>
|
442 |
+
</div>
|
443 |
+
</div>
|
444 |
+
</div>
|
445 |
+
|
446 |
+
</div><!-- /.modal-content -->
|
447 |
+
</div><!-- /.modal-dialog -->
|
448 |
+
</div><!-- /.modal -->
|
449 |
+
<button id="sib-disable-popup" class="btn btn-primary" data-toggle="modal" data-target=".sib-disable-modal" style="display: none;">sss</button>
|
450 |
+
<script>
|
451 |
+
jQuery(document).ready(function() {
|
452 |
+
jQuery('.sib-disable-modal').modal();
|
453 |
+
|
454 |
+
jQuery('.sib-disable-modal').on('hidden.bs.modal', function() {
|
455 |
+
window.location.href = '<?php echo esc_url( add_query_arg( 'page', 'sib_page_home', admin_url( 'admin.php' ) ) ); ?>';
|
456 |
+
});
|
457 |
+
});
|
458 |
+
|
459 |
+
</script>
|
460 |
+
|
461 |
+
<?php
|
462 |
+
}
|
463 |
+
|
464 |
+
/** Print user sync popup */
|
465 |
+
static function print_sync_popup() {
|
466 |
+
?>
|
467 |
+
<div class="modal fade sib-sync-modal" id="syncUsers">
|
468 |
+
<div class="modal-dialog">
|
469 |
+
<div class="modal-content">
|
470 |
+
<div class="modal-header">
|
471 |
+
<h5 class="modal-title"><?php esc_attr_e( 'Users Synchronisation','mailin' ); ?></h5>
|
472 |
+
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
473 |
+
</div>
|
474 |
+
<div class="modal-body sync-modal-body" style="padding: 10px;">
|
475 |
+
<div id="sync-failure" class="sib_alert alert alert-danger" style="margin-bottom: 0px;display: none;"></div>
|
476 |
+
<form id="sib-sync-form">
|
477 |
+
<!-- roles -->
|
478 |
+
<div class="row sync-row" style="margin-top: 0;">
|
479 |
+
<b><p><?php esc_attr_e( 'Roles to sync', 'mailin' ); ?></p></b>
|
480 |
+
<?php foreach ( wp_roles()->roles as $role_name => $role_info ) : ?>
|
481 |
+
<div class="col-md-6">
|
482 |
+
<span class="" style="display: block;float:left;padding-left: 16px;"><input type="checkbox" id="<?php echo esc_attr( $role_name ); ?>" value="<?php echo esc_attr( $role_name ); ?>" name="sync_role" checked><label for="<?php echo esc_attr( $role_name ); ?>" style="margin: 4px 24px 0 7px;font-weight: normal;"><?php esc_attr_e( ucfirst($role_name), 'mailin' ); ?></label></span>
|
483 |
+
</div>
|
484 |
+
<?php endforeach; ?>
|
485 |
+
</div>
|
486 |
+
<!-- lists -->
|
487 |
+
<?php $lists = SIB_API_Manager::get_lists(); ?>
|
488 |
+
<div class="row sync-row">
|
489 |
+
<b><p><?php esc_attr_e( 'Sync Lists', 'mailin' ); ?></p></b>
|
490 |
+
<div class="row" style="margin-top: 0;">
|
491 |
+
<div class="col-md-6">
|
492 |
+
<p><?php esc_attr_e( 'Choose the Sendinblue list in which you want to add your existing customers:', 'mailin' ); ?></p>
|
493 |
+
</div>
|
494 |
+
<div class="col-md-6">
|
495 |
+
<select data-placeholder="Please select the list" id="sib_select_list" name="list_id" multiple="true">
|
496 |
+
<?php foreach ( $lists as $list ) : ?>
|
497 |
+
<option value="<?php echo esc_attr( $list['id'] ); ?>"><?php echo esc_attr( $list['name'] ); ?></option>
|
498 |
+
<?php endforeach; ?>
|
499 |
+
</select>
|
500 |
+
</div>
|
501 |
+
</div>
|
502 |
+
</div>
|
503 |
+
<!-- Match Attributes -->
|
504 |
+
<?php
|
505 |
+
// available WordPress attributes.
|
506 |
+
$wpAttrs = array(
|
507 |
+
'first_name' => __( 'First Name','mailin' ),
|
508 |
+
'last_name' => __( 'Last Name','mailin' ),
|
509 |
+
'user_url' => __( 'Website URL','mailin' ),
|
510 |
+
'roles' => __( 'User Role','mailin' ),
|
511 |
+
'user_login' => __( 'Username','mailin' ),
|
512 |
+
'nickname' => __( 'Nickname','mailin' ),
|
513 |
+
'user_registered' => __( 'User Registration Date','mailin' ),
|
514 |
+
'display_name' => __( 'Display Name','mailin' ),
|
515 |
+
'description' => __( 'Description about user','mailin' ),
|
516 |
+
);
|
517 |
+
// available sendinblue attributes.
|
518 |
+
$sibAllAttrs = SIB_API_Manager::get_attributes();
|
519 |
+
$sibAttrs = $sibAllAttrs['attributes']['normal_attributes'];
|
520 |
+
?>
|
521 |
+
<div class="row sync-row" id="sync-attr-area">
|
522 |
+
<b><p><?php esc_attr_e( 'Match Attributes', 'mailin' ); ?></p></b>
|
523 |
+
<div class="row" style="padding: 5px;margin-top: 0;">
|
524 |
+
<div class="row" style="margin-top: 0;">
|
525 |
+
<div class="col-md-6">
|
526 |
+
<p><?php esc_attr_e( 'WordPress Users Attributes', 'mailin' ); ?></p>
|
527 |
+
</div>
|
528 |
+
<div class="col-md-6">
|
529 |
+
<p><?php esc_attr_e( 'Sendinblue Contact Attributes', 'mailin' ); ?></p>
|
530 |
+
</div>
|
531 |
+
</div>
|
532 |
+
</div>
|
533 |
+
|
534 |
+
<div class="col-md-11 sync-attr-line">
|
535 |
+
<div class="row sync-attr" style="padding: 5px;border-top: dotted 1px #dedede;border-bottom: dotted 1px #dedede;margin-top: 0;">
|
536 |
+
<div class="col-md-5">
|
537 |
+
<select class="sync-wp-attr" name="" style="width: 100%;">
|
538 |
+
<?php foreach ( $wpAttrs as $id => $label ) : ?>
|
539 |
+
<option value="<?php echo esc_attr( $id ); ?>"><?php echo esc_attr( $label ); ?></option>
|
540 |
+
<?php endforeach; ?>
|
541 |
+
</select>
|
542 |
+
</div>
|
543 |
+
<div class="col-md-1" style="padding-left: 10px;padding-top: 3px;"><span class="dashicons dashicons-leftright"></span></div>
|
544 |
+
<div class="col-md-5">
|
545 |
+
<select class="sync-sib-attr" name="" style="width: 100%;">
|
546 |
+
<?php foreach ( $sibAttrs as $attr ) : ?>
|
547 |
+
<option value="<?php echo esc_attr( $attr['name'] ); ?>"><?php echo esc_attr( $attr['name'] ); ?></option>
|
548 |
+
<?php endforeach; ?>
|
549 |
+
</select>
|
550 |
+
</div>
|
551 |
+
<div class="col-md-1" style="padding-top: 3px;">
|
552 |
+
<a href="javascript:void(0)" class="sync-attr-dismiss" style="display: none;"><span class="dashicons dashicons-dismiss"></span></a>
|
553 |
+
</div>
|
554 |
+
<input type="hidden" class="sync-match" name="<?php echo esc_attr( $sibAttrs[0]['name'] ); ?>" value="first_name">
|
555 |
+
</div>
|
556 |
+
</div>
|
557 |
+
<div class="col-md-1" style="padding-top: 9px;">
|
558 |
+
<a href="javascript:void(0)" class="sync-attr-plus"><span class="dashicons dashicons-plus-alt "></span></a>
|
559 |
+
</div>
|
560 |
+
</div>
|
561 |
+
<!-- Apply button -->
|
562 |
+
<div class="col-md-12 mt-2">
|
563 |
+
<a href="javascript:void(0)" id="sib_sync_users_btn" class="btn btn-primary" style="float: right;"><?php esc_attr_e( 'Apply', 'mailin' ); ?></a>
|
564 |
+
</div>
|
565 |
+
</form>
|
566 |
+
</div>
|
567 |
+
</div><!-- /.modal-content -->
|
568 |
+
</div><!-- /.modal-dialog -->
|
569 |
+
</div><!-- /.modal -->
|
570 |
+
<?php
|
571 |
+
}
|
572 |
+
|
573 |
+
/** Ajax module for validation (Home - welcome) */
|
574 |
+
public static function ajax_validation_process() {
|
575 |
+
check_ajax_referer( 'ajax_sib_admin_nonce', 'security' );
|
576 |
+
$access_key = isset( $_POST['access_key'] ) ? sanitize_text_field( wp_unslash( $_POST['access_key'] ) ) : '';
|
577 |
+
try {
|
578 |
update_option(SIB_Manager::API_KEY_V3_OPTION_NAME, $access_key);
|
579 |
+
$apiClient = new SendinblueApiClient();
|
580 |
+
$response = $apiClient->getAccount();
|
581 |
if ( $apiClient->getLastResponseCode() === SendinblueApiClient::RESPONSE_CODE_OK ) {
|
582 |
self::processInstallationInfo("login");
|
583 |
// create tables for users and forms.
|
591 |
delete_option(SIB_Manager::API_KEY_V3_OPTION_NAME);
|
592 |
$message = isset($response['code']) ? $response['code'] . ': ' . $response['message'] :'Please input a valid API v3 key';
|
593 |
}
|
594 |
+
} catch ( Exception $e ) {
|
595 |
+
$message = $e->getMessage();
|
596 |
delete_option(SIB_Manager::API_KEY_V3_OPTION_NAME);
|
597 |
+
} finally {
|
598 |
wp_send_json($message);
|
599 |
}
|
600 |
+
}
|
601 |
+
|
602 |
+
/** Ajax module to change activate marketing automation option */
|
603 |
+
public static function ajax_validate_ma() {
|
604 |
+
check_ajax_referer( 'ajax_sib_admin_nonce', 'security' );
|
605 |
+
$main_settings = get_option( SIB_Manager::MAIN_OPTION_NAME );
|
606 |
+
$home_settings = get_option( SIB_Manager::HOME_OPTION_NAME );
|
607 |
+
$ma_key = $main_settings['ma_key'];
|
608 |
+
if ( '' != $ma_key ) {
|
609 |
+
$option_val = isset( $_POST['option_val'] ) ? sanitize_text_field( wp_unslash( $_POST['option_val'] ) ) : 'no';
|
610 |
+
$home_settings['activate_ma'] = $option_val;
|
611 |
+
update_option( SIB_Manager::HOME_OPTION_NAME, $home_settings );
|
612 |
+
wp_send_json( $option_val );
|
613 |
+
} else {
|
614 |
+
$home_settings['activate_ma'] = 'no';
|
615 |
+
update_option( SIB_Manager::HOME_OPTION_NAME, $home_settings );
|
616 |
+
wp_send_json( 'disabled' );
|
617 |
+
}
|
618 |
+
}
|
619 |
+
|
620 |
+
/** Ajax module to change activate email option */
|
621 |
+
public static function ajax_activate_email_change() {
|
622 |
+
check_ajax_referer( 'ajax_sib_admin_nonce', 'security' );
|
623 |
+
$option_val = isset( $_POST['option_val'] ) ? sanitize_text_field( wp_unslash( $_POST['option_val'] ) ) : 'no';
|
624 |
+
$home_settings = get_option( SIB_Manager::HOME_OPTION_NAME );
|
625 |
+
$home_settings['activate_email'] = $option_val;
|
626 |
+
update_option( SIB_Manager::HOME_OPTION_NAME, $home_settings );
|
627 |
+
wp_send_json( $option_val );
|
628 |
+
}
|
629 |
+
|
630 |
+
/** Ajax module to change sender detail */
|
631 |
+
public static function ajax_sender_change() {
|
632 |
+
check_ajax_referer( 'ajax_sib_admin_nonce', 'security' );
|
633 |
+
$sender_id = isset( $_POST['sender'] ) ? sanitize_text_field( wp_unslash( $_POST['sender'] ) ) : ''; // sender id.
|
634 |
+
$home_settings = get_option( SIB_Manager::HOME_OPTION_NAME );
|
635 |
+
$home_settings['sender'] = $sender_id;
|
636 |
+
$senders = SIB_API_Manager::get_sender_lists();
|
637 |
+
foreach ( $senders as $sender ) {
|
638 |
+
if ( $sender['id'] == $sender_id ) {
|
639 |
+
$home_settings['from_name'] = $sender['from_name'];
|
640 |
+
$home_settings['from_email'] = $sender['from_email'];
|
641 |
+
}
|
642 |
+
}
|
643 |
+
update_option( SIB_Manager::HOME_OPTION_NAME, $home_settings );
|
644 |
+
wp_send_json( 'success' );
|
645 |
+
}
|
646 |
+
|
647 |
+
/** Ajax module for send a test email */
|
648 |
+
public static function ajax_send_email() {
|
649 |
+
check_ajax_referer( 'ajax_sib_admin_nonce', 'security' );
|
650 |
+
|
651 |
+
$subject = __( '[Sendinblue SMTP] test email', 'mailin' );
|
652 |
+
// Get sender info.
|
653 |
+
$home_settings = get_option( SIB_Manager::HOME_OPTION_NAME );
|
654 |
+
if ( isset( $home_settings['sender'] ) ) {
|
655 |
+
$fromname = $home_settings['from_name'];
|
656 |
+
$from_email = $home_settings['from_email'];
|
657 |
+
} else {
|
658 |
+
$from_email = __( 'no-reply@sendinblue.com', 'mailin' );
|
659 |
+
$fromname = __( 'Sendinblue', 'mailin' );
|
660 |
+
}
|
661 |
+
|
662 |
+
$from = array( $from_email, $fromname );
|
663 |
+
$email_templates = SIB_API_Manager::get_email_template( 'test' );
|
664 |
+
|
665 |
+
$html = $email_templates['html_content'];
|
666 |
+
|
667 |
+
$html = str_replace( '{title}', $subject, $html );
|
668 |
+
|
669 |
+
$mailin = new SendinblueApiClient();
|
670 |
+
|
671 |
+
$data = [
|
672 |
+
'sender' => [
|
673 |
+
'name' => $fromname,
|
674 |
+
'email' => $from_email,
|
675 |
+
],
|
676 |
+
'replyTo' => [
|
677 |
+
'email' => $from_email,
|
678 |
+
],
|
679 |
+
'to' => [
|
680 |
+
[
|
681 |
+
'email' => sanitize_email($_POST['email'])
|
682 |
+
]
|
683 |
+
],
|
684 |
+
'subject' => $subject,
|
685 |
+
'htmlContent' => $html
|
686 |
];
|
687 |
+
$mailin->sendEmail( $data );
|
688 |
+
|
689 |
+
wp_send_json( 'success' );
|
690 |
+
}
|
691 |
+
|
692 |
+
/** Ajax module for remove all transient value */
|
693 |
+
public static function ajax_remove_cache() {
|
694 |
+
check_ajax_referer( 'ajax_sib_admin_nonce', 'security' );
|
695 |
+
wp_send_json( 'success' );
|
696 |
+
}
|
697 |
+
|
698 |
+
/** Ajax module for sync wp users to contact list */
|
699 |
+
public static function ajax_sync_users() {
|
700 |
+
check_ajax_referer( 'ajax_sib_admin_nonce', 'security' );
|
701 |
+
// phpcs:ignore
|
702 |
+
//Data is being senitized/escaped while accessing
|
703 |
+
$postData = isset( $_POST['data'] ) ? $_POST['data'] : array();
|
704 |
+
if ( ! isset( $postData['sync_role'] ) ) {
|
705 |
+
wp_send_json(
|
706 |
+
array(
|
707 |
+
'code' => 'empty_role',
|
708 |
+
'message' => __( 'Please select a user role.','mailin' ),
|
709 |
+
)
|
710 |
+
);}
|
711 |
+
if ( isset( $postData['errAttr'] ) ) {
|
712 |
+
wp_send_json(
|
713 |
+
array(
|
714 |
+
'code' => 'attr_duplicated',
|
715 |
+
'message' => sprintf( esc_attr__( 'The attribute %s is duplicated. You can select one at a time.','mailin' ), '<b>' . esc_html($postData['errAttr']) . '</b>' ),
|
716 |
+
)
|
717 |
+
);}
|
718 |
+
|
719 |
+
$roles = (array) $postData['sync_role']; // array or string.
|
720 |
+
$listIDs = array_map('intval', (array) $postData['list_id']);
|
721 |
+
|
722 |
+
unset( $postData['sync_role'] );
|
723 |
+
unset( $postData['list_id'] );
|
724 |
+
|
725 |
+
$usersData = 'EMAIL';
|
726 |
+
foreach ( $postData as $attrSibName => $attrWP ) {
|
727 |
+
$usersData .= ';' . sanitize_text_field($attrSibName);
|
728 |
+
}
|
729 |
+
|
730 |
+
// sync users to sendinblue.
|
731 |
+
// create body data like csv.
|
732 |
+
// NAME;SURNAME;EMAIL\nName1;Surname1;example1@example.net\nName2;Surname2;example2@example.net.
|
733 |
+
$contentData = '';
|
734 |
+
$usersCount = 0;
|
735 |
+
foreach ( $roles as $role ) {
|
736 |
+
$users = get_users(
|
737 |
+
array(
|
738 |
+
'role' => sanitize_text_field($role),
|
739 |
+
)
|
740 |
+
);
|
741 |
+
if ( empty( $users ) ) {
|
742 |
+
continue;
|
743 |
+
}
|
744 |
+
$usersCount += count($users);
|
745 |
+
foreach ( $users as $user ) {
|
746 |
+
$userId = $user->ID;
|
747 |
+
$user_info = get_userdata( $userId );
|
748 |
+
$userData = $user_info->user_email;
|
749 |
+
foreach ( $postData as $attrSibName => $attrWP ) {
|
750 |
+
if ( $attrWP == 'roles' )
|
751 |
{
|
752 |
$userData .= ';' . implode( ', ', $user_info->$attrWP ) ;
|
753 |
}
|
755 |
$userData .= ';' . $user_info->$attrWP;
|
756 |
}
|
757 |
|
758 |
+
}
|
759 |
+
$contentData .= "\n" . strip_tags($userData);
|
760 |
+
}
|
761 |
+
}
|
762 |
+
if ( '' == $contentData ) {
|
763 |
+
wp_send_json(
|
764 |
+
array(
|
765 |
+
'code' => 'empty_users',
|
766 |
+
'message' => __( 'There is not any user in the roles.','mailin' ),
|
767 |
+
)
|
768 |
+
);}
|
769 |
+
|
770 |
+
$usersData .= $contentData;
|
771 |
+
$result = SIB_API_Manager::sync_users( $usersData, $listIDs );
|
772 |
+
update_option('sib_sync_users', $usersCount);
|
773 |
+
wp_send_json( $result );
|
774 |
+
}
|
775 |
+
|
776 |
+
/** Logout process */
|
777 |
+
function logout() {
|
778 |
+
self::processInstallationInfo("logout");
|
779 |
+
$setting = array();
|
780 |
+
update_option( SIB_Manager::MAIN_OPTION_NAME, $setting );
|
781 |
+
delete_option(SIB_Manager::API_KEY_V3_OPTION_NAME);
|
782 |
+
|
783 |
+
$home_settings = array(
|
784 |
+
'activate_email' => 'no',
|
785 |
+
'activate_ma' => 'no',
|
786 |
+
);
|
787 |
+
update_option( SIB_Manager::HOME_OPTION_NAME, $home_settings );
|
788 |
+
|
789 |
+
// remove sync users option.
|
790 |
+
delete_option( 'sib_sync_users' );
|
791 |
+
// remove all transients.
|
792 |
+
SIB_API_Manager::remove_transients();
|
793 |
+
|
794 |
+
// remove all forms.
|
795 |
+
SIB_Forms::removeAllForms();
|
796 |
+
SIB_Forms_Lang::remove_all_trans();
|
797 |
+
|
798 |
+
wp_safe_redirect( add_query_arg( 'page', self::PAGE_ID, admin_url( 'admin.php' ) ) );
|
799 |
+
exit();
|
800 |
+
}
|
801 |
+
|
802 |
+
public static function processInstallationInfo($action)
|
803 |
+
{
|
804 |
+
global $wp_version;
|
805 |
+
|
806 |
+
if($action == "login")
|
807 |
+
{
|
808 |
+
$apiClient = new SendinblueApiClient();
|
809 |
+
|
810 |
+
$params["partnerName"] = "WORDPRESS";
|
811 |
+
$params["active"] = true;
|
812 |
+
$params["plugin_version"] = SendinblueApiClient::PLUGIN_VERSION;
|
813 |
+
if(!empty($wp_version))
|
814 |
+
{
|
815 |
+
$params["shop_version"] = $wp_version;
|
816 |
+
}
|
817 |
+
$params["shop_url"] = get_home_url();
|
818 |
+
$params["created_at"] = gmdate("Y-m-d\TH:i:s\Z");
|
819 |
+
$params["activated_at"] = gmdate("Y-m-d\TH:i:s\Z");
|
820 |
+
$params["type"] = "sib";
|
821 |
+
$response = $apiClient->createInstallationInfo($params);
|
822 |
+
if ( $apiClient->getLastResponseCode() === SendinblueApiClient::RESPONSE_CODE_CREATED )
|
823 |
+
{
|
824 |
+
if(!empty($response["id"]))
|
825 |
+
{
|
826 |
+
update_option(SIB_Manager::INSTALLATION_ID, $response["id"]);
|
827 |
+
}
|
828 |
+
}
|
829 |
+
}
|
830 |
+
elseif($action == "logout")
|
831 |
+
{
|
832 |
+
$installationId = get_option( SIB_Manager::INSTALLATION_ID );
|
833 |
+
if(!empty($installationId))
|
834 |
+
{
|
835 |
+
$apiClient = new SendinblueApiClient();
|
836 |
+
$params["active"] = false;
|
837 |
+
$params["deactivated_at"] = gmdate("Y-m-d\TH:i:
|
|
|
|
|
|
|
|
|
|