@italia/input 0.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4653 @@
1
+ import { directive, Directive } from 'lit/directive.js';
2
+ import { LitElement, css, html, nothing } from 'lit';
3
+ import { property, query, state, customElement } from 'lit/decorators.js';
4
+ import { ifDefined } from 'lit/directives/if-defined.js';
5
+ import { when } from 'lit/directives/when.js';
6
+
7
+ /******************************************************************************
8
+ Copyright (c) Microsoft Corporation.
9
+
10
+ Permission to use, copy, modify, and/or distribute this software for any
11
+ purpose with or without fee is hereby granted.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
14
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
15
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
16
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
17
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
18
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19
+ PERFORMANCE OF THIS SOFTWARE.
20
+ ***************************************************************************** */
21
+ /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
22
+
23
+
24
+ function __decorate(decorators, target, key, desc) {
25
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
26
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
27
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
28
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
29
+ }
30
+
31
+ function __metadata(metadataKey, metadataValue) {
32
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
33
+ }
34
+
35
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
36
+ var e = new Error(message);
37
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
38
+ };
39
+
40
+ /**
41
+ * @license
42
+ *
43
+ * Copyright IBM Corp. 2020, 2022
44
+ *
45
+ * This source code is licensed under the Apache-2.0 license found in the
46
+ * LICENSE file in the root directory of this source tree.
47
+ */
48
+ /**
49
+ * @param Base The base class.
50
+ * @returns A mix-in to handle `formdata` event on the containing form.
51
+ */
52
+ const FormMixin = (Base) => {
53
+ /**
54
+ * A mix-in class to handle `formdata` event on the containing form.
55
+ */
56
+ class FormMixinImpl extends Base {
57
+ connectedCallback() {
58
+ // @ts-ignore
59
+ super.connectedCallback();
60
+ if (this.closest('form')) {
61
+ this.closest('form')?.addEventListener('formdata', this._handleFormdata.bind(this));
62
+ }
63
+ }
64
+ disconnectedCallback() {
65
+ // if (this._hFormdata) {
66
+ // this._hFormdata = this._hFormdata.release();
67
+ // }
68
+ // @ts-ignore
69
+ super.disconnectedCallback();
70
+ }
71
+ }
72
+ return FormMixinImpl;
73
+ };
74
+
75
+ /**
76
+ * @license
77
+ *
78
+ * Copyright IBM Corp. 2020, 2022
79
+ *
80
+ * This source code is licensed under the Apache-2.0 license found in the
81
+ * LICENSE file in the root directory of this source tree.
82
+ */
83
+ /**
84
+ * Form validation status.
85
+ */
86
+ var VALIDATION_STATUS;
87
+ (function (VALIDATION_STATUS) {
88
+ /**
89
+ * One indicating no validation error.
90
+ */
91
+ VALIDATION_STATUS["NO_ERROR"] = "";
92
+ /**
93
+ * One indicating that the value is invalid (generic).
94
+ */
95
+ VALIDATION_STATUS["INVALID"] = "invalid";
96
+ /**
97
+ * One indicating missing required value.
98
+ */
99
+ VALIDATION_STATUS["ERROR_REQUIRED"] = "required";
100
+ /**
101
+ * One indicating that the value does not match the pattern.
102
+ */
103
+ VALIDATION_STATUS["PATTERN"] = "pattern";
104
+ /**
105
+ * One indicating that the value is shorter than the minimum length.
106
+ */
107
+ VALIDATION_STATUS["MINLENGTH"] = "minlength";
108
+ /**
109
+ * One indicating that the value is less than the maximum length.
110
+ */
111
+ VALIDATION_STATUS["MAXLENGTH"] = "maxlength";
112
+ })(VALIDATION_STATUS || (VALIDATION_STATUS = {}));
113
+ /**
114
+ * @param Base The base class.
115
+ * @returns A mix-in implementing `.setCustomValidity()` method.
116
+ */
117
+ const ValidityMixin = (Base) => {
118
+ class ValidityMixinImpl extends Base {
119
+ constructor() {
120
+ super(...arguments);
121
+ /**
122
+ * Field is touched
123
+ */
124
+ this._touched = false;
125
+ }
126
+ // Not using TypeScript `protected` due to: microsoft/TypeScript#17744
127
+ // Using `string` instead of `VALIDATION_STATUS` until we can require TypeScript 3.8
128
+ /**
129
+ * @param state The form validation status.
130
+ * @returns The form validation error mesasages associated with the given status.
131
+ * @protected
132
+ */
133
+ _getValidityMessage(state, translations) {
134
+ return {
135
+ [VALIDATION_STATUS.NO_ERROR]: '',
136
+ [VALIDATION_STATUS.INVALID]: translations[VALIDATION_STATUS.INVALID],
137
+ [VALIDATION_STATUS.ERROR_REQUIRED]: translations[VALIDATION_STATUS.ERROR_REQUIRED],
138
+ [VALIDATION_STATUS.PATTERN]: translations[VALIDATION_STATUS.PATTERN],
139
+ [VALIDATION_STATUS.MINLENGTH]: translations[VALIDATION_STATUS.MINLENGTH].replace('{minlength}', this.minlength.toString()),
140
+ [VALIDATION_STATUS.MAXLENGTH]: translations[VALIDATION_STATUS.MAXLENGTH].replace('{maxlength}', this.maxlength.toString()),
141
+ }[state];
142
+ }
143
+ /**
144
+ * Checks if the value meets the constraints.
145
+ *
146
+ * @returns `true` if the value meets the constraints. `false` otherwise.
147
+ */
148
+ _checkValidity(translations, htmlValidity = true) {
149
+ // htmlValidity = this.inputElement.checkValidity(); //check browser validity
150
+ if (this.customValidation) {
151
+ return undefined;
152
+ }
153
+ let validity = htmlValidity;
154
+ let message = validity
155
+ ? this._getValidityMessage(VALIDATION_STATUS.NO_ERROR, translations)
156
+ : this._getValidityMessage(VALIDATION_STATUS.INVALID, translations);
157
+ if (this.required || (this._value && (this.pattern || this.minlength > 0 || this.maxlength > 0))) {
158
+ if (this.pattern) {
159
+ const regex = new RegExp(`^${this.pattern}$`, 'u');
160
+ validity = regex.test(this._value.toString());
161
+ if (!validity) {
162
+ message = this._getValidityMessage(VALIDATION_STATUS.PATTERN, translations);
163
+ }
164
+ }
165
+ if (typeof this.minlength !== 'undefined' && this.minlength > 0) {
166
+ validity = validity && this._value.toString().length >= this.minlength;
167
+ if (!validity) {
168
+ message = this._getValidityMessage(VALIDATION_STATUS.MINLENGTH, translations);
169
+ }
170
+ }
171
+ if (typeof this.maxlength !== 'undefined' && this.maxlength > 0) {
172
+ validity = validity && this._value.toString().length <= this.maxlength;
173
+ if (!validity) {
174
+ message = this._getValidityMessage(VALIDATION_STATUS.MAXLENGTH, translations);
175
+ }
176
+ }
177
+ if (this.required && !this._value) {
178
+ validity = false;
179
+ message = this._getValidityMessage(VALIDATION_STATUS.ERROR_REQUIRED, translations);
180
+ }
181
+ }
182
+ this.invalid = !validity;
183
+ this.validityMessage = message;
184
+ return validity;
185
+ }
186
+ /**
187
+ * Sets the given custom validity message.
188
+ *
189
+ * @param validityMessage The custom validity message
190
+ */
191
+ setCustomValidity(validityMessage) {
192
+ this.invalid = Boolean(validityMessage);
193
+ this.validityMessage = validityMessage;
194
+ }
195
+ _handleBlur() {
196
+ this._touched = true;
197
+ this.dispatchEvent(new FocusEvent('blur', { bubbles: true, composed: true }));
198
+ }
199
+ _handleFocus() {
200
+ this.dispatchEvent(new FocusEvent('focus', { bubbles: true, composed: true }));
201
+ }
202
+ _handleClick() {
203
+ this.dispatchEvent(new MouseEvent('click', { bubbles: true, composed: true }));
204
+ }
205
+ _handleChange(e) {
206
+ const target = e.target;
207
+ let value;
208
+ if (target instanceof HTMLInputElement) {
209
+ switch (target.type) {
210
+ case 'checkbox':
211
+ case 'radio':
212
+ value = target.checked;
213
+ break;
214
+ case 'file':
215
+ value = target.files; // FileList
216
+ break;
217
+ default:
218
+ value = target.value;
219
+ }
220
+ }
221
+ else if (target instanceof HTMLSelectElement) {
222
+ if (target.multiple) {
223
+ value = Array.from(target.selectedOptions).map((o) => o.value);
224
+ }
225
+ else {
226
+ value = target.value;
227
+ }
228
+ }
229
+ else {
230
+ // textarea o altri input con value
231
+ value = target.value;
232
+ }
233
+ this.dispatchEvent(new CustomEvent('change', {
234
+ detail: { value, el: target },
235
+ bubbles: true,
236
+ composed: true,
237
+ }));
238
+ }
239
+ }
240
+ return ValidityMixinImpl;
241
+ };
242
+
243
+ class SetAttributesDirective extends Directive {
244
+ update(part, [attributes]) {
245
+ const el = part.element;
246
+ for (const [name, value] of Object.entries(attributes)) {
247
+ if (value != null)
248
+ el.setAttribute(name, value);
249
+ else
250
+ el.removeAttribute(name);
251
+ }
252
+ return null;
253
+ }
254
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
255
+ render(_attributes) {
256
+ return null;
257
+ }
258
+ }
259
+ /* How to use:
260
+
261
+ <textarea ${setAttributes(this._ariaAttributes)} ... />
262
+ */
263
+ const setAttributes = directive(SetAttributesDirective);
264
+
265
+ const connectedElements = new Set();
266
+ if (window && !window.translations) {
267
+ window.translations = new Map();
268
+ }
269
+ const { translations } = window;
270
+ let fallback;
271
+ // TODO: We need some way for users to be able to set these on the server.
272
+ let documentDirection = 'ltr';
273
+ // Fallback for server.
274
+ let documentLanguage = 'en';
275
+ const isClient = typeof MutationObserver !== 'undefined' &&
276
+ typeof document !== 'undefined' &&
277
+ typeof document.documentElement !== 'undefined';
278
+ /** Updates all localized elements that are currently connected */
279
+ function update() {
280
+ if (isClient) {
281
+ documentDirection = document.documentElement.dir || 'ltr';
282
+ documentLanguage = document.documentElement.lang || navigator.language;
283
+ }
284
+ [...connectedElements.keys()].forEach((el) => {
285
+ const litEl = el;
286
+ if (typeof litEl.requestUpdate === 'function') {
287
+ litEl.requestUpdate();
288
+ }
289
+ });
290
+ }
291
+ if (isClient) {
292
+ const documentElementObserver = new MutationObserver(update);
293
+ documentDirection = document.documentElement.dir || 'ltr';
294
+ documentLanguage = document.documentElement.lang || navigator.language;
295
+ // Watch for changes on <html lang>
296
+ documentElementObserver.observe(document.documentElement, {
297
+ attributes: true,
298
+ attributeFilter: ['dir', 'lang'],
299
+ });
300
+ }
301
+ /** Registers one or more translations */
302
+ function registerTranslation(...translation) {
303
+ translation.forEach((t) => {
304
+ const code = t.$code.toLowerCase();
305
+ if (translations.has(code)) {
306
+ // Merge translations that share the same language code
307
+ translations.set(code, { ...translations.get(code), ...t });
308
+ }
309
+ else {
310
+ translations.set(code, t);
311
+ }
312
+ // The first translation that's registered is the fallback
313
+ if (!fallback) {
314
+ fallback = t;
315
+ }
316
+ });
317
+ update();
318
+ }
319
+ window.registerTranslation = registerTranslation;
320
+ /**
321
+ * Localize Reactive Controller for components built with Lit
322
+ *
323
+ * To use this controller, import the class and instantiate it in a custom element constructor:
324
+ *
325
+ * private localize = new LocalizeController(this);
326
+ *
327
+ * This will add the element to the set and make it respond to changes to <html dir|lang> automatically. To make it
328
+ * respond to changes to its own dir|lang properties, make it a property:
329
+ *
330
+ * @property() dir: string;
331
+ * @property() lang: string;
332
+ *
333
+ * To use a translation method, call it like this:
334
+ *
335
+ * ${this.localize.term('term_key_here')}
336
+ * ${this.localize.date('2021-12-03')}
337
+ * ${this.localize.number(1000000)}
338
+ */
339
+ class LocalizeController {
340
+ constructor(host) {
341
+ this.host = host;
342
+ this.host.addController(this);
343
+ }
344
+ hostConnected() {
345
+ connectedElements.add(this.host);
346
+ }
347
+ hostDisconnected() {
348
+ connectedElements.delete(this.host);
349
+ }
350
+ /**
351
+ * Gets the host element's directionality as determined by the `dir` attribute. The return value is transformed to
352
+ * lowercase.
353
+ */
354
+ dir() {
355
+ return `${this.host.dir || documentDirection}`.toLowerCase();
356
+ }
357
+ /**
358
+ * Gets the host element's language as determined by the `lang` attribute. The return value is transformed to
359
+ * lowercase.
360
+ */
361
+ lang() {
362
+ return `${this.host.lang || documentLanguage}`.toLowerCase();
363
+ }
364
+ // eslint-disable-next-line class-methods-use-this
365
+ getTranslationData(lang) {
366
+ // Convert "en_US" to "en-US". Note that both underscores and dashes are allowed per spec, but underscores result in
367
+ // a RangeError by the call to `new Intl.Locale()`. See: https://unicode.org/reports/tr35/#unicode-locale-identifier
368
+ const locale = new Intl.Locale(lang.replace(/_/g, '-'));
369
+ const language = locale?.language.toLowerCase();
370
+ const region = locale?.region?.toLowerCase() ?? '';
371
+ const primary = translations.get(`${language}-${region}`);
372
+ const secondary = translations.get(language);
373
+ return { locale, language, region, primary, secondary };
374
+ }
375
+ /** Determines if the specified term exists, optionally checking the fallback translation. */
376
+ exists(key, options) {
377
+ const { primary, secondary } = this.getTranslationData(options.lang ?? this.lang());
378
+ const mergedOptions = {
379
+ includeFallback: false,
380
+ ...options,
381
+ };
382
+ if ((primary && primary[key]) ||
383
+ (secondary && secondary[key]) ||
384
+ (mergedOptions.includeFallback && fallback && fallback[key])) {
385
+ return true;
386
+ }
387
+ return false;
388
+ }
389
+ /** Outputs a translated term. */
390
+ term(key, ...args) {
391
+ const { primary, secondary } = this.getTranslationData(this.lang());
392
+ let term;
393
+ // Look for a matching term using regionCode, code, then the fallback
394
+ if (primary && primary[key]) {
395
+ term = primary[key];
396
+ }
397
+ else if (secondary && secondary[key]) {
398
+ term = secondary[key];
399
+ }
400
+ else if (fallback && fallback[key]) {
401
+ term = fallback[key];
402
+ }
403
+ else {
404
+ // eslint-disable-next-line no-console
405
+ console.error(`No translation found for: ${String(key)}`);
406
+ return String(key);
407
+ }
408
+ if (typeof term === 'function') {
409
+ return term(...args);
410
+ }
411
+ return term;
412
+ }
413
+ /** Outputs a localized date in the specified format. */
414
+ date(dateToFormat, options) {
415
+ const date = new Date(dateToFormat);
416
+ return new Intl.DateTimeFormat(this.lang(), options).format(date);
417
+ }
418
+ /** Outputs a localized number in the specified format. */
419
+ number(numberToFormat, options) {
420
+ const num = Number(numberToFormat);
421
+ return Number.isNaN(num) ? '' : new Intl.NumberFormat(this.lang(), options).format(num);
422
+ }
423
+ /** Outputs a localized time in relative format. */
424
+ relativeTime(value, unit, options) {
425
+ return new Intl.RelativeTimeFormat(this.lang(), options).format(value, unit);
426
+ }
427
+ }
428
+
429
+ /**
430
+ * @param Base The base class.
431
+ * @returns A mix-in implementing `localizations` method.
432
+ *
433
+ *@example
434
+ * <!-- Terms -->
435
+ ${this.$localize.term('hello')}
436
+ or
437
+ ${this.$t('hello')}
438
+
439
+ <!-- Dates -->
440
+ ${this.$localize.date('2021-09-15 14:00:00 ET', { month: 'long', day: 'numeric', year: 'numeric' })}
441
+ or
442
+ ${this.$d('2021-09-15 14:00:00 ET', { month: 'long', day: 'numeric', year: 'numeric' })}
443
+
444
+ <!-- Numbers/currency -->
445
+ ${this.$localize.number(1000, { style: 'currency', currency: 'USD'})}
446
+ or
447
+ ${this.$n(1000,{ style: 'currency', currency: 'USD'})}
448
+
449
+ <!-- Determining language -->
450
+ ${this.$localize.lang()}
451
+
452
+ <!-- Determining directionality, e.g. 'ltr' or 'rtl' -->
453
+ ${this.$localize.dir()}
454
+
455
+
456
+ *** HOW TO DEFINE TRANSLATIONS: ***
457
+ // Simple terms
458
+ upload: 'Upload',
459
+
460
+ // Terms with placeholders
461
+ greetUser: (name: string) => `Hello, ${name}!`,
462
+
463
+ // Plurals
464
+ numFilesSelected: (count: number) => {
465
+ if (count === 0) return 'No files selected';
466
+ if (count === 1) return '1 file selected';
467
+ return `${count} files selected`;
468
+ }
469
+ */
470
+ const LocalizeMixin = (Base) => class extends Base {
471
+ constructor() {
472
+ super(...arguments);
473
+ this.localize = new LocalizeController(this);
474
+ // Provide default values to avoid definite assignment errors and avoid decorators
475
+ this.dir = '';
476
+ this.lang = '';
477
+ }
478
+ /**
479
+ * Restituisce tutta l'utility di traduzione
480
+ *
481
+
482
+ *
483
+ * @returns tutta l'utility di traduzione
484
+ *
485
+ * @example
486
+ * this.$localize.lang() -> ritorna la lingua corrente
487
+ * this.$localize.dir() -> ritorna la direzione della lingua corrente
488
+ */
489
+ get $localize() {
490
+ return this.localize;
491
+ }
492
+ /**
493
+ * Restituisce una stringa localizzata a partire da una chiave di termine.
494
+ *
495
+ * Utilizza il `LocalizeController` per accedere al dizionario corrente e
496
+ * tradurre la chiave fornita secondo la lingua attiva.
497
+ *
498
+ * @param t - La chiave del termine da localizzare (es. 'hello', 'submit', ecc.).
499
+ * @returns La stringa tradotta in base alla lingua attiva. Se la chiave non è trovata, restituisce la chiave stessa.
500
+ *
501
+ * @example
502
+ * this.$t('hello'); // → "Ciao" (in locale it-IT)
503
+ */
504
+ $t(t) {
505
+ // format term
506
+ return this.localize.term(t);
507
+ }
508
+ /**
509
+ * Formatta una data in base alla localizzazione attiva.
510
+ *
511
+ * Utilizza il `LocalizeController` per restituire una stringa localizzata
512
+ * secondo le opzioni fornite (es. mese esteso, anno, ecc.).
513
+ *
514
+ * @param n - La data da formattare come stringa compatibile (es. ISO o con timezone, es. '2021-09-15 14:00:00 ET').
515
+ * @param p - Le opzioni di formattazione per `Intl.DateTimeFormat` (es. { year: 'numeric', month: 'long', day: 'numeric' }).
516
+ * @returns Una stringa rappresentante la data formattata secondo la localizzazione attiva.
517
+ *
518
+ * @example
519
+ * this.$d('2021-09-15 14:00:00 ET', { year: 'numeric', month: 'long', day: 'numeric' });
520
+ * // → "15 settembre 2021" (in locale it-IT)
521
+ */
522
+ $d(d, p) {
523
+ // format date
524
+ return this.localize.date(d, p);
525
+ }
526
+ /**
527
+ * Formatta un numero secondo le impostazioni locali dell'utente corrente.
528
+ *
529
+ * Utilizza il `LocalizeController` per applicare formattazione numerica,
530
+ * incluse opzioni come separatori, decimali, valute, ecc.
531
+ *
532
+ * @param d - Il numero da formattare.
533
+ * @param p - Le opzioni di formattazione (es. { style: 'currency', currency: 'EUR' }).
534
+ * @returns Una stringa rappresentante il numero formattato secondo la localizzazione attiva.
535
+ *
536
+ * @example
537
+ * this.$n(1234.56, { style: 'currency', currency: 'USD' }); // → "$1,234.56" (in locale en-US)
538
+ */
539
+ $n(d, p) {
540
+ return this.localize.number(d, p);
541
+ }
542
+ };
543
+
544
+ /* eslint-disable no-console */
545
+ class Logger {
546
+ constructor(tag) {
547
+ this.tag = tag;
548
+ }
549
+ format(level, msg) {
550
+ return [`[${this.tag}] ${msg}`];
551
+ }
552
+ warn(msg) {
553
+ console.warn(...this.format('warn', msg));
554
+ }
555
+ error(msg) {
556
+ console.error(...this.format('error', msg));
557
+ }
558
+ info(msg) {
559
+ console.info(...this.format('info', msg));
560
+ }
561
+ }
562
+
563
+ /**
564
+ * Factory function per creare una base class estendibile
565
+ * con stili personalizzati.
566
+ */
567
+ class BaseComponent extends LitElement {
568
+ constructor() {
569
+ super();
570
+ this._ariaAttributes = {}; // tutti gli attributi aria-* passati al Web component
571
+ this.logger = new Logger(this.tagName.toLowerCase());
572
+ }
573
+ // eslint-disable-next-line class-methods-use-this
574
+ generateId(prefix) {
575
+ return `${prefix}-${Math.random().toString(36).slice(2)}`;
576
+ }
577
+ // eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-unused-vars
578
+ addFocus(element) {
579
+ // new TrackFocus(element); // per il momento è stato disattivato perchè ci sono le pseudo classi ::focus-visible per fare quello che fa TrackFocus. Si possono aggiungere regole css in bsi-italia 3 dato che stiamo facendo una breaking release di bsi.
580
+ }
581
+ // eslint-disable-next-line class-methods-use-this
582
+ composeClass(...classes) {
583
+ let composedClass = '';
584
+ classes
585
+ .filter((c) => c.length > 0)
586
+ .forEach((newClass) => {
587
+ composedClass += ` ${newClass}`;
588
+ });
589
+ return composedClass.trim();
590
+ }
591
+ getAriaAttributes() {
592
+ for (const attr of this.getAttributeNames()) {
593
+ if (attr.startsWith('aria-')) {
594
+ this._ariaAttributes[attr] = this.getAttribute(attr);
595
+ }
596
+ }
597
+ }
598
+ connectedCallback() {
599
+ super.connectedCallback?.();
600
+ this.getAriaAttributes();
601
+ // generate internal _id
602
+ const prefix = this.id?.length > 0 ? this.id : this.tagName.toLowerCase();
603
+ this._id = this.generateId(prefix);
604
+ }
605
+ }
606
+ const BaseLocalizedComponent = LocalizeMixin(BaseComponent);
607
+
608
+ /**
609
+ * Checks for repetition of characters in
610
+ * a string
611
+ *
612
+ * @param int rLen Repetition length.
613
+ * @param string str The string to be checked.
614
+ * @return string
615
+ */
616
+ const checkRepetition = (rLen, str) => {
617
+ let res = '';
618
+ let repeated = false;
619
+ for (let i = 0; i < str.length; i += 1) {
620
+ repeated = true;
621
+ for (let j = 0; j < rLen && j + i + rLen < str.length; j += 1) {
622
+ repeated = repeated && str.charAt(j + i) === str.charAt(j + i + rLen);
623
+ }
624
+ if (repeated) {
625
+ i += rLen - 1;
626
+ repeated = false;
627
+ }
628
+ else {
629
+ res += str.charAt(i);
630
+ }
631
+ }
632
+ return res;
633
+ };
634
+ /**
635
+ * Returns a value between -1 and 100 to score
636
+ * the user's password.
637
+ *
638
+ * @param string password The password to be checked.
639
+ * @return int
640
+ */
641
+ const calculateScore = (password, lmin) => {
642
+ let score = 0;
643
+ // empty password
644
+ if (password.trim().length === 0) {
645
+ return -2;
646
+ }
647
+ if (password.length < lmin) {
648
+ return -1;
649
+ }
650
+ // password length
651
+ score += password.length * 4;
652
+ score += checkRepetition(1, password).length - password.length;
653
+ score += checkRepetition(2, password).length - password.length;
654
+ score += checkRepetition(3, password).length - password.length;
655
+ score += checkRepetition(4, password).length - password.length;
656
+ // password has 3 numbers
657
+ if (password.match(/(.*[0-9].*[0-9].*[0-9])/)) {
658
+ score += 5;
659
+ }
660
+ // password has at least 2 symbols
661
+ const symbols = /(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/;
662
+ if (password.match(symbols)) {
663
+ score += 5;
664
+ }
665
+ // password has Upper and Lower chars
666
+ if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)) {
667
+ score += 10;
668
+ }
669
+ // password has number and chars
670
+ if (password.match(/([a-zA-Z])/) && password.match(/([0-9])/)) {
671
+ score += 15;
672
+ }
673
+ // password has number and symbol
674
+ if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([0-9])/)) {
675
+ score += 15;
676
+ }
677
+ // password has char and symbol
678
+ if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([a-zA-Z])/)) {
679
+ score += 15;
680
+ }
681
+ // password is just numbers or chars
682
+ if (password.match(/^\w+$/) || password.match(/^\d+$/)) {
683
+ score -= 10;
684
+ }
685
+ if (score > 100) {
686
+ score = 100;
687
+ }
688
+ if (score < 0) {
689
+ score = 0;
690
+ }
691
+ return score;
692
+ };
693
+ const scoreColor = (score) => {
694
+ if (score === -1 || score === -2 || score < 26) {
695
+ return 'danger';
696
+ }
697
+ if (score < 51) {
698
+ return 'warning';
699
+ }
700
+ if (score < 76) {
701
+ return 'success';
702
+ }
703
+ return 'success';
704
+ };
705
+ const scoreText = (score, messages) => {
706
+ if (score === -1) {
707
+ return messages.shortPass;
708
+ }
709
+ if (score === -2) {
710
+ return '';
711
+ }
712
+ if (score < 26) {
713
+ return messages.badPass;
714
+ }
715
+ if (score < 51) {
716
+ return messages.badPass;
717
+ }
718
+ if (score < 76) {
719
+ return messages.goodPass;
720
+ }
721
+ return messages.strongPass;
722
+ };
723
+ const suggestionsConfig = [
724
+ {
725
+ key: 'length',
726
+ text: (config) => config.suggestionLength.replace('{minLength}', config.minimumLength.toString()),
727
+ test: (password, config) => password.length >= config.minimumLength,
728
+ },
729
+ {
730
+ key: 'uppercase',
731
+ text: (config) => config.suggestionUppercase,
732
+ test: (password) => /[A-Z]/.test(password),
733
+ },
734
+ {
735
+ key: 'lowercase',
736
+ text: (config) => config.suggestionLowercase,
737
+ test: (password) => /[a-z]/.test(password),
738
+ },
739
+ {
740
+ key: 'number',
741
+ text: (config) => config.suggestionNumber,
742
+ test: (password) => /[0-9]/.test(password),
743
+ },
744
+ {
745
+ key: 'special',
746
+ text: (config) => config.suggestionSpecial,
747
+ test: (password) => /[^A-Za-z0-9]/.test(password),
748
+ },
749
+ ];
750
+ const calcCompletedSuggestions = (_suggestions, password, config) => {
751
+ let completedCount = 0;
752
+ const totalCount = _suggestions.length;
753
+ _suggestions.forEach((sugg) => {
754
+ if (sugg.test(password, config)) {
755
+ completedCount += 1;
756
+ }
757
+ });
758
+ return { completedCount, totalCount };
759
+ };
760
+
761
+ const translation = {
762
+ $code: 'it',
763
+ $name: 'Italiano',
764
+ $dir: 'ltr',
765
+ showHidePassword: 'Mostra/Nascondi Password.',
766
+ shortPass: 'Password troppo breve.',
767
+ badPass: 'Password debole.',
768
+ goodPass: 'Password abbastanza sicura.',
769
+ strongPass: 'Password sicura.',
770
+ ariaLabelPasswordMeter: 'Robustezza della password',
771
+ passwordSuggestionsLabel: 'Suggerimenti per una buona password:',
772
+ passwordSuggestionLength: 'Almeno {minLength} caratteri.',
773
+ passwordSuggestionUppercase: 'Una o più maiuscole.',
774
+ passwordSuggestionLowercase: 'Una o più minuscole.',
775
+ passwordSuggestionNumber: 'Uno o più numeri.',
776
+ passwordSuggestionSpecial: 'Uno o più caratteri speciali.',
777
+ passwordSuggestionFollowed: 'suggerimenti seguiti',
778
+ passwordSuggestionFollowedPlural: 'suggerimenti seguiti',
779
+ passwordSuggestionOf: 'di',
780
+ passwordSuggestionMetLabel: 'Soddisfatto:',
781
+ validityRequired: 'Questo campo è obbligatorio.',
782
+ validityInvalid: 'Il valore non è corretto.',
783
+ validityPattern: 'Il valore non corrisponde al formato richiesto.',
784
+ validityMinlength: 'Il valore deve essere lungo almeno {minlength} caratteri.',
785
+ validityMaxlength: 'Il valore deve essere lungo al massimo {maxlength} caratteri.',
786
+ };
787
+
788
+ var styles = css`@charset "UTF-8";
789
+ /***************************** 1 ****************************************/
790
+ /***************************** 2 ****************************************/
791
+ /***************************** 1 ****************************************/
792
+ /***************************** 2 ****************************************/
793
+ /***************************** 1 ****************************************/
794
+ /***************************** 2 ****************************************/
795
+ /***************************** 3 ****************************************/
796
+ /***************************** 1 ****************************************/
797
+ /***************************** 2 ****************************************/
798
+ /***************************** 3 ****************************************/
799
+ /***************************** NEUTRAL 1 ****************************************/
800
+ /***************************** NEUTRAL 2 ****************************************/
801
+ /***************************** NEUTRAL 2 / 3 ****************************************/
802
+ .form-check [type=checkbox]:focus + label,
803
+ .form-check [type=radio]:focus + label {
804
+ border-color: hsl(0, 0%, 0%) !important;
805
+ box-shadow: 0 0 0 2px var(--bs-color-border-inverse), 0 0 0 5px var(--bs-color-outline-focus) !important;
806
+ outline: 3px solid transparent !important;
807
+ outline-offset: 3px !important;
808
+ }
809
+
810
+ .form-check [type=checkbox]:focus[data-focus-mouse=true] + label,
811
+ .form-check [type=radio]:focus[data-focus-mouse=true] + label {
812
+ border-color: inherit !important;
813
+ box-shadow: none !important;
814
+ outline: none !important;
815
+ }
816
+
817
+ *,
818
+ *::before,
819
+ *::after {
820
+ box-sizing: border-box;
821
+ }
822
+
823
+ @media (prefers-reduced-motion: no-preference) {
824
+ :root {
825
+ scroll-behavior: smooth;
826
+ }
827
+ }
828
+
829
+ body {
830
+ margin: 0;
831
+ -webkit-text-size-adjust: 100%;
832
+ -webkit-tap-highlight-color: hsla(0, 0%, 0%, 0);
833
+ }
834
+
835
+ hr {
836
+ margin: 1rem 0;
837
+ color: inherit;
838
+ border: 0;
839
+ border-top: 1px solid;
840
+ opacity: 0.25;
841
+ }
842
+
843
+ p {
844
+ margin-top: 0;
845
+ margin-bottom: var(--bs-paragraph-spacing);
846
+ }
847
+
848
+ abbr[title] {
849
+ text-decoration: underline dotted;
850
+ cursor: help;
851
+ text-decoration-skip-ink: none;
852
+ }
853
+
854
+ address {
855
+ margin-bottom: var(--bs-spacing-s);
856
+ font-style: normal;
857
+ line-height: inherit;
858
+ }
859
+
860
+ ol,
861
+ ul {
862
+ padding-left: var(--bs-spacing-l);
863
+ }
864
+
865
+ ol,
866
+ ul,
867
+ dl {
868
+ margin-top: 0;
869
+ margin-bottom: var(--bs-spacing-s);
870
+ }
871
+
872
+ ol ol,
873
+ ul ul,
874
+ ol ul,
875
+ ul ol {
876
+ margin-bottom: 0;
877
+ }
878
+
879
+ dt {
880
+ font-weight: var(--bs-font-weight-strong);
881
+ }
882
+
883
+ dd {
884
+ margin-bottom: var(--bs-spacing-xxs);
885
+ margin-left: 0;
886
+ }
887
+
888
+ blockquote {
889
+ margin: 0 0 var(--bs-spacing-s);
890
+ }
891
+
892
+ sub,
893
+ sup {
894
+ position: relative;
895
+ font-size: var(--bs-font-size-1);
896
+ line-height: 0;
897
+ vertical-align: baseline;
898
+ }
899
+
900
+ sub {
901
+ bottom: -0.25em;
902
+ }
903
+
904
+ sup {
905
+ top: -0.5em;
906
+ }
907
+
908
+ a {
909
+ color: var(--bs-color-link);
910
+ text-decoration: underline;
911
+ text-decoration-skip-ink: auto;
912
+ text-underline-offset: 2px;
913
+ }
914
+ a:hover:not(.btn) {
915
+ color: var(--bs-color-link-hover);
916
+ text-decoration: underline;
917
+ }
918
+
919
+ a:not([href]):not([class]), a:not([href]):not([class]):hover {
920
+ color: inherit;
921
+ text-decoration: none;
922
+ }
923
+
924
+ pre,
925
+ code,
926
+ kbd,
927
+ samp {
928
+ font-size: 1em;
929
+ }
930
+
931
+ pre {
932
+ display: block;
933
+ margin-top: 0;
934
+ margin-bottom: var(--bs-paragraph-spacing);
935
+ overflow: auto;
936
+ }
937
+ pre code {
938
+ word-break: normal;
939
+ }
940
+
941
+ a > code {
942
+ color: inherit;
943
+ }
944
+
945
+ figure {
946
+ margin: 0 0 1rem;
947
+ }
948
+
949
+ img,
950
+ svg {
951
+ vertical-align: middle;
952
+ }
953
+
954
+ table {
955
+ caption-side: bottom;
956
+ border-collapse: collapse;
957
+ }
958
+
959
+ caption {
960
+ padding-top: 0.5rem;
961
+ padding-bottom: 0.5rem;
962
+ color: hsl(210, 17%, 44%);
963
+ text-align: left;
964
+ }
965
+
966
+ th {
967
+ text-align: inherit;
968
+ text-align: -webkit-match-parent;
969
+ }
970
+
971
+ thead,
972
+ tbody,
973
+ tfoot,
974
+ tr,
975
+ td,
976
+ th {
977
+ border-color: inherit;
978
+ border-style: solid;
979
+ border-width: 0;
980
+ }
981
+
982
+ label {
983
+ display: inline-block;
984
+ }
985
+
986
+ button {
987
+ border-radius: 0;
988
+ }
989
+
990
+ button:focus:not(:focus-visible) {
991
+ outline: 0;
992
+ }
993
+
994
+ input,
995
+ button,
996
+ select,
997
+ optgroup,
998
+ textarea {
999
+ margin: 0;
1000
+ font-family: inherit;
1001
+ font-size: inherit;
1002
+ line-height: inherit;
1003
+ }
1004
+
1005
+ button,
1006
+ select {
1007
+ text-transform: none;
1008
+ }
1009
+
1010
+ [role=button] {
1011
+ cursor: pointer;
1012
+ }
1013
+
1014
+ select {
1015
+ word-wrap: normal;
1016
+ }
1017
+ select:disabled {
1018
+ opacity: 1;
1019
+ }
1020
+
1021
+ [list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {
1022
+ display: none !important;
1023
+ }
1024
+
1025
+ button,
1026
+ [type=button],
1027
+ [type=reset],
1028
+ [type=submit] {
1029
+ -webkit-appearance: button;
1030
+ }
1031
+ button:not(:disabled),
1032
+ [type=button]:not(:disabled),
1033
+ [type=reset]:not(:disabled),
1034
+ [type=submit]:not(:disabled) {
1035
+ cursor: pointer;
1036
+ }
1037
+
1038
+ ::-moz-focus-inner {
1039
+ padding: 0;
1040
+ border-style: none;
1041
+ }
1042
+
1043
+ textarea {
1044
+ resize: vertical;
1045
+ }
1046
+
1047
+ fieldset {
1048
+ min-width: 0;
1049
+ padding: 0;
1050
+ margin: 0;
1051
+ border: 0;
1052
+ }
1053
+
1054
+ legend {
1055
+ float: left;
1056
+ width: 100%;
1057
+ padding: 0;
1058
+ margin-bottom: 0.5rem;
1059
+ font-size: calc(1.275rem + 0.3vw);
1060
+ line-height: inherit;
1061
+ }
1062
+ @media (min-width: 1200px) {
1063
+ legend {
1064
+ font-size: 1.5rem;
1065
+ }
1066
+ }
1067
+ legend + * {
1068
+ clear: left;
1069
+ }
1070
+
1071
+ ::-webkit-datetime-edit-fields-wrapper,
1072
+ ::-webkit-datetime-edit-text,
1073
+ ::-webkit-datetime-edit-minute,
1074
+ ::-webkit-datetime-edit-hour-field,
1075
+ ::-webkit-datetime-edit-day-field,
1076
+ ::-webkit-datetime-edit-month-field,
1077
+ ::-webkit-datetime-edit-year-field {
1078
+ padding: 0;
1079
+ }
1080
+
1081
+ ::-webkit-inner-spin-button {
1082
+ height: auto;
1083
+ }
1084
+
1085
+ [type=search] {
1086
+ outline-offset: -2px;
1087
+ -webkit-appearance: textfield;
1088
+ }
1089
+
1090
+ /* rtl:raw:
1091
+ [type="tel"],
1092
+ [type="url"],
1093
+ [type="email"],
1094
+ [type="number"] {
1095
+ direction: ltr;
1096
+ }
1097
+ */
1098
+ ::-webkit-search-decoration {
1099
+ -webkit-appearance: none;
1100
+ }
1101
+
1102
+ ::-webkit-color-swatch-wrapper {
1103
+ padding: 0;
1104
+ }
1105
+
1106
+ ::file-selector-button {
1107
+ font: inherit;
1108
+ -webkit-appearance: button;
1109
+ }
1110
+
1111
+ output {
1112
+ display: inline-block;
1113
+ }
1114
+
1115
+ iframe {
1116
+ border: 0;
1117
+ }
1118
+
1119
+ summary {
1120
+ display: list-item;
1121
+ cursor: pointer;
1122
+ }
1123
+
1124
+ progress {
1125
+ vertical-align: baseline;
1126
+ }
1127
+
1128
+ [hidden] {
1129
+ display: none !important;
1130
+ }
1131
+
1132
+ .visually-hidden,
1133
+ .visually-hidden-focusable:not(:focus):not(:focus-within) {
1134
+ position: absolute !important;
1135
+ width: 1px !important;
1136
+ height: 1px !important;
1137
+ padding: 0 !important;
1138
+ margin: -1px !important;
1139
+ overflow: hidden !important;
1140
+ clip: rect(0, 0, 0, 0) !important;
1141
+ white-space: nowrap !important;
1142
+ border: 0 !important;
1143
+ }
1144
+
1145
+ .btn {
1146
+ --bs-btn-padding-x: var(--bs-spacing-s);
1147
+ --bs-btn-padding-y: var(--bs-spacing-xs);
1148
+ --bs-btn-font-family: var(--bs-font-sans);
1149
+ --bs-btn-font-weight: var(--bs-font-weight-solid);
1150
+ --bs-btn-font-size: var(--bs-label-font-size);
1151
+ --bs-btn-line-height: var(--bs-font-line-height-3);
1152
+ --bs-btn-text-color: var(--bs-color-text-primary);
1153
+ --bs-btn-background: transparent;
1154
+ --bs-btn-border-size: 0;
1155
+ --bs-btn-border-color: transparent;
1156
+ --bs-btn-border-radius: var(--bs-radius-smooth);
1157
+ --bs-btn-outline-border-size: 2px;
1158
+ --bs-btn-outline-border-color: transparent;
1159
+ --bs-btn-disabled-opacity: 0.5;
1160
+ }
1161
+
1162
+ .btn {
1163
+ display: inline-block;
1164
+ padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);
1165
+ border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);
1166
+ border-radius: var(--bs-btn-border-radius);
1167
+ background: var(--bs-btn-background);
1168
+ box-shadow: var(--bs-btn-box-shadow, none);
1169
+ color: var(--bs-btn-text-color);
1170
+ font-family: var(--bs-btn-font-family);
1171
+ font-size: var(--bs-btn-font-size);
1172
+ font-weight: var(--bs-btn-font-weight);
1173
+ line-height: var(--bs-btn-line-height);
1174
+ text-align: center;
1175
+ text-decoration: none;
1176
+ vertical-align: middle;
1177
+ white-space: initial;
1178
+ width: auto;
1179
+ transition: all var(--bs-transition-instant) ease-in-out;
1180
+ user-select: none;
1181
+ }
1182
+ .btn:disabled, .btn.disabled {
1183
+ opacity: var(--bs-btn-disabled-opacity);
1184
+ cursor: not-allowed;
1185
+ pointer-events: none;
1186
+ }
1187
+ .btn:focus-visible {
1188
+ border-color: var(--bs-btn-hover-border-color);
1189
+ outline: 0;
1190
+ }
1191
+ .btn-check:focus-visible + .btn {
1192
+ border-color: var(--bs-btn-hover-border-color);
1193
+ outline: 0;
1194
+ }
1195
+
1196
+ .btn-link {
1197
+ --bs-btn-background: transparent;
1198
+ --bs-btn-border-color: transparent;
1199
+ text-decoration: underline;
1200
+ }
1201
+ .btn-link:hover {
1202
+ color: var(--bs-color-link-hover);
1203
+ }
1204
+
1205
+ .btn-xs {
1206
+ --bs-btn-padding-x: var(--bs-spacing-xs);
1207
+ --bs-btn-padding-y: var(--bs-spacing-xs);
1208
+ --bs-btn-font-size: var(--bs-label-font-size-s);
1209
+ --bs-btn-line-height: var(--bs-font-line-height-1);
1210
+ --bs-rounded-icon-size: 20px;
1211
+ }
1212
+
1213
+ .btn-lg {
1214
+ --bs-btn-padding-x: var(--bs-spacing-m);
1215
+ --bs-btn-padding-y: var(--bs-spacing-s);
1216
+ --bs-btn-font-size: var(--bs-label-font-size-m);
1217
+ --bs-btn-line-height: var(--bs-font-line-height-5);
1218
+ }
1219
+
1220
+ .btn-progress {
1221
+ position: relative;
1222
+ }
1223
+
1224
+ .btn-icon {
1225
+ display: inline-flex;
1226
+ flex-direction: row;
1227
+ align-items: center;
1228
+ justify-content: center;
1229
+ gap: var(--bs-icon-spacing);
1230
+ }
1231
+
1232
+ .btn-full {
1233
+ align-self: stretch;
1234
+ width: inherit;
1235
+ border: none;
1236
+ box-shadow: none;
1237
+ }
1238
+ @media (min-width: 992px) {
1239
+ .btn-full {
1240
+ display: flex;
1241
+ flex: 1;
1242
+ flex-direction: row;
1243
+ align-items: center;
1244
+ justify-content: center;
1245
+ margin: 0;
1246
+ }
1247
+ }
1248
+
1249
+ .btn:disabled:hover,
1250
+ .btn.disabled:hover {
1251
+ cursor: not-allowed;
1252
+ }
1253
+
1254
+ .btn-primary,
1255
+ a.btn-primary {
1256
+ --bs-btn-text-color: var(--bs-color-text-inverse);
1257
+ --bs-btn-background: var(--bs-color-background-primary);
1258
+ }
1259
+ .btn-primary:hover,
1260
+ a.btn-primary:hover {
1261
+ --bs-btn-background: var(--bs-color-background-primary-hover);
1262
+ }
1263
+ .btn-primary:active,
1264
+ a.btn-primary:active {
1265
+ --bs-btn-background: var(--bs-color-background-primary-active);
1266
+ }
1267
+ .btn-primary.btn-progress,
1268
+ a.btn-primary.btn-progress {
1269
+ border-color: hsl(210, 76%, 67%);
1270
+ opacity: 1;
1271
+ background-color: hsl(210, 76%, 67%);
1272
+ }
1273
+
1274
+ .btn-secondary,
1275
+ a.btn-secondary {
1276
+ --bs-btn-text-color: var(--bs-color-text-inverse);
1277
+ --bs-btn-background: var(--bs-color-background-secondary);
1278
+ }
1279
+ .btn-secondary:hover,
1280
+ a.btn-secondary:hover {
1281
+ --bs-btn-background: var(--bs-color-background-secondary-hover);
1282
+ }
1283
+ .btn-secondary:active,
1284
+ a.btn-secondary:active {
1285
+ --bs-btn-background: var(--bs-color-background-secondary-active);
1286
+ }
1287
+ .btn-secondary:disabled.btn-progress, .btn-secondary.disabled.btn-progress,
1288
+ a.btn-secondary:disabled.btn-progress,
1289
+ a.btn-secondary.disabled.btn-progress {
1290
+ border-color: hsl(210, 12%, 52%);
1291
+ opacity: 1;
1292
+ background-color: hsl(210, 12%, 52%);
1293
+ }
1294
+
1295
+ .btn-success,
1296
+ a.btn-success {
1297
+ --bs-btn-text-color: var(--bs-color-text-inverse);
1298
+ --bs-btn-background: var(--bs-color-background-success);
1299
+ }
1300
+ .btn-success:hover,
1301
+ a.btn-success:hover {
1302
+ --bs-btn-background: var(--bs-color-background-success-hover);
1303
+ }
1304
+ .btn-success:active,
1305
+ a.btn-success:active {
1306
+ --bs-btn-background: var(--bs-color-background-success-active);
1307
+ }
1308
+
1309
+ .btn-warning,
1310
+ a.btn-warning {
1311
+ --bs-btn-text-color: var(--bs-color-text-inverse);
1312
+ --bs-btn-background: var(--bs-color-background-warning);
1313
+ }
1314
+ .btn-warning:hover,
1315
+ a.btn-warning:hover {
1316
+ --bs-btn-background: var(--bs-color-background-warning-hover);
1317
+ }
1318
+ .btn-warning:active,
1319
+ a.btn-warning:active {
1320
+ --bs-btn-background: var(--bs-color-background-warning-active);
1321
+ }
1322
+
1323
+ .btn-danger,
1324
+ a.btn-danger {
1325
+ --bs-btn-text-color: var(--bs-color-text-inverse);
1326
+ --bs-btn-background: var(--bs-color-background-danger);
1327
+ }
1328
+ .btn-danger:hover,
1329
+ a.btn-danger:hover {
1330
+ --bs-btn-background: var(--bs-color-background-danger-hover);
1331
+ }
1332
+ .btn-danger:active,
1333
+ a.btn-danger:active {
1334
+ --bs-btn-background: var(--bs-color-background-danger-active);
1335
+ }
1336
+
1337
+ .btn[class*=btn-outline-] {
1338
+ --bs-btn-box-shadow: inset 0 0 0 var(--bs-btn-outline-border-size) var(--bs-btn-outline-border-color);
1339
+ }
1340
+
1341
+ .btn-outline-primary,
1342
+ a.btn-outline-primary {
1343
+ --bs-btn-outline-border-color: var(--bs-color-border-primary);
1344
+ --bs-btn-text-color: var(--bs-color-text-primary);
1345
+ }
1346
+ .btn-outline-primary:hover,
1347
+ a.btn-outline-primary:hover {
1348
+ --bs-btn-outline-border-color: var(--bs-color-border-primary-hover);
1349
+ --bs-btn-text-color: var(--bs-color-link-hover);
1350
+ }
1351
+ .btn-outline-primary:active,
1352
+ a.btn-outline-primary:active {
1353
+ --bs-btn-outline-border-color: var(--bs-color-border-primary-active);
1354
+ --bs-btn-text-color: var(--bs-color-link-active);
1355
+ }
1356
+ .btn-outline-secondary,
1357
+ a.btn-outline-secondary {
1358
+ --bs-btn-outline-border-color: var(--bs-color-border-secondary);
1359
+ --bs-btn-text-color: var(--bs-color-text-secondary);
1360
+ }
1361
+ .btn-outline-secondary:hover,
1362
+ a.btn-outline-secondary:hover {
1363
+ --bs-btn-outline-border-color: var(--bs-color-border-secondary-hover);
1364
+ --bs-btn-text-color: var(--bs-color-text-secondary-hover);
1365
+ }
1366
+ .btn-outline-secondary:active,
1367
+ a.btn-outline-secondary:active {
1368
+ --bs-btn-outline-border-color: var(--bs-color-border-secondary-active);
1369
+ --bs-btn-text-color: var(--bs-color-text-secondary-active);
1370
+ }
1371
+ .btn-outline-success,
1372
+ a.btn-outline-success {
1373
+ --bs-btn-outline-border-color: var(--bs-color-border-success);
1374
+ --bs-btn-text-color: var(--bs-color-text-success);
1375
+ }
1376
+ .btn-outline-success:hover,
1377
+ a.btn-outline-success:hover {
1378
+ --bs-btn-outline-border-color: var(--bs-color-border-success-hover);
1379
+ --bs-btn-text-color: var(--bs-color-text-success-hover);
1380
+ }
1381
+ .btn-outline-success:active,
1382
+ a.btn-outline-success:active {
1383
+ --bs-btn-outline-border-color: var(--bs-color-border-success-active);
1384
+ --bs-btn-text-color: var(--bs-color-text-success-active);
1385
+ }
1386
+ .btn-outline-warning,
1387
+ a.btn-outline-warning {
1388
+ --bs-btn-outline-border-color: var(--bs-color-border-warning);
1389
+ --bs-btn-text-color: var(--bs-color-text-warning);
1390
+ }
1391
+ .btn-outline-warning:hover,
1392
+ a.btn-outline-warning:hover {
1393
+ --bs-btn-outline-border-color: var(--bs-color-border-warning-hover);
1394
+ --bs-btn-text-color: var(--bs-color-text-warning-hover);
1395
+ }
1396
+ .btn-outline-warning:active,
1397
+ a.btn-outline-warning:active {
1398
+ --bs-btn-outline-border-color: var(--bs-color-border-warning-active);
1399
+ --bs-btn-text-color: var(--bs-color-text-warning-active);
1400
+ }
1401
+ .btn-outline-danger,
1402
+ a.btn-outline-danger {
1403
+ --bs-btn-outline-border-color: var(--bs-color-border-danger);
1404
+ --bs-btn-text-color: var(--bs-color-text-danger);
1405
+ }
1406
+ .btn-outline-danger:hover,
1407
+ a.btn-outline-danger:hover {
1408
+ --bs-btn-outline-border-color: var(--bs-color-border-danger-hover);
1409
+ --bs-btn-text-color: var(--bs-color-text-danger-hover);
1410
+ }
1411
+ .btn-outline-danger:active,
1412
+ a.btn-outline-danger:active {
1413
+ --bs-btn-outline-border-color: var(--bs-color-border-danger-active);
1414
+ --bs-btn-text-color: var(--bs-color-text-danger-active);
1415
+ }
1416
+
1417
+ .bg-dark .btn-link {
1418
+ --bs-btn-text-color: var(--bs-color-text-inverse);
1419
+ }
1420
+ .bg-dark .btn-outline-primary,
1421
+ .bg-dark a.btn-outline-primary,
1422
+ .bg-dark .btn-outline-secondary,
1423
+ .bg-dark a.btn-outline-secondary {
1424
+ --bs-btn-outline-border-color: var(--bs-color-border-inverse);
1425
+ --bs-btn-text-color: var(--bs-color-text-inverse);
1426
+ }
1427
+
1428
+ .btn-close {
1429
+ position: relative;
1430
+ box-sizing: content-box;
1431
+ width: 2.5rem;
1432
+ height: 2.5rem;
1433
+ padding: 0;
1434
+ border: 0;
1435
+ opacity: 0.5;
1436
+ background-color: transparent;
1437
+ color: var(--bs-color-text-base);
1438
+ }
1439
+ .btn-close .icon {
1440
+ position: absolute;
1441
+ top: 50%;
1442
+ left: 50%;
1443
+ transform: translate(-50%, -50%);
1444
+ }
1445
+ .btn-close:hover {
1446
+ opacity: 1;
1447
+ text-decoration: none;
1448
+ }
1449
+ .btn-close:focus {
1450
+ opacity: 1;
1451
+ }
1452
+ .btn-close:disabled, .btn-close.disabled {
1453
+ opacity: var(--bs-btn-disabled-opacity);
1454
+ pointer-events: none;
1455
+ user-select: none;
1456
+ }
1457
+
1458
+ .btn-close-white {
1459
+ filter: invert(1) grayscale(100%) brightness(200%);
1460
+ }
1461
+
1462
+ .row {
1463
+ --bs-gutter-x: 24px;
1464
+ --bs-gutter-y: 0;
1465
+ display: flex;
1466
+ flex-wrap: wrap;
1467
+ margin-top: calc(-1 * var(--bs-gutter-y));
1468
+ margin-right: calc(-0.5 * var(--bs-gutter-x));
1469
+ margin-left: calc(-0.5 * var(--bs-gutter-x));
1470
+ }
1471
+ .row > * {
1472
+ flex-shrink: 0;
1473
+ width: 100%;
1474
+ max-width: 100%;
1475
+ padding-right: calc(var(--bs-gutter-x) * 0.5);
1476
+ padding-left: calc(var(--bs-gutter-x) * 0.5);
1477
+ margin-top: var(--bs-gutter-y);
1478
+ }
1479
+
1480
+ .col {
1481
+ flex: 1 0 0%;
1482
+ }
1483
+
1484
+ .row-cols-auto > * {
1485
+ flex: 0 0 auto;
1486
+ width: auto;
1487
+ }
1488
+
1489
+ .row-cols-1 > * {
1490
+ flex: 0 0 auto;
1491
+ width: 100%;
1492
+ }
1493
+
1494
+ .row-cols-2 > * {
1495
+ flex: 0 0 auto;
1496
+ width: 50%;
1497
+ }
1498
+
1499
+ .row-cols-3 > * {
1500
+ flex: 0 0 auto;
1501
+ width: 33.3333333333%;
1502
+ }
1503
+
1504
+ .row-cols-4 > * {
1505
+ flex: 0 0 auto;
1506
+ width: 25%;
1507
+ }
1508
+
1509
+ .row-cols-5 > * {
1510
+ flex: 0 0 auto;
1511
+ width: 20%;
1512
+ }
1513
+
1514
+ .row-cols-6 > * {
1515
+ flex: 0 0 auto;
1516
+ width: 16.6666666667%;
1517
+ }
1518
+
1519
+ .col-auto {
1520
+ flex: 0 0 auto;
1521
+ width: auto;
1522
+ }
1523
+
1524
+ .col-1 {
1525
+ flex: 0 0 auto;
1526
+ width: 8.33333333%;
1527
+ }
1528
+
1529
+ .col-2 {
1530
+ flex: 0 0 auto;
1531
+ width: 16.66666667%;
1532
+ }
1533
+
1534
+ .col-3 {
1535
+ flex: 0 0 auto;
1536
+ width: 25%;
1537
+ }
1538
+
1539
+ .col-4 {
1540
+ flex: 0 0 auto;
1541
+ width: 33.33333333%;
1542
+ }
1543
+
1544
+ .col-5 {
1545
+ flex: 0 0 auto;
1546
+ width: 41.66666667%;
1547
+ }
1548
+
1549
+ .col-6 {
1550
+ flex: 0 0 auto;
1551
+ width: 50%;
1552
+ }
1553
+
1554
+ .col-7 {
1555
+ flex: 0 0 auto;
1556
+ width: 58.33333333%;
1557
+ }
1558
+
1559
+ .col-8 {
1560
+ flex: 0 0 auto;
1561
+ width: 66.66666667%;
1562
+ }
1563
+
1564
+ .col-9 {
1565
+ flex: 0 0 auto;
1566
+ width: 75%;
1567
+ }
1568
+
1569
+ .col-10 {
1570
+ flex: 0 0 auto;
1571
+ width: 83.33333333%;
1572
+ }
1573
+
1574
+ .col-11 {
1575
+ flex: 0 0 auto;
1576
+ width: 91.66666667%;
1577
+ }
1578
+
1579
+ .col-12 {
1580
+ flex: 0 0 auto;
1581
+ width: 100%;
1582
+ }
1583
+
1584
+ .offset-1 {
1585
+ margin-left: 8.33333333%;
1586
+ }
1587
+
1588
+ .offset-2 {
1589
+ margin-left: 16.66666667%;
1590
+ }
1591
+
1592
+ .offset-3 {
1593
+ margin-left: 25%;
1594
+ }
1595
+
1596
+ .offset-4 {
1597
+ margin-left: 33.33333333%;
1598
+ }
1599
+
1600
+ .offset-5 {
1601
+ margin-left: 41.66666667%;
1602
+ }
1603
+
1604
+ .offset-6 {
1605
+ margin-left: 50%;
1606
+ }
1607
+
1608
+ .offset-7 {
1609
+ margin-left: 58.33333333%;
1610
+ }
1611
+
1612
+ .offset-8 {
1613
+ margin-left: 66.66666667%;
1614
+ }
1615
+
1616
+ .offset-9 {
1617
+ margin-left: 75%;
1618
+ }
1619
+
1620
+ .offset-10 {
1621
+ margin-left: 83.33333333%;
1622
+ }
1623
+
1624
+ .offset-11 {
1625
+ margin-left: 91.66666667%;
1626
+ }
1627
+
1628
+ .g-0,
1629
+ .gx-0 {
1630
+ --bs-gutter-x: 0;
1631
+ }
1632
+
1633
+ .g-0,
1634
+ .gy-0 {
1635
+ --bs-gutter-y: 0;
1636
+ }
1637
+
1638
+ .g-1,
1639
+ .gx-1 {
1640
+ --bs-gutter-x: 0.25rem;
1641
+ }
1642
+
1643
+ .g-1,
1644
+ .gy-1 {
1645
+ --bs-gutter-y: 0.25rem;
1646
+ }
1647
+
1648
+ .g-2,
1649
+ .gx-2 {
1650
+ --bs-gutter-x: 0.5rem;
1651
+ }
1652
+
1653
+ .g-2,
1654
+ .gy-2 {
1655
+ --bs-gutter-y: 0.5rem;
1656
+ }
1657
+
1658
+ .g-3,
1659
+ .gx-3 {
1660
+ --bs-gutter-x: 1rem;
1661
+ }
1662
+
1663
+ .g-3,
1664
+ .gy-3 {
1665
+ --bs-gutter-y: 1rem;
1666
+ }
1667
+
1668
+ .g-4,
1669
+ .gx-4 {
1670
+ --bs-gutter-x: 1.5rem;
1671
+ }
1672
+
1673
+ .g-4,
1674
+ .gy-4 {
1675
+ --bs-gutter-y: 1.5rem;
1676
+ }
1677
+
1678
+ .g-5,
1679
+ .gx-5 {
1680
+ --bs-gutter-x: 3rem;
1681
+ }
1682
+
1683
+ .g-5,
1684
+ .gy-5 {
1685
+ --bs-gutter-y: 3rem;
1686
+ }
1687
+
1688
+ @media (min-width: 576px) {
1689
+ .col-sm {
1690
+ flex: 1 0 0%;
1691
+ }
1692
+ .row-cols-sm-auto > * {
1693
+ flex: 0 0 auto;
1694
+ width: auto;
1695
+ }
1696
+ .row-cols-sm-1 > * {
1697
+ flex: 0 0 auto;
1698
+ width: 100%;
1699
+ }
1700
+ .row-cols-sm-2 > * {
1701
+ flex: 0 0 auto;
1702
+ width: 50%;
1703
+ }
1704
+ .row-cols-sm-3 > * {
1705
+ flex: 0 0 auto;
1706
+ width: 33.3333333333%;
1707
+ }
1708
+ .row-cols-sm-4 > * {
1709
+ flex: 0 0 auto;
1710
+ width: 25%;
1711
+ }
1712
+ .row-cols-sm-5 > * {
1713
+ flex: 0 0 auto;
1714
+ width: 20%;
1715
+ }
1716
+ .row-cols-sm-6 > * {
1717
+ flex: 0 0 auto;
1718
+ width: 16.6666666667%;
1719
+ }
1720
+ .col-sm-auto {
1721
+ flex: 0 0 auto;
1722
+ width: auto;
1723
+ }
1724
+ .col-sm-1 {
1725
+ flex: 0 0 auto;
1726
+ width: 8.33333333%;
1727
+ }
1728
+ .col-sm-2 {
1729
+ flex: 0 0 auto;
1730
+ width: 16.66666667%;
1731
+ }
1732
+ .col-sm-3 {
1733
+ flex: 0 0 auto;
1734
+ width: 25%;
1735
+ }
1736
+ .col-sm-4 {
1737
+ flex: 0 0 auto;
1738
+ width: 33.33333333%;
1739
+ }
1740
+ .col-sm-5 {
1741
+ flex: 0 0 auto;
1742
+ width: 41.66666667%;
1743
+ }
1744
+ .col-sm-6 {
1745
+ flex: 0 0 auto;
1746
+ width: 50%;
1747
+ }
1748
+ .col-sm-7 {
1749
+ flex: 0 0 auto;
1750
+ width: 58.33333333%;
1751
+ }
1752
+ .col-sm-8 {
1753
+ flex: 0 0 auto;
1754
+ width: 66.66666667%;
1755
+ }
1756
+ .col-sm-9 {
1757
+ flex: 0 0 auto;
1758
+ width: 75%;
1759
+ }
1760
+ .col-sm-10 {
1761
+ flex: 0 0 auto;
1762
+ width: 83.33333333%;
1763
+ }
1764
+ .col-sm-11 {
1765
+ flex: 0 0 auto;
1766
+ width: 91.66666667%;
1767
+ }
1768
+ .col-sm-12 {
1769
+ flex: 0 0 auto;
1770
+ width: 100%;
1771
+ }
1772
+ .offset-sm-0 {
1773
+ margin-left: 0;
1774
+ }
1775
+ .offset-sm-1 {
1776
+ margin-left: 8.33333333%;
1777
+ }
1778
+ .offset-sm-2 {
1779
+ margin-left: 16.66666667%;
1780
+ }
1781
+ .offset-sm-3 {
1782
+ margin-left: 25%;
1783
+ }
1784
+ .offset-sm-4 {
1785
+ margin-left: 33.33333333%;
1786
+ }
1787
+ .offset-sm-5 {
1788
+ margin-left: 41.66666667%;
1789
+ }
1790
+ .offset-sm-6 {
1791
+ margin-left: 50%;
1792
+ }
1793
+ .offset-sm-7 {
1794
+ margin-left: 58.33333333%;
1795
+ }
1796
+ .offset-sm-8 {
1797
+ margin-left: 66.66666667%;
1798
+ }
1799
+ .offset-sm-9 {
1800
+ margin-left: 75%;
1801
+ }
1802
+ .offset-sm-10 {
1803
+ margin-left: 83.33333333%;
1804
+ }
1805
+ .offset-sm-11 {
1806
+ margin-left: 91.66666667%;
1807
+ }
1808
+ .g-sm-0,
1809
+ .gx-sm-0 {
1810
+ --bs-gutter-x: 0;
1811
+ }
1812
+ .g-sm-0,
1813
+ .gy-sm-0 {
1814
+ --bs-gutter-y: 0;
1815
+ }
1816
+ .g-sm-1,
1817
+ .gx-sm-1 {
1818
+ --bs-gutter-x: 0.25rem;
1819
+ }
1820
+ .g-sm-1,
1821
+ .gy-sm-1 {
1822
+ --bs-gutter-y: 0.25rem;
1823
+ }
1824
+ .g-sm-2,
1825
+ .gx-sm-2 {
1826
+ --bs-gutter-x: 0.5rem;
1827
+ }
1828
+ .g-sm-2,
1829
+ .gy-sm-2 {
1830
+ --bs-gutter-y: 0.5rem;
1831
+ }
1832
+ .g-sm-3,
1833
+ .gx-sm-3 {
1834
+ --bs-gutter-x: 1rem;
1835
+ }
1836
+ .g-sm-3,
1837
+ .gy-sm-3 {
1838
+ --bs-gutter-y: 1rem;
1839
+ }
1840
+ .g-sm-4,
1841
+ .gx-sm-4 {
1842
+ --bs-gutter-x: 1.5rem;
1843
+ }
1844
+ .g-sm-4,
1845
+ .gy-sm-4 {
1846
+ --bs-gutter-y: 1.5rem;
1847
+ }
1848
+ .g-sm-5,
1849
+ .gx-sm-5 {
1850
+ --bs-gutter-x: 3rem;
1851
+ }
1852
+ .g-sm-5,
1853
+ .gy-sm-5 {
1854
+ --bs-gutter-y: 3rem;
1855
+ }
1856
+ }
1857
+ @media (min-width: 768px) {
1858
+ .col-md {
1859
+ flex: 1 0 0%;
1860
+ }
1861
+ .row-cols-md-auto > * {
1862
+ flex: 0 0 auto;
1863
+ width: auto;
1864
+ }
1865
+ .row-cols-md-1 > * {
1866
+ flex: 0 0 auto;
1867
+ width: 100%;
1868
+ }
1869
+ .row-cols-md-2 > * {
1870
+ flex: 0 0 auto;
1871
+ width: 50%;
1872
+ }
1873
+ .row-cols-md-3 > * {
1874
+ flex: 0 0 auto;
1875
+ width: 33.3333333333%;
1876
+ }
1877
+ .row-cols-md-4 > * {
1878
+ flex: 0 0 auto;
1879
+ width: 25%;
1880
+ }
1881
+ .row-cols-md-5 > * {
1882
+ flex: 0 0 auto;
1883
+ width: 20%;
1884
+ }
1885
+ .row-cols-md-6 > * {
1886
+ flex: 0 0 auto;
1887
+ width: 16.6666666667%;
1888
+ }
1889
+ .col-md-auto {
1890
+ flex: 0 0 auto;
1891
+ width: auto;
1892
+ }
1893
+ .col-md-1 {
1894
+ flex: 0 0 auto;
1895
+ width: 8.33333333%;
1896
+ }
1897
+ .col-md-2 {
1898
+ flex: 0 0 auto;
1899
+ width: 16.66666667%;
1900
+ }
1901
+ .col-md-3 {
1902
+ flex: 0 0 auto;
1903
+ width: 25%;
1904
+ }
1905
+ .col-md-4 {
1906
+ flex: 0 0 auto;
1907
+ width: 33.33333333%;
1908
+ }
1909
+ .col-md-5 {
1910
+ flex: 0 0 auto;
1911
+ width: 41.66666667%;
1912
+ }
1913
+ .col-md-6 {
1914
+ flex: 0 0 auto;
1915
+ width: 50%;
1916
+ }
1917
+ .col-md-7 {
1918
+ flex: 0 0 auto;
1919
+ width: 58.33333333%;
1920
+ }
1921
+ .col-md-8 {
1922
+ flex: 0 0 auto;
1923
+ width: 66.66666667%;
1924
+ }
1925
+ .col-md-9 {
1926
+ flex: 0 0 auto;
1927
+ width: 75%;
1928
+ }
1929
+ .col-md-10 {
1930
+ flex: 0 0 auto;
1931
+ width: 83.33333333%;
1932
+ }
1933
+ .col-md-11 {
1934
+ flex: 0 0 auto;
1935
+ width: 91.66666667%;
1936
+ }
1937
+ .col-md-12 {
1938
+ flex: 0 0 auto;
1939
+ width: 100%;
1940
+ }
1941
+ .offset-md-0 {
1942
+ margin-left: 0;
1943
+ }
1944
+ .offset-md-1 {
1945
+ margin-left: 8.33333333%;
1946
+ }
1947
+ .offset-md-2 {
1948
+ margin-left: 16.66666667%;
1949
+ }
1950
+ .offset-md-3 {
1951
+ margin-left: 25%;
1952
+ }
1953
+ .offset-md-4 {
1954
+ margin-left: 33.33333333%;
1955
+ }
1956
+ .offset-md-5 {
1957
+ margin-left: 41.66666667%;
1958
+ }
1959
+ .offset-md-6 {
1960
+ margin-left: 50%;
1961
+ }
1962
+ .offset-md-7 {
1963
+ margin-left: 58.33333333%;
1964
+ }
1965
+ .offset-md-8 {
1966
+ margin-left: 66.66666667%;
1967
+ }
1968
+ .offset-md-9 {
1969
+ margin-left: 75%;
1970
+ }
1971
+ .offset-md-10 {
1972
+ margin-left: 83.33333333%;
1973
+ }
1974
+ .offset-md-11 {
1975
+ margin-left: 91.66666667%;
1976
+ }
1977
+ .g-md-0,
1978
+ .gx-md-0 {
1979
+ --bs-gutter-x: 0;
1980
+ }
1981
+ .g-md-0,
1982
+ .gy-md-0 {
1983
+ --bs-gutter-y: 0;
1984
+ }
1985
+ .g-md-1,
1986
+ .gx-md-1 {
1987
+ --bs-gutter-x: 0.25rem;
1988
+ }
1989
+ .g-md-1,
1990
+ .gy-md-1 {
1991
+ --bs-gutter-y: 0.25rem;
1992
+ }
1993
+ .g-md-2,
1994
+ .gx-md-2 {
1995
+ --bs-gutter-x: 0.5rem;
1996
+ }
1997
+ .g-md-2,
1998
+ .gy-md-2 {
1999
+ --bs-gutter-y: 0.5rem;
2000
+ }
2001
+ .g-md-3,
2002
+ .gx-md-3 {
2003
+ --bs-gutter-x: 1rem;
2004
+ }
2005
+ .g-md-3,
2006
+ .gy-md-3 {
2007
+ --bs-gutter-y: 1rem;
2008
+ }
2009
+ .g-md-4,
2010
+ .gx-md-4 {
2011
+ --bs-gutter-x: 1.5rem;
2012
+ }
2013
+ .g-md-4,
2014
+ .gy-md-4 {
2015
+ --bs-gutter-y: 1.5rem;
2016
+ }
2017
+ .g-md-5,
2018
+ .gx-md-5 {
2019
+ --bs-gutter-x: 3rem;
2020
+ }
2021
+ .g-md-5,
2022
+ .gy-md-5 {
2023
+ --bs-gutter-y: 3rem;
2024
+ }
2025
+ }
2026
+ @media (min-width: 992px) {
2027
+ .col-lg {
2028
+ flex: 1 0 0%;
2029
+ }
2030
+ .row-cols-lg-auto > * {
2031
+ flex: 0 0 auto;
2032
+ width: auto;
2033
+ }
2034
+ .row-cols-lg-1 > * {
2035
+ flex: 0 0 auto;
2036
+ width: 100%;
2037
+ }
2038
+ .row-cols-lg-2 > * {
2039
+ flex: 0 0 auto;
2040
+ width: 50%;
2041
+ }
2042
+ .row-cols-lg-3 > * {
2043
+ flex: 0 0 auto;
2044
+ width: 33.3333333333%;
2045
+ }
2046
+ .row-cols-lg-4 > * {
2047
+ flex: 0 0 auto;
2048
+ width: 25%;
2049
+ }
2050
+ .row-cols-lg-5 > * {
2051
+ flex: 0 0 auto;
2052
+ width: 20%;
2053
+ }
2054
+ .row-cols-lg-6 > * {
2055
+ flex: 0 0 auto;
2056
+ width: 16.6666666667%;
2057
+ }
2058
+ .col-lg-auto {
2059
+ flex: 0 0 auto;
2060
+ width: auto;
2061
+ }
2062
+ .col-lg-1 {
2063
+ flex: 0 0 auto;
2064
+ width: 8.33333333%;
2065
+ }
2066
+ .col-lg-2 {
2067
+ flex: 0 0 auto;
2068
+ width: 16.66666667%;
2069
+ }
2070
+ .col-lg-3 {
2071
+ flex: 0 0 auto;
2072
+ width: 25%;
2073
+ }
2074
+ .col-lg-4 {
2075
+ flex: 0 0 auto;
2076
+ width: 33.33333333%;
2077
+ }
2078
+ .col-lg-5 {
2079
+ flex: 0 0 auto;
2080
+ width: 41.66666667%;
2081
+ }
2082
+ .col-lg-6 {
2083
+ flex: 0 0 auto;
2084
+ width: 50%;
2085
+ }
2086
+ .col-lg-7 {
2087
+ flex: 0 0 auto;
2088
+ width: 58.33333333%;
2089
+ }
2090
+ .col-lg-8 {
2091
+ flex: 0 0 auto;
2092
+ width: 66.66666667%;
2093
+ }
2094
+ .col-lg-9 {
2095
+ flex: 0 0 auto;
2096
+ width: 75%;
2097
+ }
2098
+ .col-lg-10 {
2099
+ flex: 0 0 auto;
2100
+ width: 83.33333333%;
2101
+ }
2102
+ .col-lg-11 {
2103
+ flex: 0 0 auto;
2104
+ width: 91.66666667%;
2105
+ }
2106
+ .col-lg-12 {
2107
+ flex: 0 0 auto;
2108
+ width: 100%;
2109
+ }
2110
+ .offset-lg-0 {
2111
+ margin-left: 0;
2112
+ }
2113
+ .offset-lg-1 {
2114
+ margin-left: 8.33333333%;
2115
+ }
2116
+ .offset-lg-2 {
2117
+ margin-left: 16.66666667%;
2118
+ }
2119
+ .offset-lg-3 {
2120
+ margin-left: 25%;
2121
+ }
2122
+ .offset-lg-4 {
2123
+ margin-left: 33.33333333%;
2124
+ }
2125
+ .offset-lg-5 {
2126
+ margin-left: 41.66666667%;
2127
+ }
2128
+ .offset-lg-6 {
2129
+ margin-left: 50%;
2130
+ }
2131
+ .offset-lg-7 {
2132
+ margin-left: 58.33333333%;
2133
+ }
2134
+ .offset-lg-8 {
2135
+ margin-left: 66.66666667%;
2136
+ }
2137
+ .offset-lg-9 {
2138
+ margin-left: 75%;
2139
+ }
2140
+ .offset-lg-10 {
2141
+ margin-left: 83.33333333%;
2142
+ }
2143
+ .offset-lg-11 {
2144
+ margin-left: 91.66666667%;
2145
+ }
2146
+ .g-lg-0,
2147
+ .gx-lg-0 {
2148
+ --bs-gutter-x: 0;
2149
+ }
2150
+ .g-lg-0,
2151
+ .gy-lg-0 {
2152
+ --bs-gutter-y: 0;
2153
+ }
2154
+ .g-lg-1,
2155
+ .gx-lg-1 {
2156
+ --bs-gutter-x: 0.25rem;
2157
+ }
2158
+ .g-lg-1,
2159
+ .gy-lg-1 {
2160
+ --bs-gutter-y: 0.25rem;
2161
+ }
2162
+ .g-lg-2,
2163
+ .gx-lg-2 {
2164
+ --bs-gutter-x: 0.5rem;
2165
+ }
2166
+ .g-lg-2,
2167
+ .gy-lg-2 {
2168
+ --bs-gutter-y: 0.5rem;
2169
+ }
2170
+ .g-lg-3,
2171
+ .gx-lg-3 {
2172
+ --bs-gutter-x: 1rem;
2173
+ }
2174
+ .g-lg-3,
2175
+ .gy-lg-3 {
2176
+ --bs-gutter-y: 1rem;
2177
+ }
2178
+ .g-lg-4,
2179
+ .gx-lg-4 {
2180
+ --bs-gutter-x: 1.5rem;
2181
+ }
2182
+ .g-lg-4,
2183
+ .gy-lg-4 {
2184
+ --bs-gutter-y: 1.5rem;
2185
+ }
2186
+ .g-lg-5,
2187
+ .gx-lg-5 {
2188
+ --bs-gutter-x: 3rem;
2189
+ }
2190
+ .g-lg-5,
2191
+ .gy-lg-5 {
2192
+ --bs-gutter-y: 3rem;
2193
+ }
2194
+ }
2195
+ @media (min-width: 1200px) {
2196
+ .col-xl {
2197
+ flex: 1 0 0%;
2198
+ }
2199
+ .row-cols-xl-auto > * {
2200
+ flex: 0 0 auto;
2201
+ width: auto;
2202
+ }
2203
+ .row-cols-xl-1 > * {
2204
+ flex: 0 0 auto;
2205
+ width: 100%;
2206
+ }
2207
+ .row-cols-xl-2 > * {
2208
+ flex: 0 0 auto;
2209
+ width: 50%;
2210
+ }
2211
+ .row-cols-xl-3 > * {
2212
+ flex: 0 0 auto;
2213
+ width: 33.3333333333%;
2214
+ }
2215
+ .row-cols-xl-4 > * {
2216
+ flex: 0 0 auto;
2217
+ width: 25%;
2218
+ }
2219
+ .row-cols-xl-5 > * {
2220
+ flex: 0 0 auto;
2221
+ width: 20%;
2222
+ }
2223
+ .row-cols-xl-6 > * {
2224
+ flex: 0 0 auto;
2225
+ width: 16.6666666667%;
2226
+ }
2227
+ .col-xl-auto {
2228
+ flex: 0 0 auto;
2229
+ width: auto;
2230
+ }
2231
+ .col-xl-1 {
2232
+ flex: 0 0 auto;
2233
+ width: 8.33333333%;
2234
+ }
2235
+ .col-xl-2 {
2236
+ flex: 0 0 auto;
2237
+ width: 16.66666667%;
2238
+ }
2239
+ .col-xl-3 {
2240
+ flex: 0 0 auto;
2241
+ width: 25%;
2242
+ }
2243
+ .col-xl-4 {
2244
+ flex: 0 0 auto;
2245
+ width: 33.33333333%;
2246
+ }
2247
+ .col-xl-5 {
2248
+ flex: 0 0 auto;
2249
+ width: 41.66666667%;
2250
+ }
2251
+ .col-xl-6 {
2252
+ flex: 0 0 auto;
2253
+ width: 50%;
2254
+ }
2255
+ .col-xl-7 {
2256
+ flex: 0 0 auto;
2257
+ width: 58.33333333%;
2258
+ }
2259
+ .col-xl-8 {
2260
+ flex: 0 0 auto;
2261
+ width: 66.66666667%;
2262
+ }
2263
+ .col-xl-9 {
2264
+ flex: 0 0 auto;
2265
+ width: 75%;
2266
+ }
2267
+ .col-xl-10 {
2268
+ flex: 0 0 auto;
2269
+ width: 83.33333333%;
2270
+ }
2271
+ .col-xl-11 {
2272
+ flex: 0 0 auto;
2273
+ width: 91.66666667%;
2274
+ }
2275
+ .col-xl-12 {
2276
+ flex: 0 0 auto;
2277
+ width: 100%;
2278
+ }
2279
+ .offset-xl-0 {
2280
+ margin-left: 0;
2281
+ }
2282
+ .offset-xl-1 {
2283
+ margin-left: 8.33333333%;
2284
+ }
2285
+ .offset-xl-2 {
2286
+ margin-left: 16.66666667%;
2287
+ }
2288
+ .offset-xl-3 {
2289
+ margin-left: 25%;
2290
+ }
2291
+ .offset-xl-4 {
2292
+ margin-left: 33.33333333%;
2293
+ }
2294
+ .offset-xl-5 {
2295
+ margin-left: 41.66666667%;
2296
+ }
2297
+ .offset-xl-6 {
2298
+ margin-left: 50%;
2299
+ }
2300
+ .offset-xl-7 {
2301
+ margin-left: 58.33333333%;
2302
+ }
2303
+ .offset-xl-8 {
2304
+ margin-left: 66.66666667%;
2305
+ }
2306
+ .offset-xl-9 {
2307
+ margin-left: 75%;
2308
+ }
2309
+ .offset-xl-10 {
2310
+ margin-left: 83.33333333%;
2311
+ }
2312
+ .offset-xl-11 {
2313
+ margin-left: 91.66666667%;
2314
+ }
2315
+ .g-xl-0,
2316
+ .gx-xl-0 {
2317
+ --bs-gutter-x: 0;
2318
+ }
2319
+ .g-xl-0,
2320
+ .gy-xl-0 {
2321
+ --bs-gutter-y: 0;
2322
+ }
2323
+ .g-xl-1,
2324
+ .gx-xl-1 {
2325
+ --bs-gutter-x: 0.25rem;
2326
+ }
2327
+ .g-xl-1,
2328
+ .gy-xl-1 {
2329
+ --bs-gutter-y: 0.25rem;
2330
+ }
2331
+ .g-xl-2,
2332
+ .gx-xl-2 {
2333
+ --bs-gutter-x: 0.5rem;
2334
+ }
2335
+ .g-xl-2,
2336
+ .gy-xl-2 {
2337
+ --bs-gutter-y: 0.5rem;
2338
+ }
2339
+ .g-xl-3,
2340
+ .gx-xl-3 {
2341
+ --bs-gutter-x: 1rem;
2342
+ }
2343
+ .g-xl-3,
2344
+ .gy-xl-3 {
2345
+ --bs-gutter-y: 1rem;
2346
+ }
2347
+ .g-xl-4,
2348
+ .gx-xl-4 {
2349
+ --bs-gutter-x: 1.5rem;
2350
+ }
2351
+ .g-xl-4,
2352
+ .gy-xl-4 {
2353
+ --bs-gutter-y: 1.5rem;
2354
+ }
2355
+ .g-xl-5,
2356
+ .gx-xl-5 {
2357
+ --bs-gutter-x: 3rem;
2358
+ }
2359
+ .g-xl-5,
2360
+ .gy-xl-5 {
2361
+ --bs-gutter-y: 3rem;
2362
+ }
2363
+ }
2364
+ @media (min-width: 1400px) {
2365
+ .col-xxl {
2366
+ flex: 1 0 0%;
2367
+ }
2368
+ .row-cols-xxl-auto > * {
2369
+ flex: 0 0 auto;
2370
+ width: auto;
2371
+ }
2372
+ .row-cols-xxl-1 > * {
2373
+ flex: 0 0 auto;
2374
+ width: 100%;
2375
+ }
2376
+ .row-cols-xxl-2 > * {
2377
+ flex: 0 0 auto;
2378
+ width: 50%;
2379
+ }
2380
+ .row-cols-xxl-3 > * {
2381
+ flex: 0 0 auto;
2382
+ width: 33.3333333333%;
2383
+ }
2384
+ .row-cols-xxl-4 > * {
2385
+ flex: 0 0 auto;
2386
+ width: 25%;
2387
+ }
2388
+ .row-cols-xxl-5 > * {
2389
+ flex: 0 0 auto;
2390
+ width: 20%;
2391
+ }
2392
+ .row-cols-xxl-6 > * {
2393
+ flex: 0 0 auto;
2394
+ width: 16.6666666667%;
2395
+ }
2396
+ .col-xxl-auto {
2397
+ flex: 0 0 auto;
2398
+ width: auto;
2399
+ }
2400
+ .col-xxl-1 {
2401
+ flex: 0 0 auto;
2402
+ width: 8.33333333%;
2403
+ }
2404
+ .col-xxl-2 {
2405
+ flex: 0 0 auto;
2406
+ width: 16.66666667%;
2407
+ }
2408
+ .col-xxl-3 {
2409
+ flex: 0 0 auto;
2410
+ width: 25%;
2411
+ }
2412
+ .col-xxl-4 {
2413
+ flex: 0 0 auto;
2414
+ width: 33.33333333%;
2415
+ }
2416
+ .col-xxl-5 {
2417
+ flex: 0 0 auto;
2418
+ width: 41.66666667%;
2419
+ }
2420
+ .col-xxl-6 {
2421
+ flex: 0 0 auto;
2422
+ width: 50%;
2423
+ }
2424
+ .col-xxl-7 {
2425
+ flex: 0 0 auto;
2426
+ width: 58.33333333%;
2427
+ }
2428
+ .col-xxl-8 {
2429
+ flex: 0 0 auto;
2430
+ width: 66.66666667%;
2431
+ }
2432
+ .col-xxl-9 {
2433
+ flex: 0 0 auto;
2434
+ width: 75%;
2435
+ }
2436
+ .col-xxl-10 {
2437
+ flex: 0 0 auto;
2438
+ width: 83.33333333%;
2439
+ }
2440
+ .col-xxl-11 {
2441
+ flex: 0 0 auto;
2442
+ width: 91.66666667%;
2443
+ }
2444
+ .col-xxl-12 {
2445
+ flex: 0 0 auto;
2446
+ width: 100%;
2447
+ }
2448
+ .offset-xxl-0 {
2449
+ margin-left: 0;
2450
+ }
2451
+ .offset-xxl-1 {
2452
+ margin-left: 8.33333333%;
2453
+ }
2454
+ .offset-xxl-2 {
2455
+ margin-left: 16.66666667%;
2456
+ }
2457
+ .offset-xxl-3 {
2458
+ margin-left: 25%;
2459
+ }
2460
+ .offset-xxl-4 {
2461
+ margin-left: 33.33333333%;
2462
+ }
2463
+ .offset-xxl-5 {
2464
+ margin-left: 41.66666667%;
2465
+ }
2466
+ .offset-xxl-6 {
2467
+ margin-left: 50%;
2468
+ }
2469
+ .offset-xxl-7 {
2470
+ margin-left: 58.33333333%;
2471
+ }
2472
+ .offset-xxl-8 {
2473
+ margin-left: 66.66666667%;
2474
+ }
2475
+ .offset-xxl-9 {
2476
+ margin-left: 75%;
2477
+ }
2478
+ .offset-xxl-10 {
2479
+ margin-left: 83.33333333%;
2480
+ }
2481
+ .offset-xxl-11 {
2482
+ margin-left: 91.66666667%;
2483
+ }
2484
+ .g-xxl-0,
2485
+ .gx-xxl-0 {
2486
+ --bs-gutter-x: 0;
2487
+ }
2488
+ .g-xxl-0,
2489
+ .gy-xxl-0 {
2490
+ --bs-gutter-y: 0;
2491
+ }
2492
+ .g-xxl-1,
2493
+ .gx-xxl-1 {
2494
+ --bs-gutter-x: 0.25rem;
2495
+ }
2496
+ .g-xxl-1,
2497
+ .gy-xxl-1 {
2498
+ --bs-gutter-y: 0.25rem;
2499
+ }
2500
+ .g-xxl-2,
2501
+ .gx-xxl-2 {
2502
+ --bs-gutter-x: 0.5rem;
2503
+ }
2504
+ .g-xxl-2,
2505
+ .gy-xxl-2 {
2506
+ --bs-gutter-y: 0.5rem;
2507
+ }
2508
+ .g-xxl-3,
2509
+ .gx-xxl-3 {
2510
+ --bs-gutter-x: 1rem;
2511
+ }
2512
+ .g-xxl-3,
2513
+ .gy-xxl-3 {
2514
+ --bs-gutter-y: 1rem;
2515
+ }
2516
+ .g-xxl-4,
2517
+ .gx-xxl-4 {
2518
+ --bs-gutter-x: 1.5rem;
2519
+ }
2520
+ .g-xxl-4,
2521
+ .gy-xxl-4 {
2522
+ --bs-gutter-y: 1.5rem;
2523
+ }
2524
+ .g-xxl-5,
2525
+ .gx-xxl-5 {
2526
+ --bs-gutter-x: 3rem;
2527
+ }
2528
+ .g-xxl-5,
2529
+ .gy-xxl-5 {
2530
+ --bs-gutter-y: 3rem;
2531
+ }
2532
+ }
2533
+ .row.variable-gutters {
2534
+ margin-right: -12px;
2535
+ margin-left: -12px;
2536
+ margin-right: -6px;
2537
+ margin-left: -6px;
2538
+ }
2539
+ .row.variable-gutters > .col,
2540
+ .row.variable-gutters > [class*=col-] {
2541
+ padding-right: 12px;
2542
+ padding-left: 12px;
2543
+ }
2544
+ .row.variable-gutters > .col,
2545
+ .row.variable-gutters > [class*=col-] {
2546
+ padding-right: 6px;
2547
+ padding-left: 6px;
2548
+ }
2549
+ @media (min-width: 576px) {
2550
+ .row.variable-gutters {
2551
+ margin-right: -6px;
2552
+ margin-left: -6px;
2553
+ }
2554
+ .row.variable-gutters > .col,
2555
+ .row.variable-gutters > [class*=col-] {
2556
+ padding-right: 6px;
2557
+ padding-left: 6px;
2558
+ }
2559
+ }
2560
+ @media (min-width: 768px) {
2561
+ .row.variable-gutters {
2562
+ margin-right: -10px;
2563
+ margin-left: -10px;
2564
+ }
2565
+ .row.variable-gutters > .col,
2566
+ .row.variable-gutters > [class*=col-] {
2567
+ padding-right: 10px;
2568
+ padding-left: 10px;
2569
+ }
2570
+ }
2571
+ @media (min-width: 992px) {
2572
+ .row.variable-gutters {
2573
+ margin-right: -12px;
2574
+ margin-left: -12px;
2575
+ }
2576
+ .row.variable-gutters > .col,
2577
+ .row.variable-gutters > [class*=col-] {
2578
+ padding-right: 12px;
2579
+ padding-left: 12px;
2580
+ }
2581
+ }
2582
+ @media (min-width: 1200px) {
2583
+ .row.variable-gutters {
2584
+ margin-right: -12px;
2585
+ margin-left: -12px;
2586
+ }
2587
+ .row.variable-gutters > .col,
2588
+ .row.variable-gutters > [class*=col-] {
2589
+ padding-right: 12px;
2590
+ padding-left: 12px;
2591
+ }
2592
+ }
2593
+ @media (min-width: 1400px) {
2594
+ .row.variable-gutters {
2595
+ margin-right: -14px;
2596
+ margin-left: -14px;
2597
+ }
2598
+ .row.variable-gutters > .col,
2599
+ .row.variable-gutters > [class*=col-] {
2600
+ padding-right: 14px;
2601
+ padding-left: 14px;
2602
+ }
2603
+ }
2604
+
2605
+ .row.row-column-border > [class^=col-] {
2606
+ padding-top: var(--bs-spacing-l);
2607
+ padding-bottom: var(--bs-spacing-l);
2608
+ border-top: var(--bs-border-base) solid var(--bs-color-border-subtle);
2609
+ }
2610
+ .row.row-column-border > [class^=col-]:first-child {
2611
+ border: none;
2612
+ }
2613
+ .row.row-column-border > [class^=col-] .navbar {
2614
+ padding: 0;
2615
+ }
2616
+ .row.row-column-border > [class^=col-] .navbar .menu-wrapper .nav-link {
2617
+ padding-right: 0;
2618
+ }
2619
+ .row.row-column-menu-left > [class^=col-]:first-child {
2620
+ padding: var(--bs-spacing-s) 0;
2621
+ }
2622
+ .row.row-column-menu-right > [class^=col-]:last-child {
2623
+ padding: var(--bs-spacing-s) 0;
2624
+ }
2625
+ .row.row-card {
2626
+ background-color: var(--bs-color-background-inverse);
2627
+ }
2628
+ @media (min-width: 992px) {
2629
+ .row.row-column-border {
2630
+ margin-top: 1rem;
2631
+ border-top: var(--bs-border-base) solid var(--bs-color-border-subtle);
2632
+ }
2633
+ .row.row-column-border > [class^=col-] {
2634
+ padding: 3rem 3rem;
2635
+ border-top: none;
2636
+ border-left: var(--bs-border-base) solid var(--bs-color-border-subtle);
2637
+ }
2638
+ .row.row-column-border > [class^=col-]:first-child {
2639
+ border: none;
2640
+ padding-left: 0;
2641
+ }
2642
+ .row.row-column-border > [class^=col-] .navbar {
2643
+ padding: 8px 0;
2644
+ }
2645
+ .row.row-column-border > [class^=col-] .navbar .menu-wrapper {
2646
+ padding: 0;
2647
+ }
2648
+ .row.row-column-menu-left > [class^=col-]:first-child {
2649
+ padding: 0;
2650
+ }
2651
+ .row.row-column-menu-right > [class^=col-]:last-child {
2652
+ padding: 0;
2653
+ }
2654
+ }
2655
+ .row.row-full-width {
2656
+ max-width: 100vw;
2657
+ margin: 0 calc(-50vw + 50%);
2658
+ }
2659
+ .row.row-full-width > * {
2660
+ width: 100%;
2661
+ display: flex;
2662
+ flex-direction: column;
2663
+ }
2664
+ .row.row-full-width > * img {
2665
+ width: 100%;
2666
+ height: 100%;
2667
+ max-height: 600px;
2668
+ object-fit: cover;
2669
+ }
2670
+ .row.row-title {
2671
+ display: flex;
2672
+ flex-direction: column;
2673
+ justify-content: space-between;
2674
+ }
2675
+ @media (min-width: 576px) {
2676
+ .row.row-title {
2677
+ flex-direction: row;
2678
+ align-items: flex-start;
2679
+ }
2680
+ }
2681
+ .row.row-border h1 {
2682
+ border-bottom: var(--bs-border-base) solid var(--bs-color-border-subtle);
2683
+ padding-bottom: var(--bs-spacing-s);
2684
+ margin-bottom: var(--bs-spacing-s);
2685
+ }
2686
+ .row.row-border h2 {
2687
+ border-bottom: var(--bs-border-base) solid var(--bs-color-border-subtle);
2688
+ padding-bottom: var(--bs-spacing-s);
2689
+ margin-bottom: var(--bs-spacing-s);
2690
+ }
2691
+ .row.row-border h3 {
2692
+ border-bottom: var(--bs-border-base) solid var(--bs-color-border-subtle);
2693
+ padding-bottom: var(--bs-spacing-s);
2694
+ margin-bottom: var(--bs-spacing-s);
2695
+ }
2696
+ .row.row-border h4 {
2697
+ border-bottom: var(--bs-border-base) solid var(--bs-color-border-subtle);
2698
+ padding-bottom: var(--bs-spacing-s);
2699
+ margin-bottom: var(--bs-spacing-s);
2700
+ }
2701
+ .row.row-border h5 {
2702
+ border-bottom: var(--bs-border-base) solid var(--bs-color-border-subtle);
2703
+ padding-bottom: var(--bs-spacing-s);
2704
+ margin-bottom: var(--bs-spacing-s);
2705
+ }
2706
+ .row.row-border h6 {
2707
+ border-bottom: var(--bs-border-base) solid var(--bs-color-border-subtle);
2708
+ padding-bottom: var(--bs-spacing-s);
2709
+ margin-bottom: var(--bs-spacing-s);
2710
+ }
2711
+ @media (min-width: 576px) {
2712
+ .row.row-border {
2713
+ border-bottom: var(--bs-border-base) solid var(--bs-color-border-subtle);
2714
+ padding-bottom: var(--bs-spacing-s);
2715
+ margin-bottom: var(--bs-spacing-s);
2716
+ }
2717
+ .row.row-border h1 {
2718
+ border: none;
2719
+ margin: 0;
2720
+ padding: 0;
2721
+ }
2722
+ .row.row-border h2 {
2723
+ border: none;
2724
+ margin: 0;
2725
+ padding: 0;
2726
+ }
2727
+ .row.row-border h3 {
2728
+ border: none;
2729
+ margin: 0;
2730
+ padding: 0;
2731
+ }
2732
+ .row.row-border h4 {
2733
+ border: none;
2734
+ margin: 0;
2735
+ padding: 0;
2736
+ }
2737
+ .row.row-border h5 {
2738
+ border: none;
2739
+ margin: 0;
2740
+ padding: 0;
2741
+ }
2742
+ .row.row-border h6 {
2743
+ border: none;
2744
+ margin: 0;
2745
+ padding: 0;
2746
+ }
2747
+ }
2748
+ .row.row-calendar {
2749
+ display: block;
2750
+ }
2751
+
2752
+ .sticky-wrapper.is-sticky {
2753
+ position: fixed;
2754
+ }
2755
+ .sticky-wrapper.is-sticky.navbar-wrapper {
2756
+ z-index: 1;
2757
+ left: 0;
2758
+ right: 0;
2759
+ width: auto;
2760
+ }
2761
+ .sticky-wrapper.is-sticky.navbar-wrapper .navbar {
2762
+ padding-top: var(--bs-spacing-s);
2763
+ padding-bottom: var(--bs-spacing-s);
2764
+ border-top: var(--bs-border-base) solid var(--bs-color-border-subtle);
2765
+ }
2766
+ .sticky-wrapper.is-sticky.navbar-wrapper.sticky-expanded {
2767
+ z-index: auto;
2768
+ }
2769
+ @media (min-width: 992px) {
2770
+ .sticky-wrapper.is-sticky.navbar-wrapper {
2771
+ z-index: auto;
2772
+ left: auto;
2773
+ right: auto;
2774
+ width: unset;
2775
+ }
2776
+ .sticky-wrapper.is-sticky.navbar-wrapper .navbar {
2777
+ border: none;
2778
+ background-color: transparent;
2779
+ padding: 0;
2780
+ }
2781
+ .sticky-wrapper.is-sticky.navbar-wrapper .navbar .menu-wrapper {
2782
+ padding: 0;
2783
+ }
2784
+ .sticky-wrapper.is-sticky.navbar-wrapper .navbar .menu-wrapper .nav-link {
2785
+ padding-right: 0;
2786
+ }
2787
+ .sticky-wrapper.is-sticky.navbar-wrapper .navbar.it-bottom-navscroll {
2788
+ border: none;
2789
+ }
2790
+ .sticky-wrapper.is-sticky.navbar-wrapper.at-bottom {
2791
+ position: absolute;
2792
+ top: auto !important;
2793
+ bottom: 0;
2794
+ }
2795
+ }
2796
+ .sticky-wrapper.navbar-wrapper .navbar.it-top-navscroll, .sticky-wrapper.navbar-wrapper .navbar.it-bottom-navscroll {
2797
+ position: relative;
2798
+ top: auto;
2799
+ left: auto;
2800
+ right: auto;
2801
+ bottom: auto;
2802
+ }
2803
+
2804
+ @keyframes progress-bar-stripes {
2805
+ 0% {
2806
+ background-position-x: 16px;
2807
+ }
2808
+ }
2809
+ .progress-bar-striped {
2810
+ 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);
2811
+ background-size: var(--bs-progress-height) var(--bs-progress-height);
2812
+ }
2813
+
2814
+ .progress-bar-animated {
2815
+ animation: 1s linear infinite progress-bar-stripes;
2816
+ }
2817
+ @media (prefers-reduced-motion: reduce) {
2818
+ .progress-bar-animated {
2819
+ animation: none;
2820
+ }
2821
+ }
2822
+
2823
+ @keyframes progressBarIndeterminate {
2824
+ 0% {
2825
+ left: -5%;
2826
+ }
2827
+ 50% {
2828
+ width: 66%;
2829
+ }
2830
+ 100% {
2831
+ left: 100%;
2832
+ width: 33%;
2833
+ }
2834
+ }
2835
+ .progress {
2836
+ --bs-progress-height: 16px;
2837
+ --bs-progress-font-size: 0.75rem;
2838
+ --bs-progress-bg: hsl(0, 0%, 90%);
2839
+ --bs-progress-border-radius: 0;
2840
+ --bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);
2841
+ --bs-progress-bar-color: hsl(0, 0%, 100%);
2842
+ --bs-progress-bar-bg: hsl(210, 100%, 40%);
2843
+ --bs-progress-bar-transition: width 0.6s ease;
2844
+ display: flex;
2845
+ overflow: hidden;
2846
+ font-size: var(--bs-progress-font-size);
2847
+ background-color: var(--bs-progress-bg);
2848
+ border-radius: var(--bs-progress-border-radius);
2849
+ height: 4px;
2850
+ box-shadow: none;
2851
+ }
2852
+ .progress.progress-color {
2853
+ background-color: hsl(210, 3%, 85%);
2854
+ }
2855
+ .progress.progress-indeterminate {
2856
+ position: relative;
2857
+ }
2858
+ .progress.progress-indeterminate .progress-bar {
2859
+ width: 0;
2860
+ animation: progressBarIndeterminate 1.4s cubic-bezier(0.77, 0, 0.175, 1) infinite forwards;
2861
+ position: absolute;
2862
+ top: 0;
2863
+ bottom: 0;
2864
+ }
2865
+
2866
+ .progress-bar {
2867
+ display: flex;
2868
+ flex-direction: column;
2869
+ justify-content: center;
2870
+ overflow: hidden;
2871
+ color: var(--bs-progress-bar-color);
2872
+ text-align: center;
2873
+ white-space: nowrap;
2874
+ transition: var(--bs-progress-bar-transition);
2875
+ background-color: hsl(210, 17%, 44%);
2876
+ }
2877
+ @media (prefers-reduced-motion: reduce) {
2878
+ .progress-bar {
2879
+ transition: none;
2880
+ }
2881
+ }
2882
+
2883
+ .progress-bar-label {
2884
+ text-align: right;
2885
+ font-size: 0.75rem;
2886
+ color: hsl(0, 0%, 10%);
2887
+ font-weight: 500;
2888
+ }
2889
+
2890
+ .btn-progress .progress {
2891
+ display: block;
2892
+ position: absolute;
2893
+ bottom: 0;
2894
+ width: 100%;
2895
+ left: 0;
2896
+ border-radius: 0 0 4px 4px;
2897
+ }
2898
+ .btn-progress .progress-bar {
2899
+ height: 4px;
2900
+ }
2901
+
2902
+ @media (min-width: 576px) {
2903
+ .progress-bar-label {
2904
+ font-size: 0.75rem;
2905
+ }
2906
+ }
2907
+ body {
2908
+ font-family: var(--bs-font-sans);
2909
+ }
2910
+
2911
+ p,
2912
+ ul,
2913
+ ol,
2914
+ dl {
2915
+ font-size: var(--bs-body-font-size);
2916
+ line-height: var(--bs-body-line-height);
2917
+ }
2918
+
2919
+ caption,
2920
+ figcaption {
2921
+ font-size: var(--bs-caption-font-size);
2922
+ line-height: var(--bs-caption-line-height);
2923
+ }
2924
+
2925
+ b,
2926
+ strong {
2927
+ font-weight: var(--bs-font-weight-strong);
2928
+ }
2929
+
2930
+ mark,
2931
+ code {
2932
+ padding: 0 var(--bs-spacing-3xs);
2933
+ }
2934
+
2935
+ mark {
2936
+ background-color: var(--bs-highlight-background);
2937
+ }
2938
+
2939
+ pre,
2940
+ code,
2941
+ kbd,
2942
+ samp {
2943
+ border-radius: var(--bs-radius-smooth);
2944
+ font-family: var(--bs-font-mono);
2945
+ }
2946
+
2947
+ ins,
2948
+ del {
2949
+ position: relative;
2950
+ display: flex;
2951
+ align-items: center;
2952
+ padding: var(--bs-spacing-3xs) var(--bs-spacing-m);
2953
+ font: var(--bs-body-font-size);
2954
+ text-decoration: none;
2955
+ }
2956
+
2957
+ ins {
2958
+ background-color: var(--bs-ins-background);
2959
+ text-decoration: none;
2960
+ }
2961
+
2962
+ del {
2963
+ background-color: var(--bs-del-background);
2964
+ }
2965
+
2966
+ del::before,
2967
+ ins::before {
2968
+ position: absolute;
2969
+ left: 0.5rem;
2970
+ }
2971
+
2972
+ del::before {
2973
+ content: "−";
2974
+ }
2975
+
2976
+ ins::before {
2977
+ content: "+";
2978
+ }
2979
+
2980
+ kbd {
2981
+ margin: 0 2px;
2982
+ padding: 2px var(--bs-spacing-3xs);
2983
+ border: var(--bs-border-base) solid var(--bs-color-border-subtle);
2984
+ background-color: var(--bs-color-background-secondary-lighter);
2985
+ box-shadow: var(--bs-elevation-low), 0 2px 0 0 hsla(255, 0%, 100%, 0.7) inset;
2986
+ color: var(--bs-color-text-secondary);
2987
+ font-size: var(--bs-font-size-1);
2988
+ font-weight: var(--bs-font-weight-solid);
2989
+ white-space: nowrap;
2990
+ }
2991
+ kbd kbd {
2992
+ padding: 0;
2993
+ font-size: var(--bs-code-font-size);
2994
+ }
2995
+
2996
+ small,
2997
+ .small {
2998
+ font-size: var(--bs-caption-font-size);
2999
+ }
3000
+
3001
+ .x-small {
3002
+ font-size: var(--bs-font-size-1);
3003
+ }
3004
+
3005
+ h1,
3006
+ .h1 {
3007
+ font-size: var(--bs-heading-1-font-size);
3008
+ }
3009
+
3010
+ h2,
3011
+ .h2 {
3012
+ font-size: var(--bs-heading-2-font-size);
3013
+ }
3014
+
3015
+ h3,
3016
+ .h3 {
3017
+ font-size: var(--bs-heading-3-font-size);
3018
+ }
3019
+
3020
+ h4,
3021
+ .h4 {
3022
+ font-size: var(--bs-heading-4-font-size);
3023
+ }
3024
+
3025
+ h5,
3026
+ .h5 {
3027
+ font-size: var(--bs-heading-5-font-size);
3028
+ }
3029
+
3030
+ h6,
3031
+ .h6 {
3032
+ font-size: var(--bs-heading-6-font-size);
3033
+ }
3034
+
3035
+ h1,
3036
+ .h1,
3037
+ h2,
3038
+ .h2,
3039
+ h3,
3040
+ .h3,
3041
+ h4,
3042
+ .h4,
3043
+ h5,
3044
+ .h5,
3045
+ h6,
3046
+ .h6 {
3047
+ margin-top: 0;
3048
+ margin-bottom: var(--bs-heading-spacing);
3049
+ line-height: var(--bs-heading-line-height);
3050
+ }
3051
+ :is(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) + h1, p + h1,
3052
+ :is(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) + .h1,
3053
+ p + .h1,
3054
+ :is(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) + h2,
3055
+ p + h2,
3056
+ :is(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) + .h2,
3057
+ p + .h2,
3058
+ :is(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) + h3,
3059
+ p + h3,
3060
+ :is(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) + .h3,
3061
+ p + .h3,
3062
+ :is(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) + h4,
3063
+ p + h4,
3064
+ :is(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) + .h4,
3065
+ p + .h4,
3066
+ :is(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) + h5,
3067
+ p + h5,
3068
+ :is(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) + .h5,
3069
+ p + .h5,
3070
+ :is(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) + h6,
3071
+ p + h6,
3072
+ :is(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) + .h6,
3073
+ p + .h6 {
3074
+ padding-top: var(--bs-spacing-s);
3075
+ }
3076
+
3077
+ h1,
3078
+ h2,
3079
+ h3,
3080
+ .h1,
3081
+ .h2,
3082
+ .h3 {
3083
+ font-weight: var(--bs-heading-font-weight);
3084
+ }
3085
+
3086
+ h4,
3087
+ h5,
3088
+ h6,
3089
+ .h4,
3090
+ .h5,
3091
+ .h6 {
3092
+ font-weight: var(--bs-heading-font-weight-weak);
3093
+ }
3094
+
3095
+ h1,
3096
+ .h1,
3097
+ .display-1 {
3098
+ letter-spacing: -1px;
3099
+ }
3100
+
3101
+ .font-serif {
3102
+ font-family: var(--bs-font-serif) !important;
3103
+ }
3104
+
3105
+ .font-sans-serif {
3106
+ font-family: var(--bs-font-sans) !important;
3107
+ }
3108
+
3109
+ .font-monospace {
3110
+ font-family: var(--bs-font-mono) !important;
3111
+ }
3112
+
3113
+ .display-1 {
3114
+ font-size: var(--bs-display-font-size);
3115
+ font-weight: var(--bs-heading-font-weight);
3116
+ line-height: var(--bs-heading-line-height);
3117
+ }
3118
+
3119
+ .lead {
3120
+ font-size: var(--bs-lead-font-size);
3121
+ font-weight: var(--bs-lead-font-weight);
3122
+ line-height: var(--bs-lead-line-height);
3123
+ }
3124
+
3125
+ blockquote,
3126
+ .blockquote {
3127
+ margin: var(--bs-spacing-m) 0;
3128
+ margin-left: var(--bs-spacin-inline-xs);
3129
+ padding: var(--bs-spacing-s);
3130
+ border-left: var(--bs-border-thick) solid var(--bs-border-color-secondary);
3131
+ font-size: var(--bs-body-font-size);
3132
+ line-height: var(--bs-body-line-height);
3133
+ }
3134
+ blockquote > :last-child,
3135
+ .blockquote > :last-child {
3136
+ margin-bottom: 0;
3137
+ }
3138
+ blockquote.text-end,
3139
+ .blockquote.text-end {
3140
+ margin-right: var(--bs-spacin-inline-xs);
3141
+ border-right: var(--bs-border-thick) solid var(--bs-border-color-secondary);
3142
+ }
3143
+ blockquote.text-center, blockquote.text-end, blockquote.blockquote-simple,
3144
+ .blockquote.text-center,
3145
+ .blockquote.text-end,
3146
+ .blockquote.blockquote-simple {
3147
+ margin-left: 0;
3148
+ border-right: none;
3149
+ border-left: none;
3150
+ }
3151
+ blockquote.text-center, blockquote.blockquote-simple,
3152
+ .blockquote.text-center,
3153
+ .blockquote.blockquote-simple {
3154
+ padding: 0;
3155
+ }
3156
+ blockquote.blockquote-simple,
3157
+ .blockquote.blockquote-simple {
3158
+ font-style: italic;
3159
+ }
3160
+ blockquote.blockquote-card,
3161
+ .blockquote.blockquote-card {
3162
+ margin-left: 0;
3163
+ padding: var(--bs-spacing-m);
3164
+ background-color: var(--bs-color-background-inverse);
3165
+ box-shadow: var(--bs-elevation-low);
3166
+ }
3167
+ blockquote.blockquote-card .blockquote-footer,
3168
+ .blockquote.blockquote-card .blockquote-footer {
3169
+ font-size: inherit;
3170
+ }
3171
+ blockquote.blockquote-card .blockquote-footer:before,
3172
+ .blockquote.blockquote-card .blockquote-footer:before {
3173
+ content: none;
3174
+ }
3175
+ blockquote.blockquote-card.dark,
3176
+ .blockquote.blockquote-card.dark {
3177
+ border-left: none;
3178
+ background-color: var(--bs-color-background-primary);
3179
+ color: var(--bs-color-text-inverse);
3180
+ }
3181
+ blockquote.blockquote-card.dark .blockquote-footer,
3182
+ .blockquote.blockquote-card.dark .blockquote-footer {
3183
+ color: var(--bs-color-text-inverse);
3184
+ }
3185
+
3186
+ .blockquote-footer {
3187
+ margin-top: 0;
3188
+ margin-bottom: var(--bs-spacing-s);
3189
+ color: var(--bs-color-text-secondary);
3190
+ font-size: var(--bs-label-font-size);
3191
+ }
3192
+ .blockquote-footer::before {
3193
+ content: "— ";
3194
+ }
3195
+ .bg-dark .blockquote-footer {
3196
+ color: var(--bs-color-text-muted);
3197
+ }
3198
+
3199
+ .initialism {
3200
+ font-size: var(--bs-label-font-size-s);
3201
+ text-transform: uppercase;
3202
+ }
3203
+
3204
+ :root {
3205
+ --bs-form-control-height: 2.5rem;
3206
+ --bs-form-control-spacing: var(--bs-spacing-xxs);
3207
+ --bs-form-control-background-color: var(--bs-color-background-inverse);
3208
+ --bs-form-control-border-color: var(--bs-color-border-secondary);
3209
+ --bs-form-control-border-radius: var(--bs-radius-smooth);
3210
+ --bs-form-control-placeholder-color: var(--bs-color-text-muted);
3211
+ --bs-form-control-label-color: var(--bs-color-text-secondary);
3212
+ --bs-form-control-text-color: var(--bs-color-text-base);
3213
+ --bs-form-control-font-size: var(--bs-body-font-size);
3214
+ --bs-form-group-spacing-y: var(--bs-spacing-m);
3215
+ --bs-form-checkbox-border-color: var(--bs-color-border-secondary);
3216
+ --bs-form-checkbox-border-radius: var(--bs-radius-smooth);
3217
+ --bs-form-checked-color: var(--bs-color-background-primary);
3218
+ }
3219
+
3220
+ input[readonly],
3221
+ textarea[readonly],
3222
+ select[readonly] {
3223
+ --bs-form-control-border-color: var(--bs-color-border-subtle);
3224
+ --bs-form-control-background-color: var(--bs-color-background-muted);
3225
+ cursor: not-allowed;
3226
+ }
3227
+
3228
+ input,
3229
+ textarea,
3230
+ select {
3231
+ display: block;
3232
+ width: 100%;
3233
+ padding: var(--bs-form-control-spacing);
3234
+ border: 1px solid var(--bs-form-control-border-color);
3235
+ border-radius: var(--bs-form-control-border-radius);
3236
+ background-color: var(--bs-form-control-background-color);
3237
+ color: var(--bs-form-control-text-color);
3238
+ font-size: var(--bs-form-control-font-size);
3239
+ }
3240
+ input.disabled, input:disabled,
3241
+ textarea.disabled,
3242
+ textarea:disabled,
3243
+ select.disabled,
3244
+ select:disabled {
3245
+ border-color: var(--bs-color-border-disabled);
3246
+ opacity: 1;
3247
+ background-color: var(--bs-color-background-disabled);
3248
+ color: var(--bs-color-text-disabled);
3249
+ }
3250
+
3251
+ input:focus,
3252
+ textarea:focus {
3253
+ outline: 3px solid transparent;
3254
+ outline-offset: 3px;
3255
+ box-shadow: 0 0 0 2px var(--bs-color-border-inverse), 0 0 0 5px var(--bs-color-outline-focus) !important;
3256
+ }
3257
+
3258
+ input::file-selector-button {
3259
+ margin: -0.375rem -0.75rem;
3260
+ padding: 0.375rem 0.75rem;
3261
+ border-width: 0;
3262
+ border-style: solid;
3263
+ border-radius: 0;
3264
+ border-color: inherit;
3265
+ color: hsl(0, 0%, 10%);
3266
+ pointer-events: none;
3267
+ margin-inline-end: 0.75rem;
3268
+ border-inline-end-width: 0;
3269
+ background-color: hsl(0, 0%, 100%);
3270
+ 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;
3271
+ }
3272
+ @media (prefers-reduced-motion: reduce) {
3273
+ input::file-selector-button {
3274
+ transition: none;
3275
+ }
3276
+ }
3277
+ input:hover:not(:disabled):not([readonly])::file-selector-button {
3278
+ background-color: rgb(242.25, 242.25, 242.25);
3279
+ }
3280
+ input[type=file] {
3281
+ overflow: hidden;
3282
+ }
3283
+ input[type=file]:not(:disabled):not([readonly]) {
3284
+ cursor: pointer;
3285
+ }
3286
+ input::-webkit-date-and-time-value {
3287
+ height: 1.5em;
3288
+ }
3289
+
3290
+ select {
3291
+ 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='hsl%280, 0%, 15%%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
3292
+ background-repeat: no-repeat;
3293
+ background-position: right var(--bs-form-control-spacing) center;
3294
+ background-size: 16px 12px;
3295
+ appearance: none;
3296
+ }
3297
+ select:focus {
3298
+ border-color: hsl(210, 17%, 44%);
3299
+ outline: 0;
3300
+ box-shadow: 0 0 0 0.25rem rgba(0, 102, 204, 0.25);
3301
+ }
3302
+ select[multiple], select[size]:not([size="1"]) {
3303
+ padding-right: 0.75rem;
3304
+ background-image: none;
3305
+ }
3306
+ select:disabled {
3307
+ background-color: hsl(0, 0%, 90%);
3308
+ }
3309
+ select:disabled:hover {
3310
+ cursor: not-allowed;
3311
+ }
3312
+ select:-moz-focusring {
3313
+ color: transparent;
3314
+ text-shadow: 0 0 0 hsl(0, 0%, 10%);
3315
+ }
3316
+ select option {
3317
+ font-weight: normal;
3318
+ }
3319
+ select:disabled {
3320
+ opacity: 1;
3321
+ background-color: hsl(210, 3%, 85%);
3322
+ }
3323
+
3324
+ textarea {
3325
+ height: auto;
3326
+ font-size: var(--bs-body-font-size);
3327
+ line-height: 1.5;
3328
+ }
3329
+
3330
+ label {
3331
+ display: inline-block;
3332
+ width: auto;
3333
+ max-width: 100%;
3334
+ margin-bottom: var(--bs-spacing-xxs);
3335
+ color: var(--bs-form-control-label-color);
3336
+ font-size: var(--bs-label-font-size-s);
3337
+ font-weight: var(--bs-font-weight-solid);
3338
+ line-height: var(--bs-label-line-height);
3339
+ }
3340
+
3341
+ input,
3342
+ textarea {
3343
+ outline: 0;
3344
+ box-shadow: none;
3345
+ transition: none;
3346
+ appearance: none;
3347
+ }
3348
+
3349
+ input[type=date],
3350
+ input[type=datetime-local],
3351
+ input[type=time] {
3352
+ display: flex;
3353
+ }
3354
+
3355
+ fieldset legend {
3356
+ z-index: 1;
3357
+ display: block;
3358
+ width: auto;
3359
+ max-width: 100%;
3360
+ margin-bottom: 0;
3361
+ padding: 0 var(--bs-form-input-spacing-x);
3362
+ float: none;
3363
+ background-color: transparent;
3364
+ color: var(--bs-form-input-color);
3365
+ font-size: 0.875rem;
3366
+ font-weight: 700;
3367
+ line-height: calc(2.5rem - 1px);
3368
+ transition: 0.2s ease-out;
3369
+ cursor: text;
3370
+ }
3371
+
3372
+ ::placeholder {
3373
+ color: var(--bs-form-control-placeholder-color);
3374
+ }
3375
+
3376
+ input::-webkit-datetime-edit {
3377
+ background-color: var(--bs-color-background-primary-lighter);
3378
+ color: var(--bs-form-contro-text-color);
3379
+ }
3380
+
3381
+ .form-group {
3382
+ position: relative;
3383
+ margin-bottom: var(--bs-form-group-spacing-y);
3384
+ }
3385
+ .form-group label.input-symbol-label:not(.active) {
3386
+ left: 2.25rem;
3387
+ }
3388
+ .form-group small.form-text {
3389
+ margin: 0;
3390
+ font-size: 0.875rem;
3391
+ }
3392
+ .form-group input[type=time] ~ label {
3393
+ font-size: 0.875rem;
3394
+ }
3395
+
3396
+ .form-text {
3397
+ margin: var(--bs-spacing-xxs) 0;
3398
+ color: var(--bs-color-text-secondary);
3399
+ }
3400
+
3401
+ .form-group.active .form-file-name {
3402
+ padding-bottom: 1.95rem;
3403
+ }
3404
+
3405
+ .warning-feedback {
3406
+ display: none;
3407
+ width: 100%;
3408
+ margin-top: 0.25rem;
3409
+ color: var(--bs-color-text-warning);
3410
+ font-size: 0.75rem;
3411
+ }
3412
+
3413
+ .valid-feedback,
3414
+ .invalid-feedback,
3415
+ .warning-feedback {
3416
+ margin-left: 0.5rem;
3417
+ }
3418
+
3419
+ .input-group .input-group-text .btn {
3420
+ border-radius: var(--bs-form-control-border-radius) 0 0 var(--bs-form-control-border-radius);
3421
+ }
3422
+ .input-group .input-group-append {
3423
+ margin-left: 0;
3424
+ }
3425
+ .input-group .input-group-append .btn {
3426
+ height: 100%;
3427
+ padding-top: 0;
3428
+ padding-bottom: 0;
3429
+ border-bottom: 1px solid hsl(210, 17%, 44%);
3430
+ border-radius: 0 var(--bs-form-control-border-radius) var(--bs-form-control-border-radius) 0;
3431
+ }
3432
+
3433
+ .form-check {
3434
+ position: relative;
3435
+ margin-bottom: var(--bs-spacing-s);
3436
+ padding-left: 0;
3437
+ }
3438
+ .form-check + .form-check {
3439
+ margin-top: var(--bs-spacing-s);
3440
+ }
3441
+ .form-check [type=checkbox],
3442
+ .form-check [type=radio] {
3443
+ position: absolute;
3444
+ height: 100%;
3445
+ margin-top: 0;
3446
+ margin-left: 0;
3447
+ opacity: 0;
3448
+ }
3449
+ .form-check [type=checkbox] + label,
3450
+ .form-check [type=radio] + label {
3451
+ position: relative;
3452
+ display: flex;
3453
+ align-items: center;
3454
+ padding-left: 26px;
3455
+ font-size: var(--bs-label-font-size);
3456
+ font-weight: var(--bs-font-weight-solid);
3457
+ line-height: 1;
3458
+ cursor: pointer;
3459
+ user-select: none;
3460
+ }
3461
+ @media (min-width: 576px) {
3462
+ .form-check [type=checkbox] + label,
3463
+ .form-check [type=radio] + label {
3464
+ font-size: var(--bs-label-font-size-m);
3465
+ }
3466
+ }
3467
+ .form-check input[type=checkbox] + label::after,
3468
+ .form-check input[type=checkbox] + label::before {
3469
+ position: absolute;
3470
+ left: 0;
3471
+ z-index: 1;
3472
+ content: "";
3473
+ border-width: 2px;
3474
+ border-style: solid;
3475
+ transition: all var(--bs-transition-instant) ease-out;
3476
+ }
3477
+ .form-check input[type=checkbox] + label::after {
3478
+ top: 0;
3479
+ width: 20px;
3480
+ height: 20px;
3481
+ border-radius: var(--bs-form-control-border-radius);
3482
+ }
3483
+ .form-check input[type=checkbox]:checked + label::before {
3484
+ top: 3px;
3485
+ left: 3px;
3486
+ width: 6px;
3487
+ height: 12px;
3488
+ border-width: 2px;
3489
+ border-style: solid;
3490
+ border-color: transparent var(--bs-color-border-inverse) var(--bs-color-border-inverse) transparent;
3491
+ opacity: 1;
3492
+ transform: rotate(40deg);
3493
+ transform-origin: 100% 100%;
3494
+ backface-visibility: hidden;
3495
+ }
3496
+ .form-check input[type=checkbox]:checked + label::after {
3497
+ z-index: 0;
3498
+ border-color: var(--bs-form-checked-color);
3499
+ background-color: var(--bs-form-checked-color);
3500
+ }
3501
+ .form-check input[type=checkbox]:not(:checked) + label::after {
3502
+ z-index: 0;
3503
+ border-color: var(--bs-form-checkbox-border-color);
3504
+ background-color: transparent;
3505
+ }
3506
+ .form-check input[type=checkbox]:not(:checked) + label::before {
3507
+ top: 10px;
3508
+ left: 6px;
3509
+ width: 0;
3510
+ height: 0;
3511
+ border-color: transparent;
3512
+ }
3513
+ .form-check input[type=checkbox]:disabled + label {
3514
+ opacity: 1;
3515
+ cursor: not-allowed;
3516
+ }
3517
+ .form-check input[type=checkbox]:disabled:not(:checked) + label::after {
3518
+ border-color: var(--bs-color-border-disabled);
3519
+ background-color: transparent;
3520
+ }
3521
+ .form-check input[type=checkbox]:disabled:checked + label::after {
3522
+ border-color: var(--bs-color-border-disabled);
3523
+ background-color: var(--bs-color-border-disabled);
3524
+ }
3525
+ .form-check input[type=radio] + label::after, .form-check input[type=radio] + label::before {
3526
+ position: absolute;
3527
+ top: 0;
3528
+ left: 0;
3529
+ z-index: 0;
3530
+ content: "";
3531
+ width: 20px;
3532
+ height: 20px;
3533
+ border-width: 2px;
3534
+ border-style: solid;
3535
+ border-radius: var(--bs-radius-rounded);
3536
+ transition: all var(--bs-transition-instant) ease-out;
3537
+ }
3538
+ .form-check input[type=radio]:not(:checked) + label::after, .form-check input[type=radio]:not(:checked) + label::before {
3539
+ border-color: var(var(--bs-form-checkbox-border-color));
3540
+ }
3541
+ .form-check input[type=radio]:not(:checked) + label:after {
3542
+ z-index: -1;
3543
+ transform: scale(0);
3544
+ }
3545
+ .form-check input[type=radio]:checked + label::after {
3546
+ z-index: 0;
3547
+ border-color: var(--bs-form-checked-color);
3548
+ background-color: var(--bs-form-checked-color);
3549
+ transform: scale(0.64);
3550
+ }
3551
+ .form-check input[type=radio]:checked + label::before {
3552
+ border-color: var(--bs-form-checked-color);
3553
+ }
3554
+ .form-check input[type=radio]:disabled + label {
3555
+ cursor: not-allowed;
3556
+ }
3557
+ .form-check input[type=radio]:disabled:not(:checked) + label::after, .form-check input[type=radio]:disabled:not(:checked) + label::before {
3558
+ border-color: var(--bs-color-border-disabled);
3559
+ }
3560
+ .form-check input[type=radio]:disabled:checked + label::after {
3561
+ border-color: var(--bs-color-border-disabled);
3562
+ background-color: var(--bs-color-border-disabled);
3563
+ }
3564
+ .form-check input[type=radio]:disabled:checked + label::before {
3565
+ border-color: var(--bs-color-border-disabled);
3566
+ }
3567
+ .form-check.form-check-group {
3568
+ margin-bottom: 1rem;
3569
+ padding: 0 0 1rem 0;
3570
+ box-shadow: inset 0 -1px 0 0 rgba(1, 1, 1, 0.1);
3571
+ }
3572
+ .form-check.form-check-group input[type=checkbox] + label,
3573
+ .form-check.form-check-group input[type=radio] + label {
3574
+ padding-right: 3.25rem;
3575
+ padding-left: 0;
3576
+ }
3577
+ .form-check.form-check-group input[type=checkbox] + label::after, .form-check.form-check-group input[type=checkbox] + label::before,
3578
+ .form-check.form-check-group input[type=radio] + label::after,
3579
+ .form-check.form-check-group input[type=radio] + label::before {
3580
+ right: 0;
3581
+ left: auto;
3582
+ }
3583
+ .form-check.form-check-group input[type=checkbox]:checked + label::before {
3584
+ right: 11px;
3585
+ }
3586
+ .form-check.form-check-group input[type=radio]:checked + label::before {
3587
+ right: 0;
3588
+ }
3589
+ .form-check.form-check-group .form-text {
3590
+ display: block;
3591
+ margin-bottom: 0.5rem;
3592
+ padding-right: 3.25rem;
3593
+ }
3594
+ .form-check.form-check-group input.semi-checked:not(:checked) + label::before {
3595
+ right: 4px;
3596
+ left: auto;
3597
+ }
3598
+ .form-check input.semi-checked:not(:checked) + label::before {
3599
+ top: 9px;
3600
+ left: 4px;
3601
+ width: 12px;
3602
+ height: 2px;
3603
+ border-width: 0;
3604
+ border-style: none;
3605
+ border-color: transparent;
3606
+ opacity: 1;
3607
+ background: var(--bs-color-background-inverse);
3608
+ transform: none;
3609
+ backface-visibility: hidden;
3610
+ }
3611
+ .form-check input.semi-checked:not(:checked) + label::after {
3612
+ z-index: 0;
3613
+ border-color: var(--bs-form-checked-color);
3614
+ background-color: var(--bs-form-checked-color);
3615
+ }
3616
+
3617
+ @media (prefers-reduced-motion: reduce) {
3618
+ fieldset legend,
3619
+ .form-group label,
3620
+ textarea,
3621
+ .form-check [type=checkbox],
3622
+ .form-check [type=radio],
3623
+ .form-check [type=checkbox] + label::after,
3624
+ .form-check [type=checkbox] + label::before,
3625
+ .form-check [type=radio] + label::after,
3626
+ .form-check [type=radio] + label::before,
3627
+ .toggles label input[type=checkbox] + .lever::before,
3628
+ .toggles label input[type=checkbox] + .lever::after {
3629
+ transition: none !important;
3630
+ }
3631
+ }
3632
+ .form-check [type=checkbox]:focus + label,
3633
+ .form-check [type=radio]:focus + label {
3634
+ border-color: hsl(0, 0%, 0%) !important;
3635
+ box-shadow: 0 0 0 2px var(--bs-color-border-inverse), 0 0 0 5px var(--bs-color-outline-focus) !important;
3636
+ outline: 3px solid transparent !important;
3637
+ outline-offset: 3px !important;
3638
+ }
3639
+
3640
+ .form-check [type=checkbox]:focus[data-focus-mouse=true] + label,
3641
+ .form-check [type=radio]:focus[data-focus-mouse=true] + label {
3642
+ border-color: inherit !important;
3643
+ box-shadow: none !important;
3644
+ outline: none !important;
3645
+ }
3646
+
3647
+ .form-control-plaintext {
3648
+ border: 0;
3649
+ --bs-form-control-border-color: transparent;
3650
+ --bs-form-control-border-radius: 0;
3651
+ --bs-form-control-background-color: transparent;
3652
+ --bs-form-control-spacing: 0;
3653
+ }
3654
+ .form-control-plaintext:focus {
3655
+ outline: 0;
3656
+ box-shadow: none !important;
3657
+ }
3658
+ .form-control-plaintext + label {
3659
+ cursor: text;
3660
+ }
3661
+
3662
+ .form-control {
3663
+ background-repeat: no-repeat;
3664
+ background-position: center right;
3665
+ background-size: 45px 30%;
3666
+ }
3667
+ .form-control:disabled {
3668
+ cursor: not-allowed;
3669
+ background: var(--bs-color-background-disabled);
3670
+ border: 0;
3671
+ color: var(--bs-color-text-disabled);
3672
+ }
3673
+ .was-validated .form-control:valid, .form-control.is-valid {
3674
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23008055' viewBox='0 0 192 512'%3E%3Cpath d='M435.848 83.466L172.804 346.51l-96.652-96.652c-4.686-4.686-12.284-4.686-16.971 0l-28.284 28.284c-4.686 4.686-4.686 12.284 0 16.971l133.421 133.421c4.686 4.686 12.284 4.686 16.971 0l299.813-299.813c4.686-4.686 4.686-12.284 0-16.971l-28.284-28.284c-4.686-4.686-12.284-4.686-16.97 0z'/%3E%3C/svg%3E");
3675
+ }
3676
+ .was-validated .form-control:invalid, .form-control.is-invalid {
3677
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23cc334d' viewBox='0 0 384 512'%3E%3Cpath d='M231.6 256l130.1-130.1c4.7-4.7 4.7-12.3 0-17l-22.6-22.6c-4.7-4.7-12.3-4.7-17 0L192 216.4 61.9 86.3c-4.7-4.7-12.3-4.7-17 0l-22.6 22.6c-4.7 4.7-4.7 12.3 0 17L152.4 256 22.3 386.1c-4.7 4.7-4.7 12.3 0 17l22.6 22.6c4.7 4.7 12.3 4.7 17 0L192 295.6l130.1 130.1c4.7 4.7 12.3 4.7 17 0l22.6-22.6c4.7-4.7 4.7-12.3 0-17L231.6 256z'/%3E%3C/svg%3E");
3678
+ border-color: var(--bs-color-border-danger);
3679
+ }
3680
+ .was-validated .form-control:invalid[type=number], .form-control.is-invalid[type=number] {
3681
+ background-size: 80px 30%;
3682
+ }
3683
+ .form-control.warning {
3684
+ background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%0A%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M2%2012C2%206.47715%206.47715%202%2012%202C14.6522%202%2017.1957%203.05357%2019.0711%204.92893C20.9464%206.8043%2022%209.34784%2022%2012C22%2017.5228%2017.5228%2022%2012%2022C6.47715%2022%202%2017.5228%202%2012ZM3%2012C3%2016.9706%207.02944%2021%2012%2021C16.9706%2021%2021%2016.9706%2021%2012C21%207.02944%2016.9706%203%2012%203C7.02944%203%203%207.02944%203%2012ZM11.5%2014.2V5.7H12.7V14.2H11.5ZM12.6%2018.3V16.5H11.4V18.3H12.6Z%22/%3E%0A%3C/svg%3E") no-repeat;
3685
+ border-color: var(--bs-color-border-warning);
3686
+ }
3687
+ .form-control.is-valid ~ .warning-feedback {
3688
+ display: block;
3689
+ }
3690
+
3691
+ .form-control-sm {
3692
+ --bs-form-control-spacing: var(--bs-spacing-xxs) var(--bs-spacing-3xs);
3693
+ --bs-form-control-font-size: var(--bs-label-font-size);
3694
+ }
3695
+ .form-control-sm::file-selector-button {
3696
+ padding: 0.25rem 0.5rem;
3697
+ margin: -0.25rem -0.5rem;
3698
+ margin-inline-end: 0.5rem;
3699
+ }
3700
+
3701
+ .form-control-lg {
3702
+ --bs-form-control-font-size: var(--bs-lead-font-size);
3703
+ }
3704
+ .form-control-lg::file-selector-button {
3705
+ padding: 0.5rem 1rem;
3706
+ margin: -0.5rem -1rem;
3707
+ margin-inline-end: 1rem;
3708
+ }
3709
+
3710
+ textarea.form-control {
3711
+ min-height: 2.5rem;
3712
+ border: 1px solid hsl(210, 17%, 44%);
3713
+ }
3714
+ textarea.form-control-sm {
3715
+ min-height: calc(1.5em + 0.5rem);
3716
+ }
3717
+ textarea.form-control-lg {
3718
+ min-height: calc(1.5em + 1rem);
3719
+ }
3720
+
3721
+ .form-control-color {
3722
+ width: 3rem;
3723
+ height: 2.5rem;
3724
+ padding: 0.375rem;
3725
+ }
3726
+ .form-control-color:not(:disabled):not([readonly]) {
3727
+ cursor: pointer;
3728
+ }
3729
+ .form-control-color::-moz-color-swatch {
3730
+ border: 0 !important;
3731
+ border-radius: 0;
3732
+ }
3733
+ .form-control-color::-webkit-color-swatch {
3734
+ border-radius: 0;
3735
+ }
3736
+ .form-control-color.form-control-sm {
3737
+ height: calc(1.5em + 0.5rem);
3738
+ }
3739
+ .form-control-color.form-control-lg {
3740
+ height: calc(1.5em + 1rem);
3741
+ }
3742
+
3743
+ .password-icon {
3744
+ position: absolute;
3745
+ top: calc(var(--bs-form-control-spacing) * 4.5);
3746
+ right: var(--bs-form-control-spacing);
3747
+ z-index: 10;
3748
+ padding: 0 var(--bs-spacing-xxs);
3749
+ background-color: var(--bs-form-control-background-color);
3750
+ cursor: pointer;
3751
+ }
3752
+ .password-icon .icon {
3753
+ fill: var(--bs-icon-primary);
3754
+ }
3755
+
3756
+ .password-meter {
3757
+ bottom: -12px;
3758
+ left: 0;
3759
+ width: 100%;
3760
+ max-width: 200px;
3761
+ height: 4px;
3762
+ }
3763
+ .password-meter .col-3 {
3764
+ height: 4px;
3765
+ }
3766
+
3767
+ .password-caps {
3768
+ display: none;
3769
+ }
3770
+ .password-caps.show {
3771
+ display: block;
3772
+ }
3773
+
3774
+ .input-group {
3775
+ position: relative;
3776
+ display: flex;
3777
+ flex-wrap: wrap;
3778
+ align-items: stretch;
3779
+ width: 100%;
3780
+ }
3781
+ .input-group > input {
3782
+ border-left-width: 0;
3783
+ }
3784
+ .input-group > .form-control,
3785
+ .input-group > .form-select,
3786
+ .input-group > .form-floating {
3787
+ position: relative;
3788
+ flex: 1 1 auto;
3789
+ width: 1%;
3790
+ min-width: 0;
3791
+ }
3792
+ .input-group > .form-control:focus,
3793
+ .input-group > .form-select:focus,
3794
+ .input-group > .form-floating:focus-within {
3795
+ z-index: 5;
3796
+ }
3797
+ .input-group .btn {
3798
+ position: relative;
3799
+ z-index: 2;
3800
+ }
3801
+ .input-group .btn:focus {
3802
+ z-index: 5;
3803
+ }
3804
+
3805
+ .input-group-text {
3806
+ display: flex;
3807
+ align-items: center;
3808
+ padding: var(--bs-form-control-spacing) 0 var(--bs-form-control-spacing) var(--bs-form-control-spacing);
3809
+ font-size: var(--bs-body-font-size);
3810
+ font-weight: var(--bs-font-weight-solid);
3811
+ color: var(--bs-form-inpunt-text-color);
3812
+ background-color: var(--bs-form-control-background-color);
3813
+ text-align: center;
3814
+ white-space: nowrap;
3815
+ border-top-width: 1px;
3816
+ border-left-width: 1px;
3817
+ border-right-width: 0;
3818
+ border-bottom-width: 1px;
3819
+ border-style: solid;
3820
+ border-color: var(--bs-form-control-border-color);
3821
+ border-radius: var(--bs-form-control-border-radius);
3822
+ }
3823
+ .disabled .input-group-text {
3824
+ background-color: var(--bs-color-background-disabled);
3825
+ border-color: var(--bs-color-border-disabled);
3826
+ color: var(--bs-color-text-disabled);
3827
+ }
3828
+
3829
+ .input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),
3830
+ .input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),
3831
+ .input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,
3832
+ .input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {
3833
+ border-top-right-radius: 0;
3834
+ border-bottom-right-radius: 0;
3835
+ }
3836
+ .input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),
3837
+ .input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),
3838
+ .input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,
3839
+ .input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {
3840
+ border-top-right-radius: 0;
3841
+ border-bottom-right-radius: 0;
3842
+ }
3843
+ .input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {
3844
+ margin-left: 0;
3845
+ border-top-left-radius: 0;
3846
+ border-bottom-left-radius: 0;
3847
+ }
3848
+ .input-group > .form-floating:not(:first-child) > .form-control,
3849
+ .input-group > .form-floating:not(:first-child) > .form-select {
3850
+ border-top-left-radius: 0;
3851
+ border-bottom-left-radius: 0;
3852
+ }
3853
+
3854
+ .form-feedback {
3855
+ width: 100%;
3856
+ margin-top: 0.25rem;
3857
+ font-size: 0.75rem;
3858
+ }
3859
+ .form-feedback.just-validate-error-label {
3860
+ color: var(--bs-color-text-danger);
3861
+ }
3862
+
3863
+ .input-group-text:has(~ [data-focus-mouse=true]:not(.btn)),
3864
+ [data-focus-mouse=true]:not(.btn) ~ .input-group-text,
3865
+ button:has(~ [data-focus-mouse=true]:not(.btn)),
3866
+ [data-focus-mouse=true]:not(.btn) + button {
3867
+ border-color: inherit !important;
3868
+ box-shadow: none !important;
3869
+ outline: none !important;
3870
+ }
3871
+
3872
+ .input-group-text:has(~ .is-invalid),
3873
+ .is-invalid ~ .input-group-text,
3874
+ button:has(~ .is-invalid),
3875
+ .is-invalid + button {
3876
+ border-color: var(--bs-color-border-danger) !important;
3877
+ }
3878
+
3879
+ .sr-only-justvalidate-bi {
3880
+ display: none;
3881
+ }
3882
+
3883
+ .just-validate-success-field {
3884
+ border-color: var(--bs-color-border-success) !important;
3885
+ padding-right: calc(1.5em + 0.75rem) !important;
3886
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23008055' viewBox='0 0 192 512'%3E%3Cpath d='M435.848 83.466L172.804 346.51l-96.652-96.652c-4.686-4.686-12.284-4.686-16.971 0l-28.284 28.284c-4.686 4.686-4.686 12.284 0 16.971l133.421 133.421c4.686 4.686 12.284 4.686 16.971 0l299.813-299.813c4.686-4.686 4.686-12.284 0-16.971l-28.284-28.284c-4.686-4.686-12.284-4.686-16.97 0z'/%3E%3C/svg%3E");
3887
+ }
3888
+
3889
+ .input-group-text:has(~ .just-validate-success-field),
3890
+ .just-validate-success-field ~ .input-group-text,
3891
+ button:has(~ .just-validate-success-field),
3892
+ .just-validate-success-field + button {
3893
+ border-color: var(--bs-color-border-success);
3894
+ }
3895
+
3896
+ .just-validate-success-field + .input-group-text.align-buttons,
3897
+ .is-invalid + .input-group-text.align-buttons {
3898
+ right: 30px;
3899
+ }
3900
+
3901
+ .is-invalid + .input-group-text.align-buttons {
3902
+ bottom: 22px;
3903
+ }
3904
+
3905
+ .autocomplete__wrapper .form-feedback.just-validate-error-label {
3906
+ position: absolute;
3907
+ }
3908
+
3909
+ textarea.form-control {
3910
+ background-position: top 0.3em right 0.3em !important;
3911
+ background-size: 37px 30% !important;
3912
+ }
3913
+ textarea.is-invalid {
3914
+ border-bottom-style: solid;
3915
+ border-bottom-width: 1px;
3916
+ }
3917
+ textarea.just-validate-success-field {
3918
+ border-bottom-style: solid;
3919
+ border-bottom-width: 1px;
3920
+ }
3921
+
3922
+ input[type=checkbox].just-validate-success-field + label,
3923
+ input[type=radio].just-validate-success-field + label {
3924
+ color: var(--bs-color-text-success);
3925
+ }
3926
+
3927
+ select.is-invalid {
3928
+ border: 1px solid var(--bs-color-border-danger);
3929
+ }
3930
+ select.just-validate-success-field {
3931
+ border: 1px solid var(--bs-color-border-success);
3932
+ }
3933
+
3934
+ .position-absolute {
3935
+ position: absolute !important;
3936
+ }
3937
+
3938
+ .w-100 {
3939
+ width: 100% !important;
3940
+ }
3941
+
3942
+ .m-0 {
3943
+ margin: 0 !important;
3944
+ }
3945
+
3946
+ .bg-muted {
3947
+ --bs-bg-opacity: 1;
3948
+ background-color: hsl(0, 0%, 96%) !important;
3949
+ }
3950
+
3951
+ .bg-danger {
3952
+ --bs-bg-opacity: 1;
3953
+ background-color: hsl(350, 60%, 50%) !important;
3954
+ }
3955
+
3956
+ .bg-warning {
3957
+ --bs-bg-opacity: 1;
3958
+ background-color: hsl(36, 100%, 30%) !important;
3959
+ }
3960
+
3961
+ .bg-success {
3962
+ --bs-bg-opacity: 1;
3963
+ background-color: hsl(160, 100%, 25%) !important;
3964
+ }
3965
+
3966
+ .border-start {
3967
+ border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;
3968
+ }
3969
+
3970
+ .border-start-0 {
3971
+ border-left: 0 !important;
3972
+ }
3973
+
3974
+ .border-end {
3975
+ border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;
3976
+ }
3977
+
3978
+ .border-end-0 {
3979
+ border-right: 0 !important;
3980
+ }
3981
+
3982
+ .border-white {
3983
+ --bs-border-opacity: 1;
3984
+ border-color: white !important;
3985
+ }
3986
+
3987
+ .text-primary {
3988
+ --bs-text-opacity: 1;
3989
+ color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;
3990
+ }
3991
+
3992
+ .text-secondary {
3993
+ --bs-text-opacity: 1;
3994
+ color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;
3995
+ }
3996
+
3997
+ .text-success {
3998
+ --bs-text-opacity: 1;
3999
+ color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;
4000
+ }
4001
+
4002
+ .text-info {
4003
+ --bs-text-opacity: 1;
4004
+ color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;
4005
+ }
4006
+
4007
+ .text-warning {
4008
+ --bs-text-opacity: 1;
4009
+ color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;
4010
+ }
4011
+
4012
+ .text-danger {
4013
+ --bs-text-opacity: 1;
4014
+ color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;
4015
+ }
4016
+
4017
+ .text-light {
4018
+ --bs-text-opacity: 1;
4019
+ color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;
4020
+ }
4021
+
4022
+ .text-dark {
4023
+ --bs-text-opacity: 1;
4024
+ color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;
4025
+ }
4026
+
4027
+ .text-black {
4028
+ --bs-text-opacity: 1;
4029
+ color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;
4030
+ }
4031
+
4032
+ .text-white {
4033
+ --bs-text-opacity: 1;
4034
+ color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;
4035
+ }
4036
+
4037
+ .text-100 {
4038
+ --bs-text-opacity: 1;
4039
+ color: rgba(var(--bs-100-rgb), var(--bs-text-opacity)) !important;
4040
+ }
4041
+
4042
+ .text-200 {
4043
+ --bs-text-opacity: 1;
4044
+ color: rgba(var(--bs-200-rgb), var(--bs-text-opacity)) !important;
4045
+ }
4046
+
4047
+ .text-300 {
4048
+ --bs-text-opacity: 1;
4049
+ color: rgba(var(--bs-300-rgb), var(--bs-text-opacity)) !important;
4050
+ }
4051
+
4052
+ .text-400 {
4053
+ --bs-text-opacity: 1;
4054
+ color: rgba(var(--bs-400-rgb), var(--bs-text-opacity)) !important;
4055
+ }
4056
+
4057
+ .text-500 {
4058
+ --bs-text-opacity: 1;
4059
+ color: rgba(var(--bs-500-rgb), var(--bs-text-opacity)) !important;
4060
+ }
4061
+
4062
+ .text-600 {
4063
+ --bs-text-opacity: 1;
4064
+ color: rgba(var(--bs-600-rgb), var(--bs-text-opacity)) !important;
4065
+ }
4066
+
4067
+ .text-700 {
4068
+ --bs-text-opacity: 1;
4069
+ color: rgba(var(--bs-700-rgb), var(--bs-text-opacity)) !important;
4070
+ }
4071
+
4072
+ .text-800 {
4073
+ --bs-text-opacity: 1;
4074
+ color: rgba(var(--bs-800-rgb), var(--bs-text-opacity)) !important;
4075
+ }
4076
+
4077
+ .text-900 {
4078
+ --bs-text-opacity: 1;
4079
+ color: rgba(var(--bs-900-rgb), var(--bs-text-opacity)) !important;
4080
+ }
4081
+
4082
+ .text-body {
4083
+ --bs-text-opacity: 1;
4084
+ color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;
4085
+ }
4086
+
4087
+ .text-muted {
4088
+ --bs-text-opacity: 1;
4089
+ color: hsl(210, 17%, 44%) !important;
4090
+ }
4091
+
4092
+ .text-black-50 {
4093
+ --bs-text-opacity: 1;
4094
+ color: rgba(0, 0, 0, 0.5) !important;
4095
+ }
4096
+
4097
+ .text-white-50 {
4098
+ --bs-text-opacity: 1;
4099
+ color: rgba(255, 255, 255, 0.5) !important;
4100
+ }
4101
+
4102
+ .text-reset {
4103
+ --bs-text-opacity: 1;
4104
+ color: inherit !important;
4105
+ }
4106
+
4107
+ .d-none {
4108
+ display: none !important;
4109
+ }
4110
+
4111
+ @media (min-width: 576px) {
4112
+ .m-sm-0 {
4113
+ margin: 0 !important;
4114
+ }
4115
+ .d-sm-none {
4116
+ display: none !important;
4117
+ }
4118
+ }
4119
+ @media (min-width: 768px) {
4120
+ .m-md-0 {
4121
+ margin: 0 !important;
4122
+ }
4123
+ .d-md-none {
4124
+ display: none !important;
4125
+ }
4126
+ }
4127
+ @media (min-width: 992px) {
4128
+ .m-lg-0 {
4129
+ margin: 0 !important;
4130
+ }
4131
+ .d-lg-none {
4132
+ display: none !important;
4133
+ }
4134
+ }
4135
+ @media (min-width: 1200px) {
4136
+ .m-xl-0 {
4137
+ margin: 0 !important;
4138
+ }
4139
+ .d-xl-none {
4140
+ display: none !important;
4141
+ }
4142
+ }
4143
+ @media (min-width: 1400px) {
4144
+ .m-xxl-0 {
4145
+ margin: 0 !important;
4146
+ }
4147
+ .d-xxl-none {
4148
+ display: none !important;
4149
+ }
4150
+ }
4151
+ @media print {
4152
+ .d-print-none {
4153
+ display: none !important;
4154
+ }
4155
+ }
4156
+ :host {
4157
+ display: block;
4158
+ }
4159
+
4160
+ .password-icon {
4161
+ top: calc(var(--bs-form-control-spacing) * 5);
4162
+ --bs-icon-default: var(--bs-icon-primary);
4163
+ }`;
4164
+
4165
+ registerTranslation(translation);
4166
+ let ItInput = class ItInput extends ValidityMixin(FormMixin(BaseLocalizedComponent)) {
4167
+ constructor() {
4168
+ super(...arguments);
4169
+ this.internals = this.attachInternals();
4170
+ this.slotted = false;
4171
+ this.invalid = false;
4172
+ this.customValidation = false;
4173
+ this.required = false;
4174
+ this.validationText = '';
4175
+ this.label = '';
4176
+ this.labelHidden = false;
4177
+ this.type = 'text';
4178
+ this.name = '';
4179
+ this.placeholder = '';
4180
+ this.supportText = '';
4181
+ this.disabled = false;
4182
+ this.plaintext = false;
4183
+ this.readonly = false;
4184
+ this.passwordStrengthMeter = false;
4185
+ this.suggestions = false;
4186
+ this.minlength = -1;
4187
+ this.maxlength = -1;
4188
+ this._passwordVisible = false;
4189
+ this._strengthInfos = '';
4190
+ this._score = 0;
4191
+ this._value = ''; // from validity mixin
4192
+ this._touched = false; // from validity mixin
4193
+ this.validityMessage = ''; // from validity mixin
4194
+ }
4195
+ static get formAssociated() {
4196
+ return true;
4197
+ }
4198
+ get value() {
4199
+ if (this._inputElement) {
4200
+ return this._inputElement.value;
4201
+ }
4202
+ return this._value;
4203
+ }
4204
+ set value(value) {
4205
+ const oldValue = this._value;
4206
+ this._value = value;
4207
+ this.internals.setFormValue(value); // <- Associa il valore al form
4208
+ // make sure that lit-element updates the right properties
4209
+ this.requestUpdate('value', oldValue);
4210
+ // we set the value directly on the input (when available)
4211
+ // so that programatic manipulation updates the UI correctly
4212
+ if (this._inputElement && this._inputElement.value !== value) {
4213
+ this._inputElement.value = value;
4214
+ }
4215
+ }
4216
+ // Getter pubblico per accedere all'input
4217
+ get inputElement() {
4218
+ return this.shadowRoot?.querySelector('input');
4219
+ }
4220
+ _handleFormdata(event) {
4221
+ // Add name and value to the form's submission data if it's not disabled.
4222
+ if (!this.disabled) {
4223
+ const { formData } = event;
4224
+ formData.append(this.name, this._value);
4225
+ }
4226
+ }
4227
+ _handleInput(e) {
4228
+ const input = e.target;
4229
+ this.value = input.value;
4230
+ if (this.passwordStrengthMeter) {
4231
+ this._checkPasswordStrength(input.value);
4232
+ }
4233
+ this.dispatchEvent(new CustomEvent('on-input', {
4234
+ detail: { value: input.value, el: input },
4235
+ bubbles: true,
4236
+ composed: true,
4237
+ }));
4238
+ }
4239
+ checkValidity() {
4240
+ if (!this.customValidation) {
4241
+ const inputValid = this._inputElement ? this._inputElement.checkValidity() : true; // this._inputElement.checkValidity() è la validazione del browser
4242
+ this._checkValidity({
4243
+ [VALIDATION_STATUS.INVALID]: this.$t('validityInvalid'),
4244
+ [VALIDATION_STATUS.ERROR_REQUIRED]: this.$t('validityRequired'),
4245
+ [VALIDATION_STATUS.PATTERN]: this.$t('validityPattern'),
4246
+ [VALIDATION_STATUS.MINLENGTH]: this.$t('validityMinlength'),
4247
+ [VALIDATION_STATUS.MAXLENGTH]: this.$t('validityMaxlength'),
4248
+ }, inputValid);
4249
+ }
4250
+ }
4251
+ _handleBlur() {
4252
+ super._handleBlur();
4253
+ this.checkValidity();
4254
+ }
4255
+ firstUpdated() {
4256
+ // this.addFocus(this._inputElement); //NON serve per il momento perche sfruttiamo :focus-visible. Per gli input focus-visible si attiva anche al click perchè è il browser che lo gestisce
4257
+ const iconSlot = this.shadowRoot?.querySelector('slot[name="icon"]');
4258
+ const appendSlot = this.shadowRoot?.querySelector('slot[name="append"]');
4259
+ iconSlot?.addEventListener('slotchange', () => {
4260
+ this.requestUpdate();
4261
+ });
4262
+ appendSlot?.addEventListener('slotchange', () => {
4263
+ this.requestUpdate();
4264
+ });
4265
+ }
4266
+ connectedCallback() {
4267
+ super.connectedCallback?.();
4268
+ /* così quando si scrive <it-input value="ciao"></it-input>, this.value viene impostato con 'ciao' */
4269
+ const attrValue = this.getAttribute('value');
4270
+ if (attrValue !== null) {
4271
+ this.value = attrValue;
4272
+ }
4273
+ if (this.type === 'password' && this.minlength < 0) {
4274
+ this.minlength = 8; // set default minlength for password
4275
+ }
4276
+ requestAnimationFrame(() => {
4277
+ this.dispatchEvent(new CustomEvent('input-ready', { bubbles: true, detail: { el: this.inputElement } }));
4278
+ });
4279
+ }
4280
+ // protected override update(changedProperties: Map<string | number | symbol, unknown>): void {
4281
+ // if (changedProperties.has('value') || (changedProperties.has('required') && this.required)) {
4282
+ // this.updateComplete.then(() => {
4283
+ // this.checkValidity();
4284
+ // });
4285
+ // }
4286
+ // super.update(changedProperties);
4287
+ // }
4288
+ updated(changedProperties) {
4289
+ super.updated?.(changedProperties);
4290
+ if (this.customValidation) {
4291
+ this.setCustomValidity(this.validationText);
4292
+ }
4293
+ if (this.invalid) {
4294
+ const message = this.validationText?.length > 0 ? this.validationText : (this.validityMessage ?? 'Campo non valido');
4295
+ this.internals.setValidity({ customError: this.invalid }, message);
4296
+ }
4297
+ if (this.passwordStrengthMeter && this.type !== 'password') {
4298
+ this.logger.warn("The strength-meter property is enabled, but type isn't password. Please, remove strength-meter property.");
4299
+ }
4300
+ if (this.suggestions && this.type !== 'password') {
4301
+ this.logger.warn("The suggestions property is enabled, but type isn't password. Please, remove suggestions this property.");
4302
+ }
4303
+ if (!this.label || this.label?.length === 0) {
4304
+ this.logger.warn(`Label is required to ensure accessibility. Please, define a label for <it-input name="${this.name}" ... /> . Set attribute label-hidden="true" if you don't want to show label.`);
4305
+ }
4306
+ }
4307
+ _togglePasswordVisibility() {
4308
+ this._passwordVisible = !this._passwordVisible;
4309
+ if (this._inputElement) {
4310
+ this._inputElement.type = this._passwordVisible ? 'text' : 'password';
4311
+ }
4312
+ }
4313
+ _checkPasswordStrength(value) {
4314
+ this._score = calculateScore(value, this.minlength);
4315
+ this._updateStrengthInfos();
4316
+ }
4317
+ _getPasswordConfig() {
4318
+ return {
4319
+ minimumLength: this.minlength,
4320
+ showHidePassword: this.$t('showHidePassword'),
4321
+ shortPass: this.$t('shortPass'),
4322
+ badPass: this.$t('badPass'),
4323
+ goodPass: this.$t('goodPass'),
4324
+ strongPass: this.$t('strongPass'),
4325
+ ariaLabelPasswordMeter: this.$t('ariaLabelPasswordMeter'),
4326
+ suggestionsLabel: this.$t('passwordSuggestionsLabel'),
4327
+ suggestionLength: this.$t('passwordSuggestionLength'),
4328
+ suggestionUppercase: this.$t('passwordSuggestionUppercase'),
4329
+ suggestionLowercase: this.$t('passwordSuggestionLowercase'),
4330
+ suggestionNumber: this.$t('passwordSuggestionNumber'),
4331
+ suggestionSpecial: this.$t('passwordSuggestionSpecial'),
4332
+ suggestionFollowed: this.$t('passwordSuggestionFollowed'),
4333
+ suggestionFollowedPlural: this.$t('passwordSuggestionFollowedPlural'),
4334
+ suggestionOf: this.$t('passwordSuggestionOf'),
4335
+ };
4336
+ }
4337
+ _updateStrengthInfos() {
4338
+ let text = scoreText(this._score, {
4339
+ shortPass: this.$t('shortPass'),
4340
+ badPass: this.$t('badPass'),
4341
+ goodPass: this.$t('goodPass'),
4342
+ strongPass: this.$t('strongPass'),
4343
+ });
4344
+ if (suggestionsConfig) {
4345
+ const { completedCount, totalCount } = calcCompletedSuggestions(suggestionsConfig, this.value, this._getPasswordConfig());
4346
+ const suggestionOfText = completedCount === 1 ? this.$t('passwordSuggestionFollowed') : this.$t('passwordSuggestionFollowedPlural');
4347
+ text += ` ${completedCount} ${this.$t('passwordSuggestionOf')} ${totalCount} ${suggestionOfText}.`;
4348
+ }
4349
+ this._strengthInfos = text;
4350
+ }
4351
+ _renderTogglePasswordButton() {
4352
+ // Solo se type=password
4353
+ if (this.type === 'password') {
4354
+ return html `
4355
+ <button
4356
+ type="button"
4357
+ class="password-icon btn"
4358
+ role="switch"
4359
+ aria-checked="${this._passwordVisible}"
4360
+ @click="${this._togglePasswordVisibility}"
4361
+ part="focusable"
4362
+ >
4363
+ <span class="visually-hidden">${this.$t('showHidePassword')}</span>
4364
+ <it-icon
4365
+ name="${this._passwordVisible ? 'it-password-visible' : 'it-password-invisible'}"
4366
+ size="sm"
4367
+ ></it-icon>
4368
+ </button>
4369
+ `;
4370
+ }
4371
+ return nothing;
4372
+ }
4373
+ _renderSuggestions() {
4374
+ return this.suggestions
4375
+ ? html `<div class="strength-meter-suggestions small form-text text-muted">
4376
+ <label class="visually-hidden" for="suggestions">${this.$t('passwordSuggestionsLabel')}</label>
4377
+ <div class="password-suggestions">
4378
+ ${suggestionsConfig.map((sugg) => {
4379
+ const isMet = sugg.test(this.value, this._getPasswordConfig());
4380
+ return html `
4381
+ <div class="suggestion">
4382
+ ${isMet
4383
+ ? html ` <svg
4384
+ class="icon icon-xs me-1"
4385
+ aria-label="${this.$t('passwordSuggestionMetLabel')}"
4386
+ viewBox="0 0 24 24"
4387
+ style="width: 1em; height: 1em;"
4388
+ >
4389
+ <path d="M9.6 16.9 4 11.4l.8-.7 4.8 4.8 8.5-8.4.7.7-9.2 9.1z"></path>
4390
+ </svg>`
4391
+ : nothing}
4392
+ <span>${sugg.text(this._getPasswordConfig())}</span>
4393
+ </div>
4394
+ `;
4395
+ })}
4396
+ </div>
4397
+ </div>`
4398
+ : nothing;
4399
+ }
4400
+ _renderpasswordStrengthMeter() {
4401
+ if (this.type === 'password' && this.passwordStrengthMeter) {
4402
+ const perc = this._score < 0 ? 0 : this._score;
4403
+ const color = this._value?.length === 0 ? 'muted' : scoreColor(this._score);
4404
+ return html `<div class="password-strength-meter">
4405
+ ${this._renderSuggestions()}
4406
+
4407
+ <p
4408
+ id=${`strengthMeterInfo_${this._id}`}
4409
+ class="${`strength-meter-info small form-text pt-0 text-${color}`}"
4410
+ aria-live="polite"
4411
+ >
4412
+ ${this._strengthInfos}
4413
+ </p>
4414
+ <div class="password-meter progress rounded-0 position-absolute">
4415
+ <div
4416
+ class="${this.composeClass('progress-bar', `bg-${color}`)}"
4417
+ style="width: ${perc}%"
4418
+ role="progressbar"
4419
+ aria-valuenow="${perc}"
4420
+ aria-valuemin="0"
4421
+ aria-valuemax="100"
4422
+ aria-label="${this.$t('ariaLabelPasswordMeter')}"
4423
+ >
4424
+ <div class="row position-absolute w-100 m-0">
4425
+ <div class="col-3 border-start border-end border-white"></div>
4426
+ <div class="col-3 border-start border-end border-white"></div>
4427
+ <div class="col-3 border-start border-end border-white"></div>
4428
+ <div class="col-3 border-start border-end border-white"></div>
4429
+ </div>
4430
+ </div>
4431
+ </div>
4432
+ </div>`;
4433
+ }
4434
+ return nothing;
4435
+ }
4436
+ _renderInput(supportTextId) {
4437
+ const ariaDescribedBy = this.composeClass(this.supportText?.length > 0 ? supportTextId : '', this.passwordStrengthMeter ? `strengthMeterInfo_${this._id}` : '', this._ariaAttributes['aria-describedby']?.length > 0 ? this._ariaAttributes['aria-describedby'] : '', this.validityMessage?.length > 0 ? `invalid-feedback-${this._id}` : '');
4438
+ const inputClasses = this.composeClass(this.plaintext ? 'form-control-plaintext' : 'form-control', this.size ? `form-control-${this.size}` : '', this.invalid ? 'is-invalid' : '', !this.invalid && this._touched ? 'just-validate-success-field' : '');
4439
+ let inputRender;
4440
+ if (this.type === 'textarea') {
4441
+ inputRender = html `
4442
+ <textarea
4443
+ part="textarea focusable"
4444
+ ${setAttributes(this._ariaAttributes)}
4445
+ aria-describedby=${ifDefined(ariaDescribedBy || undefined)}
4446
+ ?aria-invalid=${this.invalid}
4447
+ @input="${this._handleInput}"
4448
+ @blur=${this._handleBlur}
4449
+ @focus=${this._handleFocus}
4450
+ @click=${this._handleClick}
4451
+ @change=${this._handleChange}
4452
+ id="${this._id}"
4453
+ name="${this.name}"
4454
+ ?disabled=${this.disabled}
4455
+ ?readonly=${this.readonly}
4456
+ ?required=${this.required}
4457
+ .value="${this._value}"
4458
+ placeholder=${ifDefined(this.placeholder || undefined)}
4459
+ class="${inputClasses}"
4460
+ ></textarea>
4461
+ `;
4462
+ }
4463
+ else {
4464
+ inputRender = html `
4465
+ <input
4466
+ part="input focusable"
4467
+ ${setAttributes(this._ariaAttributes)}
4468
+ aria-describedby=${ifDefined(ariaDescribedBy || undefined)}
4469
+ ?aria-invalid=${this.invalid}
4470
+ @input="${this._handleInput}"
4471
+ @blur=${this._handleBlur}
4472
+ @focus=${this._handleFocus}
4473
+ @click=${this._handleClick}
4474
+ @change=${this._handleChange}
4475
+ type="${this.type}"
4476
+ id="${this._id}"
4477
+ name="${this.name}"
4478
+ ?disabled=${this.disabled}
4479
+ ?readonly=${this.readonly}
4480
+ ?required=${this.required}
4481
+ .value="${this._value}"
4482
+ placeholder=${ifDefined(this.placeholder || undefined)}
4483
+ class="${inputClasses}"
4484
+ />${this._renderTogglePasswordButton()}
4485
+ `;
4486
+ }
4487
+ inputRender = html `
4488
+ ${inputRender}
4489
+ <div
4490
+ role="alert"
4491
+ id="invalid-feedback-${this._id}"
4492
+ class="invalid-feedback form-feedback form-text form-feedback just-validate-error-label"
4493
+ ?hidden=${!(this.validityMessage?.length > 0)}
4494
+ >
4495
+ <span class="visually-hidden">${this.label}: </span>${this.validityMessage}
4496
+ </div>
4497
+ `;
4498
+ return inputRender;
4499
+ }
4500
+ // Render the UI as a function of component state
4501
+ render() {
4502
+ const supportTextId = `${this._id}-support-text`;
4503
+ const supportTextRender = html ` ${when(this.supportText, () => html ` <small class="form-text" id="${supportTextId}">${this.supportText}</small> `)}`;
4504
+ return html `
4505
+ <div class="form-group" part="input-wrapper">
4506
+ <label
4507
+ for="${ifDefined(this._id || undefined)}"
4508
+ part="label"
4509
+ class="${this.composeClass('active', this.labelHidden ? 'visually-hidden' : '')}"
4510
+ >${this.label}</label
4511
+ >
4512
+
4513
+ ${when(this.slotted, () => html ` <div class="input-group">
4514
+ <span class="input-group-text">
4515
+ <slot name="icon" @slotchange=${() => this.requestUpdate()}></slot
4516
+ ></span>
4517
+ ${this._renderInput(supportTextId)}
4518
+ <div class="input-group-append">
4519
+ <slot name="append" @slotchange=${() => this.requestUpdate()}></slot>
4520
+ </div>
4521
+ </div>
4522
+ ${supportTextRender} ${this._renderpasswordStrengthMeter()}`, () => html ` ${this._renderInput(supportTextId)} ${supportTextRender} ${this._renderpasswordStrengthMeter()}`)}
4523
+ </div>
4524
+ `;
4525
+ }
4526
+ };
4527
+ ItInput.styles = styles;
4528
+ __decorate([
4529
+ property(),
4530
+ __metadata("design:type", Object)
4531
+ ], ItInput.prototype, "internals", void 0);
4532
+ __decorate([
4533
+ property({ type: Boolean }),
4534
+ __metadata("design:type", Object)
4535
+ ], ItInput.prototype, "slotted", void 0);
4536
+ __decorate([
4537
+ property({ type: Boolean, reflect: true }) // from validity mixin
4538
+ ,
4539
+ __metadata("design:type", Object)
4540
+ ], ItInput.prototype, "invalid", void 0);
4541
+ __decorate([
4542
+ property({ type: Boolean, reflect: true, attribute: 'custom-validation' }) // from validity mixin
4543
+ ,
4544
+ __metadata("design:type", Object)
4545
+ ], ItInput.prototype, "customValidation", void 0);
4546
+ __decorate([
4547
+ property({ type: Boolean, reflect: true }) // from validity mixin
4548
+ ,
4549
+ __metadata("design:type", Object)
4550
+ ], ItInput.prototype, "required", void 0);
4551
+ __decorate([
4552
+ property({ attribute: 'validity-message' }),
4553
+ __metadata("design:type", String)
4554
+ ], ItInput.prototype, "validationText", void 0);
4555
+ __decorate([
4556
+ query('input'),
4557
+ __metadata("design:type", HTMLInputElement)
4558
+ ], ItInput.prototype, "_inputElement", void 0);
4559
+ __decorate([
4560
+ property({ type: String }),
4561
+ __metadata("design:type", Object)
4562
+ ], ItInput.prototype, "size", void 0);
4563
+ __decorate([
4564
+ property({ type: String }),
4565
+ __metadata("design:type", Object)
4566
+ ], ItInput.prototype, "label", void 0);
4567
+ __decorate([
4568
+ property({ type: Boolean, attribute: 'label-hidden' }),
4569
+ __metadata("design:type", Object)
4570
+ ], ItInput.prototype, "labelHidden", void 0);
4571
+ __decorate([
4572
+ property({ type: String }),
4573
+ __metadata("design:type", String)
4574
+ ], ItInput.prototype, "type", void 0);
4575
+ __decorate([
4576
+ property({ type: String }),
4577
+ __metadata("design:type", Object)
4578
+ ], ItInput.prototype, "name", void 0);
4579
+ __decorate([
4580
+ property({ type: String }),
4581
+ __metadata("design:type", Object)
4582
+ ], ItInput.prototype, "placeholder", void 0);
4583
+ __decorate([
4584
+ property({ type: String, attribute: 'support-text' }),
4585
+ __metadata("design:type", Object)
4586
+ ], ItInput.prototype, "supportText", void 0);
4587
+ __decorate([
4588
+ property({ type: Boolean }),
4589
+ __metadata("design:type", Object)
4590
+ ], ItInput.prototype, "disabled", void 0);
4591
+ __decorate([
4592
+ property({ type: Boolean }),
4593
+ __metadata("design:type", Object)
4594
+ ], ItInput.prototype, "plaintext", void 0);
4595
+ __decorate([
4596
+ property({ type: Boolean }),
4597
+ __metadata("design:type", Object)
4598
+ ], ItInput.prototype, "readonly", void 0);
4599
+ __decorate([
4600
+ property({ type: Boolean, attribute: 'strength-meter' }),
4601
+ __metadata("design:type", Object)
4602
+ ], ItInput.prototype, "passwordStrengthMeter", void 0);
4603
+ __decorate([
4604
+ property({ type: Boolean }),
4605
+ __metadata("design:type", Object)
4606
+ ], ItInput.prototype, "suggestions", void 0);
4607
+ __decorate([
4608
+ property({ type: Number }),
4609
+ __metadata("design:type", Object)
4610
+ ], ItInput.prototype, "minlength", void 0);
4611
+ __decorate([
4612
+ property({ type: Number }),
4613
+ __metadata("design:type", Object)
4614
+ ], ItInput.prototype, "maxlength", void 0);
4615
+ __decorate([
4616
+ property({ type: String }),
4617
+ __metadata("design:type", String)
4618
+ ], ItInput.prototype, "pattern", void 0);
4619
+ __decorate([
4620
+ state(),
4621
+ __metadata("design:type", Object)
4622
+ ], ItInput.prototype, "_passwordVisible", void 0);
4623
+ __decorate([
4624
+ state(),
4625
+ __metadata("design:type", Object)
4626
+ ], ItInput.prototype, "_strengthInfos", void 0);
4627
+ __decorate([
4628
+ state(),
4629
+ __metadata("design:type", Object)
4630
+ ], ItInput.prototype, "_score", void 0);
4631
+ __decorate([
4632
+ state(),
4633
+ __metadata("design:type", Object)
4634
+ ], ItInput.prototype, "_value", void 0);
4635
+ __decorate([
4636
+ state(),
4637
+ __metadata("design:type", Object)
4638
+ ], ItInput.prototype, "_touched", void 0);
4639
+ __decorate([
4640
+ property({ type: String }),
4641
+ __metadata("design:type", String)
4642
+ ], ItInput.prototype, "validityMessage", void 0);
4643
+ __decorate([
4644
+ property({ reflect: true }),
4645
+ __metadata("design:type", Object),
4646
+ __metadata("design:paramtypes", [Object])
4647
+ ], ItInput.prototype, "value", null);
4648
+ ItInput = __decorate([
4649
+ customElement('it-input')
4650
+ ], ItInput);
4651
+
4652
+ export { ItInput };
4653
+ //# sourceMappingURL=it-input.js.map