diff --git a/README.md b/README.md index 725b37e..3df0f20 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ Targets: vcs_ref Show last commit ref build_date Show build date build Build app using $(COMPOSE_FILE_DEV) + build_llama Build app using llama.local.yml up Start app using $(COMPOSE_FILE_DEV) logs Show logs using $(COMPOSE_FILE_DEV) stop Stop app using $(COMPOSE_FILE_DEV) @@ -58,7 +59,7 @@ Targets: ### Common Commands -Build the development environment: +Build the development environment without Llama support: ```bash make build compose=local.yml @@ -66,6 +67,11 @@ make build compose=local.yml make ``` +Build the development environment with Llama support: +```bash +make build compose=llama.local.yml +``` + Start the project: ```bash diff --git a/config/api_router.py b/config/api_router.py index b9c2b59..ab68c50 100644 --- a/config/api_router.py +++ b/config/api_router.py @@ -2,8 +2,9 @@ from rest_framework.routers import DefaultRouter, SimpleRouter from reference.api.v1.views import ReferenceViewSet +from markup_doc.api.v1.views import ArticleViewSet -app_name = "reference" +#app_name = "reference" if settings.DEBUG: router = DefaultRouter() @@ -11,5 +12,6 @@ router = SimpleRouter() router.register("reference", ReferenceViewSet, basename="reference") +router.register("first_block", ArticleViewSet, basename="first_block") urlpatterns = router.urls \ No newline at end of file diff --git a/config/settings/base.py b/config/settings/base.py index d8e587e..90a3338 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -24,6 +24,7 @@ ROOT_DIR = Path(__file__).resolve(strict=True).parent.parent.parent # core/ APPS_DIR = ROOT_DIR / "core" +LLAMA_MODEL_DIR = ROOT_DIR / "model_ai/download" env = environ.Env() READ_DOT_ENV_FILE = env.bool("DJANGO_READ_DOT_ENV_FILE", default=False) @@ -80,6 +81,9 @@ "tracker", "reference", "xml_manager", + "markup_doc", + "markuplib", + "model_ai" ] INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS + WAGTAIL @@ -296,5 +300,7 @@ # LLAMA LLAMA_ENABLED = env.bool("LLAMA_ENABLED", default=False) -LLAMA_MODEL_DIR = ROOT_DIR / "llama3/llama-3.2" -MODEL_LLAMA = "llama-3.2-3b-instruct-q4_k_m.gguf" \ No newline at end of file +MODEL_LLAMA = "llama-3.2-3b-instruct-q4_k_m.gguf" + +#Aumento en el límite de campos +DATA_UPLOAD_MAX_NUMBER_FIELDS = 10000 \ No newline at end of file diff --git a/config/urls.py b/config/urls.py index faf51ac..11e09b9 100644 --- a/config/urls.py +++ b/config/urls.py @@ -11,9 +11,10 @@ from core.search import views as search_views from reference import views as reference_views +from config import api_router as api_router urlpatterns = [ - path("admin/autocomplete/", include(autocomplete_admin_urls)), + #path("admin/autocomplete/", include(autocomplete_admin_urls)), path("django-admin/", admin.site.urls), path("admin/", include(wagtailadmin_urls)), path("documents/", include(wagtaildocs_urls)), @@ -21,13 +22,15 @@ # JWT path("api/v1/auth/token/", TokenObtainPairView.as_view(), name="token_obtain_pair"), path("api/v1/auth/token/refresh/", TokenRefreshView.as_view(), name="token_refresh"), - path("api/v1/mix_citation/", include("config.api_router", namespace="reference")), + path("api/v1/", include(api_router)), + #path("api/v1/mix_citation/", include("config.api_router", namespace="reference")), # URL para trocar idioma path('i18n/', include('django.conf.urls.i18n')), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # URLs com prefixo de idioma urlpatterns += i18n_patterns( + path("admin/autocomplete/", include(autocomplete_admin_urls)), path("admin/", include(wagtailadmin_urls)), path("documents/", include(wagtaildocs_urls)), path("search/", search_views.search, name="search"), diff --git a/core/choices.py b/core/choices.py new file mode 100644 index 0000000..68cc554 --- /dev/null +++ b/core/choices.py @@ -0,0 +1,227 @@ +from django.utils.translation import gettext_lazy as _ + +LANGUAGE = [ + ("aa", "Afar"), + ("af", "Afrikaans"), + ("ak", "Akan"), + ("sq", "Albanian"), + ("am", "Amharic"), + ("ar", "Arabic"), + ("an", "Aragonese"), + ("hy", "Armenian"), + ("as", "Assamese"), + ("av", "Avaric"), + ("ae", "Avestan"), + ("ay", "Aymara"), + ("az", "Azerbaijani"), + ("bm", "Bambara"), + ("ba", "Bashkir"), + ("eu", "Basque"), + ("be", "Belarusian"), + ("bn", "Bengali"), + ("bi", "Bislama"), + ("bs", "Bosnian"), + ("br", "Breton"), + ("bg", "Bulgarian"), + ("my", "Burmese"), + ("ca", "Catalan, Valencian"), + ("ch", "Chamorro"), + ("ce", "Chechen"), + ("ny", "Chichewa, Chewa, Nyanja"), + ("zh", "Chinese"), + ( + "cu", + "Church Slavic, Old Slavonic, Church Slavonic, Old Bulgarian, Old Church Slavonic", + ), + ("cv", "Chuvash"), + ("kw", "Cornish"), + ("co", "Corsican"), + ("cr", "Cree"), + ("hr", "Croatian"), + ("cs", "Czech"), + ("da", "Danish"), + ("dv", "Divehi, Dhivehi, Maldivian"), + ("nl", "Dutch, Flemish"), + ("dz", "Dzongkha"), + ("en", "English"), + ("eo", "Esperanto"), + ("et", "Estonian"), + ("ee", "Ewe"), + ("fo", "Faroese"), + ("fj", "Fijian"), + ("fi", "Finnish"), + ("fr", "French"), + ("fy", "Western Frisian"), + ("ff", "Fulah"), + ("gd", "Gaelic, Scottish Gaelic"), + ("gl", "Galician"), + ("lg", "Ganda"), + ("ka", "Georgian"), + ("de", "German"), + ("el", "Greek, Modern (1453–)"), + ("kl", "Kalaallisut, Greenlandic"), + ("gn", "Guarani"), + ("gu", "Gujarati"), + ("ht", "Haitian, Haitian Creole"), + ("ha", "Hausa"), + ("he", "Hebrew"), + ("hz", "Herero"), + ("hi", "Hindi"), + ("ho", "Hiri Motu"), + ("hu", "Hungarian"), + ("is", "Icelandic"), + ("io", "Ido"), + ("ig", "Igbo"), + ("id", "Indonesian"), + ("ia", "Interlingua (International Auxiliary Language Association)"), + ("ie", "Interlingue, Occidental"), + ("iu", "Inuktitut"), + ("ik", "Inupiaq"), + ("ga", "Irish"), + ("it", "Italian"), + ("ja", "Japanese"), + ("jv", "Javanese"), + ("kn", "Kannada"), + ("kr", "Kanuri"), + ("ks", "Kashmiri"), + ("kk", "Kazakh"), + ("km", "Central Khmer"), + ("ki", "Kikuyu, Gikuyu"), + ("rw", "Kinyarwanda"), + ("ky", "Kirghiz, Kyrgyz"), + ("kv", "Komi"), + ("kg", "Kongo"), + ("ko", "Korean"), + ("kj", "Kuanyama, Kwanyama"), + ("ku", "Kurdish"), + ("lo", "Lao"), + ("la", "Latin"), + ("lv", "Latvian"), + ("li", "Limburgan, Limburger, Limburgish"), + ("ln", "Lingala"), + ("lt", "Lithuanian"), + ("lu", "Luba-Katanga"), + ("lb", "Luxembourgish, Letzeburgesch"), + ("mk", "Macedonian"), + ("mg", "Malagasy"), + ("ms", "Malay"), + ("ml", "Malayalam"), + ("mt", "Maltese"), + ("gv", "Manx"), + ("mi", "Maori"), + ("mr", "Marathi"), + ("mh", "Marshallese"), + ("mn", "Mongolian"), + ("na", "Nauru"), + ("nv", "Navajo, Navaho"), + ("nd", "North Ndebele"), + ("nr", "South Ndebele"), + ("ng", "Ndonga"), + ("ne", "Nepali"), + ("no", "Norwegian"), + ("nb", "Norwegian Bokmål"), + ("nn", "Norwegian Nynorsk"), + ("ii", "Sichuan Yi, Nuosu"), + ("oc", "Occitan"), + ("oj", "Ojibwa"), + ("or", "Oriya"), + ("om", "Oromo"), + ("os", "Ossetian, Ossetic"), + ("pi", "Pali"), + ("ps", "Pashto, Pushto"), + ("fa", "Persian"), + ("pl", "Polish"), + ("pt", "Português"), + ("pa", "Punjabi, Panjabi"), + ("qu", "Quechua"), + ("ro", "Romanian, Moldavian, Moldovan"), + ("rm", "Romansh"), + ("rn", "Rundi"), + ("ru", "Russian"), + ("se", "Northern Sami"), + ("sm", "Samoan"), + ("sg", "Sango"), + ("sa", "Sanskrit"), + ("sc", "Sardinian"), + ("sr", "Serbian"), + ("sn", "Shona"), + ("sd", "Sindhi"), + ("si", "Sinhala, Sinhalese"), + ("sk", "Slovak"), + ("sl", "Slovenian"), + ("so", "Somali"), + ("st", "Southern Sotho"), + ("es", "Español"), + ("su", "Sundanese"), + ("sw", "Swahili"), + ("ss", "Swati"), + ("sv", "Swedish"), + ("tl", "Tagalog"), + ("ty", "Tahitian"), + ("tg", "Tajik"), + ("ta", "Tamil"), + ("tt", "Tatar"), + ("te", "Telugu"), + ("th", "Thai"), + ("bo", "Tibetan"), + ("ti", "Tigrinya"), + ("to", "Tonga (Tonga Islands)"), + ("ts", "Tsonga"), + ("tn", "Tswana"), + ("tr", "Turkish"), + ("tk", "Turkmen"), + ("tw", "Twi"), + ("ug", "Uighur, Uyghur"), + ("uk", "Ukrainian"), + ("ur", "Urdu"), + ("uz", "Uzbek"), + ("ve", "Venda"), + ("vi", "Vietnamese"), + ("vo", "Volapük"), + ("wa", "Walloon"), + ("cy", "Welsh"), + ("wo", "Wolof"), + ("xh", "Xhosa"), + ("yi", "Yiddish"), + ("yo", "Yoruba"), + ("za", "Zhuang, Chuang"), + ("zu", "Zulu"), +] + +ROLE = [ + ("Editor-Chefe", _("Editor-Chefe")), + ("Editor(es) Executivo", _("Editor(es) Executivo")), + ("Editor(es) Associados ou de Seção", _("Editor(es) Associados ou de Seção")), + ("Equipe Técnica", _("Equipe Técnica")), +] + +MONTHS = [ + ("01", _("January")), + ("02", _("February")), + ("03", _("March")), + ("04", _("April")), + ("05", _("May")), + ("06", _("June")), + ("07", _("July")), + ("08", _("August")), + ("09", _("September")), + ("10", _("October")), + ("11", _("November")), + ("12", _("December")), +] + +# https://creativecommons.org/share-your-work/cclicenses/ +# There are six different license types, listed from most to least permissive here: +LICENSE_TYPES = [ + ("by", _("by")), + ("by-sa", _("by-sa")), + ("by-nc", _("by-nc")), + ("by-nc-sa", _("by-nc-sa")), + ("by-nd", _("by-nd")), + ("by-nc-nd", _("by-nc-nd")), +] + +GENDER_CHOICES = [ + ('M', _('Male')), + ('F', _('Female')), +] \ No newline at end of file diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py new file mode 100644 index 0000000..f698d0f --- /dev/null +++ b/core/migrations/0001_initial.py @@ -0,0 +1,107 @@ +# Generated by Django 5.0.8 on 2025-09-21 23:13 + +import django.db.models.deletion +import wagtail.fields +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='FlexibleDate', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('year', models.IntegerField(blank=True, null=True, verbose_name='Year')), + ('month', models.IntegerField(blank=True, null=True, verbose_name='Month')), + ('day', models.IntegerField(blank=True, null=True, verbose_name='Day')), + ], + ), + migrations.CreateModel( + name='Language', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', models.DateTimeField(auto_now_add=True, verbose_name='Creation date')), + ('updated', models.DateTimeField(auto_now=True, verbose_name='Last update date')), + ('name', models.TextField(blank=True, null=True, verbose_name='Language Name')), + ('code2', models.TextField(blank=True, null=True, verbose_name='Language code 2')), + ('creator', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_creator', to=settings.AUTH_USER_MODEL, verbose_name='Creator')), + ('updated_by', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_last_mod_user', to=settings.AUTH_USER_MODEL, verbose_name='Updater')), + ], + options={ + 'verbose_name': 'Language', + 'verbose_name_plural': 'Languages', + }, + ), + migrations.CreateModel( + name='License', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', models.DateTimeField(auto_now_add=True, verbose_name='Creation date')), + ('updated', models.DateTimeField(auto_now=True, verbose_name='Last update date')), + ('license_type', models.CharField(blank=True, max_length=255, null=True)), + ('creator', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_creator', to=settings.AUTH_USER_MODEL, verbose_name='Creator')), + ('updated_by', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_last_mod_user', to=settings.AUTH_USER_MODEL, verbose_name='Updater')), + ], + options={ + 'verbose_name': 'License', + 'verbose_name_plural': 'Licenses', + }, + ), + migrations.CreateModel( + name='LicenseStatement', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', models.DateTimeField(auto_now_add=True, verbose_name='Creation date')), + ('updated', models.DateTimeField(auto_now=True, verbose_name='Last update date')), + ('url', models.CharField(blank=True, max_length=255, null=True)), + ('license_p', wagtail.fields.RichTextField(blank=True, null=True)), + ('creator', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_creator', to=settings.AUTH_USER_MODEL, verbose_name='Creator')), + ('language', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.language')), + ('license', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.license')), + ('updated_by', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_last_mod_user', to=settings.AUTH_USER_MODEL, verbose_name='Updater')), + ], + options={ + 'verbose_name': 'License', + 'verbose_name_plural': 'Licenses', + }, + ), + migrations.CreateModel( + name='Gender', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', models.DateTimeField(auto_now_add=True, verbose_name='Creation date')), + ('updated', models.DateTimeField(auto_now=True, verbose_name='Last update date')), + ('code', models.CharField(blank=True, max_length=5, null=True, verbose_name='Code')), + ('gender', models.CharField(blank=True, max_length=50, null=True, verbose_name='Sex')), + ('creator', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_creator', to=settings.AUTH_USER_MODEL, verbose_name='Creator')), + ('updated_by', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_last_mod_user', to=settings.AUTH_USER_MODEL, verbose_name='Updater')), + ], + options={ + 'unique_together': {('code', 'gender')}, + }, + ), + migrations.AddIndex( + model_name='license', + index=models.Index(fields=['license_type'], name='core_licens_license_5d1905_idx'), + ), + migrations.AlterUniqueTogether( + name='license', + unique_together={('license_type',)}, + ), + migrations.AddIndex( + model_name='licensestatement', + index=models.Index(fields=['url'], name='core_licens_url_ec8078_idx'), + ), + migrations.AlterUniqueTogether( + name='licensestatement', + unique_together={('url', 'license_p', 'language')}, + ), + ] diff --git a/core/models.py b/core/models.py index d6e90be..bc46070 100644 --- a/core/models.py +++ b/core/models.py @@ -1,6 +1,15 @@ -from django.db import models +import os +from django.db import models, IntegrityError +from django.db.models import Case, When, Value, IntegerField from django.contrib.auth import get_user_model from django.utils.translation import gettext_lazy as _ +from wagtail.admin.panels import FieldPanel +from wagtail.fields import RichTextField +from wagtail.search import index +from wagtailautocomplete.edit_handlers import AutocompletePanel + +from . import choices +from .utils.utils import language_iso User = get_user_model() @@ -43,4 +52,487 @@ class CommonControlField(models.Model): ) class Meta: - abstract = True \ No newline at end of file + abstract = True + + +class Gender(CommonControlField): + """ + Class of gender + + Fields: + sex: physical state of being either male, female, or intersex + """ + + code = models.CharField(_("Code"), max_length=5, null=True, blank=True) + + gender = models.CharField(_("Sex"), max_length=50, null=True, blank=True) + + autocomplete_search_filter = "code" + + def autocomplete_label(self): + return str(self) + + panels = [ + FieldPanel("code"), + FieldPanel("gender"), + ] + + + class Meta: + unique_together = [("code", "gender")] + + + def __unicode__(self): + return self.gender or self.code + + def __str__(self): + return self.gender or self.code + + @classmethod + def load(cls, user): + for item in choices.GENDER_CHOICES: + code, value = item + cls.create_or_update(user, code=code, gender=value) + + @classmethod + def _get(cls, code=None, gender=None): + try: + return cls.objects.get(code=code, gender=gender) + except cls.MultipleObjectsReturned: + return cls.objects.filter(code=code, gender=gender).first() + + @classmethod + def _create(cls, user, code=None, gender=None): + try: + obj = cls() + obj.gender = gender + obj.code = code + obj.creator = user + obj.save() + return obj + except IntegrityError: + return cls._get(code, gender) + + @classmethod + def create_or_update(cls, user, code, gender=None): + try: + return cls._get(code, gender) + except cls.DoesNotExist: + return cls._create(user, code, gender) + + +class Language(CommonControlField): + """ + Represent the list of states + + Fields: + name + code2 + """ + + name = models.TextField(_("Language Name"), blank=True, null=True) + code2 = models.TextField(_("Language code 2"), blank=True, null=True) + + autocomplete_search_field = "name" + + def autocomplete_label(self): + return str(self) + + class Meta: + verbose_name = _("Language") + verbose_name_plural = _("Languages") + + def __unicode__(self): + if self.name or self.code2: + return f"{self.name} | {self.code2}" + return "None" + + def __str__(self): + if self.name or self.code2: + return f"{self.name} | {self.code2}" + return "None" + + @classmethod + def load(cls, user): + if cls.objects.count() == 0: + for k, v in choices.LANGUAGE: + cls.get_or_create(name=v, code2=k, creator=user) + + @classmethod + def get_or_create(cls, name=None, code2=None, creator=None): + code2 = language_iso(code2) + if code2: + try: + return cls.objects.get(code2=code2) + except cls.DoesNotExist: + pass + + if name: + try: + return cls.objects.get(name=name) + except cls.DoesNotExist: + pass + + if name or code2: + obj = Language() + obj.name = name + obj.code2 = code2 or "" + obj.creator = creator + obj.save() + return obj + + +class TextWithLang(models.Model): + text = models.TextField(_("Text"), null=True, blank=True) + language = models.ForeignKey( + Language, + on_delete=models.SET_NULL, + verbose_name=_("Language"), + null=True, + blank=True, + ) + + panels = [FieldPanel("text"), AutocompletePanel("language")] + + class Meta: + abstract = True + + +class TextLanguageMixin(models.Model): + rich_text = RichTextField(_("Rich Text"), null=True, blank=True) + plain_text = models.TextField(_("Plain Text"), null=True, blank=True) + language = models.ForeignKey( + Language, + on_delete=models.SET_NULL, + verbose_name=_("Language"), + null=True, + blank=True, + ) + + panels = [ + AutocompletePanel("language"), + FieldPanel("rich_text"), + FieldPanel("plain_text"), + ] + + class Meta: + abstract = True + + +class LanguageFallbackManager(models.Manager): + def get_object_in_preferred_language(self, language): + mission = self.filter(language=language) + if mission: + return mission + + language_order = ['pt', 'es', 'en'] + langs = self.all().values_list("language", flat=True) + languages = Language.objects.filter(id__in=langs) + + # Define a ordem baseado na lista language_order + order = [When(code2=lang, then=Value(i)) for i, lang in enumerate(language_order)] + ordered_languages = languages.annotate( + language_order=Case(*order, default=Value(len(language_order)), output_field=IntegerField()) + ).order_by('language_order') + + + for lang in ordered_languages: + mission = self.filter(language=lang) + if mission: + return mission + return None + + +class RichTextWithLanguage(models.Model): + rich_text = RichTextField(_("Rich Text"), null=True, blank=True) + language = models.ForeignKey( + Language, + on_delete=models.SET_NULL, + verbose_name=_("Language"), + null=True, + blank=True, + ) + + panels = [ + AutocompletePanel("language"), + FieldPanel("rich_text"), + ] + + objects = LanguageFallbackManager() + + class Meta: + abstract = True + + +class FlexibleDate(models.Model): + year = models.IntegerField(_("Year"), null=True, blank=True) + month = models.IntegerField(_("Month"), null=True, blank=True) + day = models.IntegerField(_("Day"), null=True, blank=True) + + def __unicode__(self): + return "%s/%s/%s" % (self.year, self.month, self.day) + + def __str__(self): + return "%s/%s/%s" % (self.year, self.month, self.day) + + @property + def data(self): + return dict( + date__year=self.year, + date__month=self.month, + date__day=self.day, + ) + + +class License(CommonControlField): + license_type = models.CharField(max_length=255, null=True, blank=True) + + autocomplete_search_field = "license_type" + + def autocomplete_label(self): + return str(self) + + panels = [ + FieldPanel("license_type"), + ] + + class Meta: + unique_together = [("license_type", )] + verbose_name = _("License") + verbose_name_plural = _("Licenses") + indexes = [ + models.Index( + fields=[ + "license_type", + ] + ), + ] + + def __unicode__(self): + return self.license_type or "" + + def __str__(self): + return self.license_type or "" + + @classmethod + def load(cls, user): + for license_type, v in choices.LICENSE_TYPES: + cls.create_or_update(user, license_type) + + @classmethod + def get( + cls, + license_type, + ): + if not license_type: + raise ValueError("License.get requires license_type parameters") + filters = dict( + license_type__iexact=license_type + ) + try: + return cls.objects.get(**filters) + except cls.MultipleObjectsReturned: + return cls.objects.filter(**filters).first() + + @classmethod + def create( + cls, + user, + license_type=None, + ): + try: + obj = cls() + obj.creator = user + obj.license_type = license_type or obj.license_type + obj.save() + return obj + except IntegrityError: + return cls.get(license_type=license_type) + + @classmethod + def create_or_update( + cls, + user, + license_type=None, + ): + try: + return cls.get(license_type=license_type) + except cls.DoesNotExist: + return cls.create(user, license_type) + + +class LicenseStatement(CommonControlField): + url = models.CharField(max_length=255, null=True, blank=True) + license_p = RichTextField(null=True, blank=True) + language = models.ForeignKey( + Language, on_delete=models.SET_NULL, null=True, blank=True + ) + license = models.ForeignKey( + License, on_delete=models.SET_NULL, null=True, blank=True) + + panels = [ + FieldPanel("url"), + FieldPanel("license_p"), + AutocompletePanel("language"), + AutocompletePanel("license"), + ] + + class Meta: + unique_together = [("url", "license_p", "language")] + verbose_name = _("License") + verbose_name_plural = _("Licenses") + indexes = [ + models.Index( + fields=[ + "url", + ] + ), + ] + + def __unicode__(self): + return self.url or "" + + def __str__(self): + return self.url or "" + + @classmethod + def get( + cls, + url=None, + license_p=None, + language=None, + ): + if not url and not license_p: + raise ValueError("LicenseStatement.get requires url or license_p") + try: + return cls.objects.get( + url__iexact=url, license_p__iexact=license_p, language=language) + except cls.MultipleObjectsReturned: + return cls.objects.filter( + url__iexact=url, license_p__iexact=license_p, language=language + ).first() + + @classmethod + def create( + cls, + user, + url=None, + license_p=None, + language=None, + license=None, + ): + if not url and not license_p: + raise ValueError("LicenseStatement.create requires url or license_p") + try: + obj = cls() + obj.creator = user + obj.url = url or obj.url + obj.license_p = license_p or obj.license_p + obj.language = language or obj.language + # instance of License + obj.license = license or obj.license + obj.save() + return obj + except IntegrityError: + return cls.get(url, license_p, language) + + @classmethod + def create_or_update( + cls, + user, + url=None, + license_p=None, + language=None, + license=None, + ): + try: + data = dict( + url=url, + license_p=license_p, + language=language and language.code2 + ) + try: + obj = cls.get(url, license_p, language) + obj.updated_by = user + obj.url = url or obj.url + obj.license_p = license_p or obj.license_p + obj.language = language or obj.language + # instance of License + obj.license = license or obj.license + obj.save() + return obj + except cls.DoesNotExist: + return cls.create(user, url, license_p, language, license) + except Exception as e: + raise ValueError(f"Unable to create or update LicenseStatement for {data}: {type(e)} {e}") + + @staticmethod + def parse_url(url): + license_type = None + license_version = None + license_language = None + + url = url.lower() + url_parts = url.split("/") + if not url_parts: + return {} + + license_types = dict(choices.LICENSE_TYPES) + for lic_type in license_types.keys(): + if lic_type in url_parts: + license_type = lic_type + + try: + version = url.split(f"/{license_type}/") + version = version[-1].split("/")[0] + isdigit = False + for c in version.split("."): + if c.isdigit(): + isdigit = True + continue + else: + isdigit = False + break + if isdigit: + license_version = version + except (AttributeError, TypeError, ValueError): + pass + break + + return dict( + license_type=license_type, + license_version=license_version, + license_language=license_language, + ) + + +class FileWithLang(models.Model): + file = models.ForeignKey( + "wagtaildocs.Document", + null=True, + blank=True, + on_delete=models.SET_NULL, + verbose_name=_("File"), + help_text='', + related_name="+", + ) + + language = models.ForeignKey( + Language, + on_delete=models.SET_NULL, + verbose_name=_("Language"), + null=True, + blank=True, + ) + + panels = [ + AutocompletePanel("language"), + FieldPanel("file"), + ] + + @property + def filename(self): + return os.path.basename(self.file.name) + + class Meta: + abstract = True diff --git a/core/utils/utils.py b/core/utils/utils.py new file mode 100644 index 0000000..0397338 --- /dev/null +++ b/core/utils/utils.py @@ -0,0 +1,95 @@ +import logging +import re + +import requests +from langcodes import standardize_tag, tag_is_valid +from tenacity import ( + retry, + retry_if_exception_type, + stop_after_attempt, + wait_exponential, +) +from urllib3.util import Retry +from django.contrib.auth import get_user_model + + +logger = logging.getLogger(__name__) +User = get_user_model() + + +def language_iso(code): + code = re.split(r"-|_", code)[0] if code else "" + if tag_is_valid(code): + return standardize_tag(code) + return "" + + +class RetryableError(Exception): + """Recoverable error without having to modify the data state on the client + side, e.g. timeouts, errors from network partitioning, etc. + """ + + +class NonRetryableError(Exception): + """Recoverable error without having to modify the data state on the client + side, e.g. timeouts, errors from network partitioning, etc. + """ + + +@retry( + retry=retry_if_exception_type(RetryableError), + wait=wait_exponential(multiplier=1, min=1, max=5), + stop=stop_after_attempt(5), +) +def fetch_data(url, headers=None, json=False, timeout=2, verify=True): + """ + Get the resource with HTTP + Retry: Wait 2^x * 1 second between each retry starting with 4 seconds, + then up to 10 seconds, then 10 seconds afterwards + Args: + url: URL address + headers: HTTP headers + json: True|False + verify: Verify the SSL. + Returns: + Return a requests.response object. + Except: + Raise a RetryableError to retry. + """ + + try: + logger.info("Fetching the URL: %s" % url) + response = requests.get(url, headers=headers, timeout=timeout, verify=verify) + except (requests.exceptions.ConnectionError, requests.exceptions.Timeout) as exc: + logger.error("Erro fetching the content: %s, retry..., erro: %s" % (url, exc)) + raise RetryableError(exc) from exc + except ( + requests.exceptions.InvalidSchema, + requests.exceptions.MissingSchema, + requests.exceptions.InvalidURL, + ) as exc: + raise NonRetryableError(exc) from exc + try: + response.raise_for_status() + except requests.HTTPError as exc: + if 400 <= exc.response.status_code < 500: + raise NonRetryableError(exc) from exc + elif 500 <= exc.response.status_code < 600: + logger.error( + "Erro fetching the content: %s, retry..., erro: %s" % (url, exc) + ) + raise RetryableError(exc) from exc + else: + raise + + return response.content if not json else response.json() + + +def _get_user(request, username=None, user_id=None): + try: + return User.objects.get(pk=request.user_id) + except AttributeError: + if user_id: + return User.objects.get(pk=user_id) + if username: + return User.objects.get(username=username) \ No newline at end of file diff --git a/core_settings/migrations/0001_initial.py b/core_settings/migrations/0001_initial.py index dca718a..3fde275 100644 --- a/core_settings/migrations/0001_initial.py +++ b/core_settings/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.1.3 on 2024-11-19 03:30 +# Generated by Django 5.0.8 on 2025-09-26 16:41 import django.db.models.deletion import wagtail.fields @@ -29,8 +29,8 @@ class Migration(migrations.Migration): ('site_logo', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image')), ], options={ - 'verbose_name': 'Configuração do site', - 'verbose_name_plural': 'Configuração do site', + 'verbose_name': 'Site configuration', + 'verbose_name_plural': 'Site configuration', }, ), ] diff --git a/llama3/generic_llama.py b/llama3/generic_llama.py deleted file mode 100644 index e25d4f9..0000000 --- a/llama3/generic_llama.py +++ /dev/null @@ -1,58 +0,0 @@ -from config.settings.base import LLAMA_ENABLED, LLAMA_MODEL_DIR, MODEL_LLAMA - -import os - - -class LlamaDisabledError(Exception): - pass - -class LlamaModelNotFoundError(FileNotFoundError): - pass - -class LlamaNotInstalledError(ImportError): - pass - -class GenericLlama: - # Singleton pattern to cache the LLaMA model instance - _cached_llm = None - - def __init__(self, messages, response_format, max_tokens=4000, temperature=0.5, top_p=0.5): - self.messages = messages - self.response_format = response_format - self.max_tokens = max_tokens - self.temperature = temperature - self.top_p = top_p - - if not LLAMA_ENABLED: - raise LlamaDisabledError("LLaMA is disabled in settings.") - - if GenericLlama._cached_llm is None: - try: - from llama_cpp import Llama - except ImportError as e: - raise LlamaNotInstalledError("The 'llama-cpp-python' package is not installed. Please use the llama-activated Docker image (Dockerfile.llama).") from e - - model_path = os.path.join(LLAMA_MODEL_DIR, MODEL_LLAMA) - if not os.path.isfile(model_path): - raise LlamaModelNotFoundError(f"LLaMA model file not found at {model_path}. Please ensure the model is downloaded and the path is correct.") - - try: - GenericLlama._cached_llm = Llama(model_path=model_path, n_ctx=max_tokens) - except Exception as e: - raise RuntimeError(f"Failed to initialize LLaMA model: {e}") from e - - self.llm = GenericLlama._cached_llm - - def run(self, user_input): - input = self.messages.copy() - input.append({ - 'role': 'user', - 'content': user_input - }) - return self.llm.create_chat_completion( - messages=input, - response_format=self.response_format, - max_tokens=self.max_tokens, - temperature=self.temperature, - top_p=self.top_p - ) diff --git a/llama3/__init__.py b/markup_doc/__init__.py similarity index 100% rename from llama3/__init__.py rename to markup_doc/__init__.py diff --git a/markup_doc/admin.py b/markup_doc/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/markup_doc/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/markup_doc/api/__init__.py b/markup_doc/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/markup_doc/api/v1/__init__.py b/markup_doc/api/v1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/markup_doc/api/v1/serializers.py b/markup_doc/api/v1/serializers.py new file mode 100644 index 0000000..c099f0e --- /dev/null +++ b/markup_doc/api/v1/serializers.py @@ -0,0 +1,7 @@ +from rest_framework import serializers +from markup_doc.models import ArticleDocx + +class ArticleDocxSerializer(serializers.ModelSerializer): + class Meta: + model = ArticleDocx + fields = "__all__" \ No newline at end of file diff --git a/markup_doc/api/v1/views.py b/markup_doc/api/v1/views.py new file mode 100755 index 0000000..66938bf --- /dev/null +++ b/markup_doc/api/v1/views.py @@ -0,0 +1,43 @@ +from django.shortcuts import render +from django.http import JsonResponse +from rest_framework.permissions import IsAuthenticated +from rest_framework.viewsets import GenericViewSet +from rest_framework.mixins import CreateModelMixin +from rest_framework.response import Response +from markup_doc.api.v1.serializers import ArticleDocxSerializer +from markup_doc.marker import mark_article + +import json + +# Create your views here. + +class ArticleViewSet( + GenericViewSet, # generic view functionality + CreateModelMixin, # handles POSTs +): + serializer_class = ArticleDocxSerializer + permission_classes = [IsAuthenticated] + http_method_names = [ + "post", + ] + + def create(self, request, *args, **kwargs): + return self.api_article(request) + + def api_article(self, request): + try: + data = json.loads(request.body) + post_text = data.get('text') # Obtiene el parámetro + post_metadata = data.get('metadata') # Obtiene el parámetro + + resp_data = mark_article(post_text, post_metadata) + + response_data = { + 'message': resp_data, + } + except json.JSONDecodeError: + response_data = { + 'error': 'Error processing' + } + + return JsonResponse(response_data) \ No newline at end of file diff --git a/markup_doc/apps.py b/markup_doc/apps.py new file mode 100644 index 0000000..87efcb1 --- /dev/null +++ b/markup_doc/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class MarkupDocConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "markup_doc" diff --git a/markup_doc/choices.py b/markup_doc/choices.py new file mode 100644 index 0000000..d113911 --- /dev/null +++ b/markup_doc/choices.py @@ -0,0 +1,121 @@ +front_labels = [ + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('

', '

'), + ('', ''), + ('', ''), + ('', ''), + ('', '
'), + ('', ''), + ('', '<title>'), + ('<trans-abstract>', '<trans-abstract>'), + ('<trans-title>', '<trans-title>'), + ('<translate-front>', '<translate-front>'), + ('<translate-body>', '<translate-body>'), + ('<disp-formula>', '<disp-formula>'), + ('<inline-formula>', '<inline-formula>'), + ('<formula>', '<formula>'), + +] + +order_labels = { + '<article-id>':{ + 'pos' : 1, + 'next' : '<subject>' + }, + '<subject>':{ + 'pos' : 2, + 'next' : '<article-title>' + }, + '<article-title>':{ + 'pos' : 3, + 'next' : '<trans-title>', + 'lan' : True + }, + '<trans-title>':{ + 'size' : 14, + 'bold' : True, + 'lan' : True, + 'next' : '<contrib>' + }, + '<contrib>':{ + 'reset' : True, + 'size' : 12, + 'next' : '<aff>' + }, + '<aff>':{ + 'reset' : True, + 'size' : 12, + }, + '<abstract>':{ + 'size' : 12, + 'bold' : True, + 'lan' : True, + 'next' : '<p>' + }, + '<p>':{ + 'size' : 12, + 'next' : '<p>', + 'repeat' : True + }, + '<trans-abstract>':{ + 'size' : 12, + 'bold' : True, + 'lan' : True, + 'next' : '<p>' + }, + '<kwd-group>':{ + 'size' : 12, + 'regex' : r'(?i)(palabra.*clave.*:|keyword.*:)', + }, + '<history>':{ + 'size' : 12, + 'regex' : r'\d{2}/\d{2}/\d{4}', + }, + '<corresp>':{ + 'size' : 12, + 'regex' : r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' + }, + '<sec>':{ + 'size' : 16, + 'bold' : True, + 'next' : None + }, + '<sub-sec>':{ + 'size' : 12, + 'italic' : True, + 'next' : None + }, + '<sub-sec-2>':{ + 'size' : 14, + 'bold' : True, + 'next' : None + }, +} + +order_labels_body = { + '<sec>':{ + 'size' : 16, + 'bold' : True, + }, + '<sub-sec>':{ + 'size' : 12, + 'italic' : True, + }, + '<p>':{ + 'size' : 12, + }, +} \ No newline at end of file diff --git a/markup_doc/forms.py b/markup_doc/forms.py new file mode 100644 index 0000000..e8abe2e --- /dev/null +++ b/markup_doc/forms.py @@ -0,0 +1 @@ +from wagtail.admin.forms.models import WagtailAdminModelForm diff --git a/markup_doc/issue_proc.py b/markup_doc/issue_proc.py new file mode 100644 index 0000000..c291b08 --- /dev/null +++ b/markup_doc/issue_proc.py @@ -0,0 +1,150 @@ +from lxml import etree +from urllib.parse import urlparse +from packtools.sps.pid_provider.xml_sps_lib import get_xml_with_pre +import os + + +class Asset: + def __init__(self, wagtail_image): + self.file = wagtail_image.file # tiene .path (ruta absoluta) + self.original_href = wagtail_image.file.name # nombre en el storage + + +class XmlIssueProc: + def __init__(self, registro): + self.registro = registro + self.xmltree = self._extract_xml_tree() + self.journal_proc = self._extract_journal_proc() + self.issue_folder = self._extract_issue_folder() + + def _extract_xml_tree(self): + return get_xml_with_pre(self.registro.text_xml).xmltree + + def _extract_journal_proc(self): + acron = self.xmltree.findtext(".//journal-id[@journal-id-type='publisher-id']") + return type("JournalProc", (), {"acron": acron or "journal"}) + + def _get_issn(self): + issn = self.xmltree.findtext(".//issn[@pub-type='epub']") + if not issn: + issn = self.xmltree.findtext(".//issn[@pub-type='ppub']") + return issn + + def _extract_issue_folder(self, lot=None): + issn = self._get_issn() or "" + acron = self.journal_proc.acron or "" + vol = (self.xmltree.findtext(".//volume") or "").strip() + issue = (self.xmltree.findtext(".//issue") or "").strip().lower() + year = self.xmltree.findtext(".//pub-date[@date-type='collection']/year") + + parts = [p for p in [issn, acron] if p] + + # volumen + if vol: + parts.append(f"v{vol}") + + # issue puede ser número, suplemento o especial + if issue: + if issue.startswith("suppl"): + # suplemento de volumen → v10s2 + parts[-1] = parts[-1] + f"s{issue.replace('suppl','').strip()}" + elif "suppl" in issue: + # suplemento de número → v10n4s2 + tokens = issue.split() + num = tokens[0] + sup = tokens[1:] + parts.append(f"n{num}") + sup_num = "".join(sup).replace("suppl", "").strip() + parts[-1] = parts[-1] + f"s{sup_num}" + elif issue.startswith("spe"): + # número especial → v10nspe1 + parts[-1] = parts[-1] + f"nspe{issue.replace('spe','').strip()}" + else: + # número normal → v4n10 + parts.append(f"n{issue}") + + # carpeta de publicación continua con lote + if lot and year: + lot_str = f"{lot:02d}{year[-2:]}" + parts.append(lot_str) + + return "-".join(parts) + + def build_pkg_name(self, lang=None): + issn = self._get_issn() or "" + acron = self.journal_proc.acron or "" + + # base igual que issue_folder, pero sin el ISSN y acron aún + vol = (self.xmltree.findtext(".//volume") or "").strip() + issue = (self.xmltree.findtext(".//issue") or "").strip().lower() + + parts = [issn, acron] + + if vol: + parts.append(vol) + + if issue: + if issue.startswith("suppl"): + # suplemento de volumen + parts[-1] = parts[-1] + f"s{issue.replace('suppl','').strip()}" + elif "suppl" in issue: + # suplemento de número + tokens = issue.split() + num = tokens[0] + sup = tokens[1:] + parts.append(num) + sup_num = "".join(sup).replace("suppl", "").strip() + parts[-1] = parts[-1] + f"s{sup_num}" + elif issue.startswith("spe"): + # número especial + parts[-1] = parts[-1] + f"nspe{issue.replace('spe','').strip()}" + else: + # número normal + parts.append(issue) + + # ARTID + elocation = self.xmltree.findtext(".//elocation-id") + fpage = self.xmltree.findtext(".//fpage") + pid = self.xmltree.findtext(".//article-id[@specific-use='scielo-v2']") + + if elocation: + parts.append(elocation.strip()) + elif fpage: + parts.append(fpage.strip()) + elif pid: + parts.append(pid.strip()) + else: + parts.append("na") # fallback si no hay nada + + # idioma solo si es traducción + if lang: + parts.append(lang) + + return "-".join(parts) + + def find_asset(self, basename, name): + """ + Devuelve las imágenes del StreamField como Asset + si coinciden con el nombre puesto en el XML (original_filename) + o con el nombre real en storage. + """ + assets = [] + if self.registro.content_body: + for block in self.registro.content_body: + if block.block_type == "image" and block.value: + wagtail_image = block.value.get("image") + if not wagtail_image: + continue + + # Nombre real en storage (ej: foto1.abcd1234.jpg) + storage_basename = os.path.basename(wagtail_image.file.name) + + # Nombre usado en el XML (ej: foto1.jpg) + original_url = wagtail_image.get_rendition("original").url + xml_basename = os.path.basename(urlparse(original_url).path) + + # Si coincide con cualquiera → se acepta + if basename in (storage_basename, xml_basename): + assets.append(Asset(wagtail_image)) + + return assets diff --git a/markup_doc/labeling_utils.py b/markup_doc/labeling_utils.py new file mode 100644 index 0000000..c29d7bd --- /dev/null +++ b/markup_doc/labeling_utils.py @@ -0,0 +1,1137 @@ +# Standard library imports +import json +import re +import requests + +from lxml import etree + +# Third-party imports +from django.contrib.auth import get_user_model +from rest_framework_simplejwt.tokens import RefreshToken + +# Local application imports +from model_ai.models import LlamaModel +from .choices import order_labels + + +MODEL_NAME_GEMINI = 'GEMINI' +MODEL_NAME_LLAMA = 'LLAMA' + + +def get_llm_model_name(): + # FIXME: This function always fetches the first LlamaModel instance. + model_ai = LlamaModel.objects.first() + + if model_ai.api_key_gemini: + return MODEL_NAME_GEMINI + else: + return MODEL_NAME_LLAMA + + +def split_in_three(obj_reference, chunk_size=15): + if not obj_reference: + return [] + return [obj_reference[i:i + chunk_size] + for i in range(0, len(obj_reference), chunk_size)] + + +def extract_label_and_title(text): + """ + Extrae el Label (Figura/Figure/Tabla/Table/Tabela + número) y el Title (resto del texto limpio). + Ignora mayúsculas y minúsculas y limpia puntuación/espacios entre el número y el título. + """ + # Acepta Figura/Figure y Tabla/Table/Tabela + pattern = r'\b(Imagen|Imágen|Image|Imagem|Figura|Figure|Tabla|Table|Tabela)\s+(\d+)\b' + match = re.search(pattern, text, re.IGNORECASE) + + if match: + word = match.group(1).capitalize() # Normaliza capitalización + number = match.group(2) + label = f"{word} {number}" + + # Texto después del número + rest = text[match.end():] + + # Quita puntuación/espacios iniciales (.,;: guiones, etc.) + rest_clean = re.sub(r'^[\s\.,;:–—-]+', '', rest) + + return {"label": label, "title": rest_clean.strip()} + else: + return {"label": None, "title": text.strip()} + + +def create_special_content_object(item, stream_data_body, counts): + """Create objects for special content types (image, table, list, compound)""" + obj = {} + + if item.get('type') == 'image': + obj = {} + counts['numfig'] += 1 + obj['type'] = 'image' + obj['value'] = { + 'figid' : f"f{counts['numfig']}", + 'label' : '<fig>', + 'image' : item.get('image') + } + + #Obitiene el elemento aterior + try: + prev_element = stream_data_body[-1] + label_title = extract_label_and_title(prev_element['value']['paragraph']) + obj['value']['figlabel'] = label_title['label'] + obj['value']['title'] = label_title['title'] + stream_data_body.pop(-1) + except: + pass + + elif item.get('type') == 'table': + obj = {} + counts['numtab'] += 1 + obj['type'] = 'table' + obj['value'] = { + 'tabid' : f"t{counts['numtab']}", + 'label' : '<table>', + 'content' : item.get('table') + } + + #Obitiene el elemento aterior + try: + prev_element = stream_data_body[-1] + label_title = extract_label_and_title(prev_element['value']['paragraph']) + obj['value']['tablabel'] = label_title['label'] + obj['value']['title'] = label_title['title'] + stream_data_body.pop(-1) + except: + #No hay elemento anterior + pass + + elif item.get('type') == 'list': + obj = {} + obj['type'] = 'paragraph' + obj['value'] = { + 'label' : '<list>', + 'paragraph' : item.get('list') + } + + elif item.get('type') == 'compound': + obj = {} + counts['numeq'] += 1 + obj['type'] = 'compound_paragraph' + obj['value'] = { + 'eid' : f"e{counts['numeq']}", + #'label' : '<formula>', + 'content': item.get('text') + } + text_count = sum( + 1 for c in obj['value']['content'] + if c['type'] == 'text' + ) + + if text_count > 1: + obj['value']['label'] = '<inline-formula>' + return obj, counts + + if text_count == 0: + obj['value']['label'] = '<disp-formula>' + return obj, counts + + text_value = next( + item['value'] + for item in obj['value']['content'] + if item['type'] == 'text' + ) + text = is_number_parenthesis(text_value) + if text: + obj['value']['label'] = '<disp-formula>' + next( + item + for item in obj['value']['content'] + if item['type'] == 'text' + )['value'] = text + else: + obj['value']['label'] = '<inline-formula>' + + return obj, counts + + +User = get_user_model() + + +def process_reference(num_ref, obj, user_id): + payload = { + 'reference': obj['value']['paragraph'] + } + + # FIXME: This function always fetches the first LlamaModel instance. + model = LlamaModel.objects.first() + + if model.name_file: + user = User.objects.get(pk=user_id) + refresh = RefreshToken.for_user(user) + access_token = refresh.access_token + + #url = "http://172.17.0.1:8400/api/v1/mix_citation/reference/" + #url = "http://172.17.0.1:8009/api/v1/mix_citation/reference/" + + # FIXME: Hardcoded URL + url = "http://django:8000/api/v1/reference/" + + headers = { + 'Authorization': f'Bearer {access_token}', + 'Content-Type': 'application/json' + } + + response = requests.post(url, json=payload, headers=headers) + + if response.status_code == 200: + response_json = response.json() + message_str = response_json['message'] + + json_str = message_str.replace('reference: ', '', 1) + + ref_json = json.loads(json_str) + + #ref_json = json.loads(response) + obj['type'] = 'ref_paragraph' + obj['value'] = { + 'paragraph': ref_json.get('full_text', None), + 'label': '<p>', + 'reftype': ref_json.get('reftype', None), + 'refid': 'B'+str(num_ref), + 'date': ref_json.get('date', None), + 'title': ref_json.get('title', None), + 'chapter': ref_json.get('chapter', None), + 'edition': ref_json.get('edition', None), + 'source': ref_json.get('source', None), + 'vol': ref_json.get('vol', None), + 'issue': ref_json.get('num', None), + 'pages': ref_json.get('pages', None), + 'lpage': ref_json.get('lpage', None), + 'fpage': ref_json.get('fpage', None), + 'doi': ref_json.get('doi', None), + 'access_id': ref_json.get('access_id', None), + 'degree': ref_json.get('degree', None), + 'organization': ref_json.get('organization', None), + 'location': ref_json.get('location', None), + 'org_location': ref_json.get('org_location', None), + 'num_pages': ref_json.get('num_pages', None), + 'uri': ref_json.get('uri', None), + 'version': ref_json.get('version', None), + 'access_date': ref_json.get('access_date', None), + 'authors': [] + } + authors = ref_json.get('authors', []) + for author in authors: + obj_auth = {} + obj_auth['type'] = 'Author' + obj_auth['value'] = {} + obj_auth['value']['surname'] = author.get('surname', None) + obj_auth['value']['given_names'] = author.get('fname', None) + obj['value']['authors'].append(obj_auth) + + return obj + + +def process_references(num_refs, references): + arr_references = [] + + for i, ref_json in enumerate(references): + obj = {} + obj['type'] = 'ref_paragraph' + obj['value'] = { + 'paragraph': ref_json.get('full_text', None), + 'label': '<p>', + 'reftype': ref_json.get('reftype', None), + 'refid': 'B'+str(num_refs[i] if i < len(num_refs) else ''), + 'date': ref_json.get('date', None), + 'title': ref_json.get('title', None), + 'chapter': ref_json.get('chapter', None), + 'edition': ref_json.get('edition', None), + 'source': ref_json.get('source', None), + 'vol': ref_json.get('vol', None), + 'issue': ref_json.get('num', None), + 'pages': ref_json.get('pages', None), + 'lpage': ref_json.get('lpage', None), + 'fpage': ref_json.get('fpage', None), + 'doi': ref_json.get('doi', None), + 'access_id': ref_json.get('access_id', None), + 'degree': ref_json.get('degree', None), + 'organization': ref_json.get('organization', None), + 'location': ref_json.get('location', None), + 'org_location': ref_json.get('org_location', None), + 'num_pages': ref_json.get('num_pages', None), + 'uri': ref_json.get('uri', None), + 'version': ref_json.get('version', None), + 'access_date': ref_json.get('access_date', None), + 'authors': [] + } + authors = ref_json.get('authors', []) + for author in authors: + obj_auth = {} + obj_auth['type'] = 'Author' + obj_auth['value'] = {} + obj_auth['value']['surname'] = author.get('surname', None) + obj_auth['value']['given_names'] = author.get('fname', None) + obj['value']['authors'].append(obj_auth) + arr_references.append(obj) + + return arr_references + + +def get_data_first_block(text, metadata, user_id): + payload = { + 'text': text, + 'metadata': metadata + } + + model = LlamaModel.objects.first() + + if model.name_file: + user = User.objects.get(pk=user_id) + refresh = RefreshToken.for_user(user) + access_token = refresh.access_token + + # FIXME: Hardcoded URL + url = "http://django:8000/api/v1/first_block/" + + headers = { + 'Authorization': f'Bearer {access_token}', + 'Content-Type': 'application/json' + } + + response = requests.post(url, json=payload, headers=headers) + + if response.status_code == 200: + response_json = response.json() + message_str = response_json['message'] + + resp_json = json.loads(message_str) + + return resp_json + +def match_by_regex(text, order_labels): + return next( + (key_obj for key_obj in order_labels.items() + if "regex" in key_obj[1] and re.search(key_obj[1]["regex"], text)), + None + ) + + +def match_by_style_and_size(item, order_labels, style='bold'): + return next( + (key_obj for key_obj in order_labels.items() + if "size" in key_obj[1] and style in key_obj[1] and + key_obj[1]["size"] == item.get('font_size') and + key_obj[1][style] == item.get(style)), + None + ) + + +def match_next_label(item, label_next, order_labels): + return next( + (key_obj for key_obj in order_labels.items() + if "size" in key_obj[1] and key_obj[1]["size"] == item.get('font_size') + and key_obj[0] == label_next), + None + ) + + +def match_paragraph(item, order_labels): + return next( + (key_obj for key_obj in order_labels.items() + if "size" in key_obj[1] and + "next" in key_obj[1] and + key_obj[1]["size"] == item.get('font_size') and + key_obj[1]["next"] == "<p>"), + None + ) + + +def match_section(item, sections): + return {'label': '<sec>', 'body': True} if ( + item.get('font_size') == sections[0].get('size') and + item.get('bold') == sections[0].get('bold') and + item.get('text', '').isupper() == sections[0].get('isupper') + ) else None + + +def match_subsection(item, sections): + return {'label': '<sub-sec>', 'body': True} if ( + item.get('font_size') == sections[1].get('size') and + item.get('bold') == sections[1].get('bold') and + item.get('text', '').isupper() == sections[1].get('isupper') + ) else None + + +def extract_keywords(text): + # Quitar punto final si existe + text = text.strip() + if text.endswith('.'): + text = text[:-1].strip() + + # Ver si contiene una etiqueta con dos puntos + match = re.match(r'(?i)\s*(.+?)\s*:\s*(.+)', text) + + if match: + label = match.group(1).strip() + content = match.group(2).strip() + else: + label = None + content = text + + # Separar por punto y coma o coma + keywords = re.split(r'\s*[;,]\s*', content) + clean_keywords = [p.strip() for p in keywords if p.strip()] + clean_keywords = ", ".join(keywords) + + return {"title": label, "keywords": clean_keywords} + + +def extract_subsection(text): + # Quitar punto final si existe + text = text.strip() + + # Ver si contiene una etiqueta con dos puntos + match = re.match(r'(?i)\s*(.+?)\s*:\s*(.+)', text) + + if match: + label = match.group(1).strip() + content = match.group(2).strip() + else: + label = None + content = text + + return {"title": label, "content": content} + + +def create_labeled_object2(i, item, state, sections): + obj = {} + result = None + + if match_section(item, sections): + result = match_section(item, sections) + state['label'] = result.get('label') + state['body'] = result.get('body') + + if match_subsection(item, sections): + result = match_subsection(item, sections) + state['label'] = result.get('label') + state['body'] = result.get('body') + + if state.get('body') and re.search(r"^(refer)", item.get('text').lower()) and match_section(item, sections): + state['label'] = '<sec>' + state['body'] = False + state['back'] = True + obj['type'] = 'paragraph' + obj['value'] = { + 'label': state['label'], + 'paragraph': item.get('text') + } + + if not result: + result = {'label': '<p>', 'body': state['body'], 'back': state['back']} + state['label'] = result.get('label') + state['body'] = result.get('body') + state['back'] = result.get('back') + + if result: + pass + else: + if state.get('label_next'): + if state.get('repeat'): + result = match_by_regex(item.get('text'), order_labels) + if result: + state['label'] = result[0] + else: + result = match_by_style_and_size(item, order_labels, style='bold') + if result: + state['label'] = result[0] + state['repeat'] = None + state['reset'] = None + state['label_next'] = result[1].get("next") + state['body'] = result[1].get("size") == 16 + if state['body'] and re.search(r"^(refer)", item.get('text').lower()): + state['body'] = False + state['back'] = True + if not result: + result = match_next_label(item, state['label_next'], order_labels) + if result: + state['label'] = result[0] + state['label_next_reset'] = result[1].get("next") + state['reset'] = result[1].get("reset", False) + state['repeat'] = result[1].get("repeat", False) + else: + result = match_by_style_and_size(item, order_labels, style='bold') + if result: + state['label'] = result[0] + state['label_next'] = result[1].get("next") + if state.get('body') and re.search(r"^(refer)", item.get('text').lower()): + state['body'] = False + state['back'] = True + else: + result = match_by_style_and_size(item, order_labels, style='italic') + if result: + state['label'] = re.sub(r"-\d+", "", result[0]) + state['label_next'] = result[1].get("next") + else: + result = match_by_regex(item.get('text'), order_labels) + if result: + state['label'] = result[0] + else: + result = match_paragraph(item, order_labels) + if result: + state['label'] = result[0] + + if result: + if state['label'] in ['<abstract>']: + order_labels.pop(state['label'], None) + + #label_info = result[1] + #obj['type'] = 'paragraph_with_language' if label_info.get("lan") else 'paragraph' + obj['type'] = 'paragraph' + + obj['value'] = { + 'label': state['label'], + 'paragraph': item.get('text') + } + + if state['label'] == '<contrib>': + obj['type'] = 'author_paragraph' + elif state['label'] == '<aff>': + obj['type'] = 'aff_paragraph' + + if re.search(r"^(translation)", item.get('text').lower()): + state['label'] = '<translate-fron>' + state['body'] = False + state['back'] = False + obj['type'] = 'paragraph_with_language' + obj['value'] = { + 'label': state['label'], + 'paragraph': item.get('text') + } + + return obj, result, state + + +def buscar_refid_por_surname_y_date(data_back, surname_buscado, date_buscado): + """ + Busca un bloque RefParagraphBlock que contenga un author con el surname especificado + y que coincida con la fecha dada. Retorna el refid si encuentra una coincidencia. + """ + for bloque in data_back: # Reemplaza 'contenido' con el nombre de tu StreamField + if bloque['type'] == 'ref_paragraph': # o el nombre que usaste en el StreamField + data = bloque['value'] + + # Verificar la fecha + if str(data.get('date')) != str(date_buscado[:4]): + continue + + # Revisar autores + authors = data.get('authors', []) + + surname_buscados = surname_buscado.split(',') + + for surname_buscado in surname_buscados: + if ' y ' in surname_buscado or ' and ' in surname_buscado or ' e ' in surname_buscado or ' & ' in surname_buscado: + if ' y ' in surname_buscado: + surname1 = surname_buscado.split(' y ')[0].strip().lower() + surname2 = surname_buscado.split(' y ')[1].strip().lower() + + if ' and ' in surname_buscado: + surname1 = surname_buscado.split(' and ')[0].strip().lower() + surname2 = surname_buscado.split(' and ')[1].strip().lower() + + if ' & ' in surname_buscado: + surname1 = surname_buscado.split(' & ')[0].strip().lower() + surname2 = surname_buscado.split(' & ')[1].strip().lower() + + if ' e ' in surname_buscado: + surname1 = surname_buscado.split(' e ')[0].strip().lower() + surname2 = surname_buscado.split(' e ')[1].strip().lower() + + for author_bloque in authors: + if author_bloque['type'] == 'Author': + author_data = author_bloque['value'] + if surname1 in (author_data.get('surname') or '').lower() + ' ' + (author_data.get('given_names') or '').lower(): + for author_bloque2 in authors: + if author_bloque2['type'] == 'Author': + author_data = author_bloque2['value'] + if surname2 in (author_data.get('surname') or '').lower() + ' ' + (author_data.get('given_names') or '').lower(): + return data.get('refid') + + for author_bloque in authors: + if author_bloque['type'] == 'Author': + author_data = author_bloque['value'] + + if surname_buscado.strip().lower() in (author_data.get('surname') or '').lower() + ' ' + (author_data.get('given_names') or '').lower(): + return data.get('refid') + + if surname_buscado.strip().lower() in (data.get('paragraph') or '').lower(): + return data.get('refid') + + return None + + +def extract_citation_apa(texto, data_back): + """ + Extrae citas en formato APA dentro de un texto y devuelve: + - la cita completa, + - el primer autor, + - el año. + Acepta múltiples espacios entre palabras y símbolos. + """ + + # Preposiciones comunes en apellidos + preposiciones = r'(?:de|del|la|los|las|da|do|dos|das|van|von)' + # Apellido compuesto o con preposición (incluye caracteres portugueses: ç, ã, õ, etc.) + apellido = rf'[A-ZÁÉÍÓÚÑÇÃÕÂÊÎÔÛ][a-záéíóúñçãõâêîôû]+(?:[-‐\s]+(?:{preposiciones})?\s*[A-ZÁÉÍÓÚÑÇÃÕÂÊÎÔÛ]?[a-záéíóúñçãõâêîôû]+)*' + resultados = [] + + # 1. Buscar todas las citas dentro de paréntesis + for paren in re.finditer(r'\(([^)]+)\)', texto): + contenido_completo = paren.group(1) + + # Si hay punto y coma, dividir las citas + if ';' in contenido_completo: + partes = [parte for parte in contenido_completo.split(';')] + else: + partes = [contenido_completo] + + # Variable para rastrear el contexto de autores dentro del mismo paréntesis + autores_en_parentesis = [] + + for i, parte in enumerate(partes): + parte = parte # Agregar strip aquí para limpiar espacios + if not parte: + continue + + # Caso especial: solo año (para citas como "2017" después de "2014;") + # MEJORADO: Solo aplicar si hay citas previas EN EL MISMO PARÉNTESIS + if re.match(r'^\s*\d{4}[a-z]?\s*$', parte): + # Solo usar el último autor si hay autores en el mismo paréntesis + if autores_en_parentesis: + ultimo_autor = autores_en_parentesis[-1] + refid = buscar_refid_por_surname_y_date(data_back, ultimo_autor, parte) + resultados.append({ + "cita": parte, + "autor": ultimo_autor, + "anio": parte, + "refid": refid + }) + # Si no hay autores previos en el paréntesis, ignorar (posible error) + continue + + # Patrones para diferentes tipos de citas + cita_encontrada = False + + # Patrón 1: Múltiples autores con & y coma antes del año + # Ejemplo: "Porta, Lopez-De-Silanes, & Shleifer, 1999" + pattern1 = rf'(?P<autores>{apellido}(?:\s*,\s*{apellido})*\s*,?\s*&\s*{apellido})\s*,\s*(?P<anio>\d{{4}}[a-z]?)' + match = re.search(pattern1, parte) + if match: + autores_completos = match.group("autores") + anio = match.group("anio") + primer_autor = re.split(r'\s*,\s*', autores_completos)[0] + autores_en_parentesis.append(primer_autor) + refid = buscar_refid_por_surname_y_date(data_back, primer_autor, anio) + resultados.append({ + "cita": parte, + "autor": primer_autor, + "anio": anio, + "refid": refid + }) + cita_encontrada = True + + # Patrón 2: Múltiples autores con & SIN coma antes del año + # Ejemplo: "Silva, Peixoto, & Tizziotti 2021" + if not cita_encontrada: + pattern2 = rf'(?P<autores>{apellido}(?:\s*,\s*{apellido})*\s*,?\s*&\s*{apellido})\s+(?P<anio>\d{{4}}[a-z]?)' + match = re.search(pattern2, parte) + if match: + autores_completos = match.group("autores") + anio = match.group("anio") + primer_autor = re.split(r'\s*,\s*', autores_completos)[0] + autores_en_parentesis.append(primer_autor) + refid = buscar_refid_por_surname_y_date(data_back, primer_autor, anio) + resultados.append({ + "cita": parte, + "autor": primer_autor, + "anio": anio, + "refid": refid + }) + cita_encontrada = True + + # Patrón 3: Dos autores con & (simple) + # Ejemplo: "Crisóstomo & Brandão, 2019" + if not cita_encontrada: + pattern3 = rf'(?P<autor1>{apellido})\s*&\s*(?P<autor2>{apellido})\s*,\s*(?P<anio>\d{{4}}[a-z]?)' + match = re.search(pattern3, parte) + if match: + primer_autor = match.group("autor1") + anio = match.group("anio") + autores_en_parentesis.append(primer_autor) + refid = buscar_refid_por_surname_y_date(data_back, primer_autor, anio) + resultados.append({ + "cita": parte, + "autor": primer_autor, + "anio": anio, + "refid": refid + }) + cita_encontrada = True + + # Patrón 4: Autor con "et al." con coma + # Ejemplo: "Brandão et al., 2019" + if not cita_encontrada: + pattern4 = rf'(?P<autor>{apellido})\s+et\s+al\s*\.?\s*,\s*(?P<anio>\d{{4}}[a-z]?)' + match = re.search(pattern4, parte) + if match: + autor = match.group("autor") + anio = match.group("anio") + autores_en_parentesis.append(autor) + refid = buscar_refid_por_surname_y_date(data_back, autor, anio) + resultados.append({ + "cita": parte, + "autor": autor, + "anio": anio, + "refid": refid + }) + cita_encontrada = True + + # Patrón 5: Autor con "et al." sin coma + # Ejemplo: "Brandão et al. 2019" + if not cita_encontrada: + pattern5 = rf'(?P<autor>{apellido})\s+et\s+al\s*\.?\s+(?P<anio>\d{{4}}[a-z]?)' + match = re.search(pattern5, parte) + if match: + autor = match.group("autor") + anio = match.group("anio") + autores_en_parentesis.append(autor) + refid = buscar_refid_por_surname_y_date(data_back, autor, anio) + resultados.append({ + "cita": parte, + "autor": autor, + "anio": anio, + "refid": refid + }) + cita_encontrada = True + + # Patrón 6: Múltiples autores solo con comas (sin &) + # Ejemplo: "Adam, Tene, Mucci, Beck, 2020" o "Correia, Amaral, Louvet, 2014a" + if not cita_encontrada: + pattern6 = rf'(?P<autores>{apellido}(?:\s*,\s*{apellido}){{2,}})\s*,\s*(?P<anio>\d{{4}}[a-z]?)' + match = re.search(pattern6, parte) + if match: + autores_completos = match.group("autores") + anio = match.group("anio") + primer_autor = re.split(r'\s*,\s*', autores_completos)[0] + autores_en_parentesis.append(primer_autor) + refid = buscar_refid_por_surname_y_date(data_back, primer_autor, anio) + resultados.append({ + "cita": parte, + "autor": primer_autor, + "anio": anio, + "refid": refid + }) + cita_encontrada = True + + # Patrón 7: Autor simple con coma + # Ejemplo: "Smith, 2020" + if not cita_encontrada: + pattern7 = rf'(?P<autor>{apellido})\s*,\s*(?P<anio>\d{{4}}[a-z]?)' + match = re.search(pattern7, parte) + if match: + autor = match.group("autor") + anio = match.group("anio") + autores_en_parentesis.append(autor) + refid = buscar_refid_por_surname_y_date(data_back, autor, anio) + resultados.append({ + "cita": parte, + "autor": autor, + "anio": anio, + "refid": refid + }) + cita_encontrada = True + + # 2. Citas fuera del paréntesis: Nombre (2000) o Nombre et al. (2000) + # MEJORADO: Filtrar citas que están precedidas por preposiciones + + # Lista de preposiciones a evitar + preposiciones_evitar = ['de', 'del', 'la', 'los', 'las', 'da', 'do', 'dos', 'das', 'van', 'von'] + + # Patrón para citas con múltiples años: Autor (2018, 2019) + patron_multiples_años = rf'(?P<autor>{apellido})(?:\s*[-‐]\s*{apellido})*(?:\s+et\s+al\s*\.?|\s+(?:y|and|&)\s+{apellido})?\s*\(\s*(?P<años>\d{{4}}[a-z]?(?:\s*,\s*\d{{4}}[a-z]?)+)\s*\)' + + for match in re.finditer(patron_multiples_años, texto): + # Verificar que no haya preposición antes de la cita + inicio_match = match.start() + texto_anterior = texto[:inicio_match].split() + + # Si hay palabras antes y la última es una preposición, saltarse esta cita + if texto_anterior and texto_anterior[-1].lower() in preposiciones_evitar: + continue + + autor = match.group("autor") + años_str = match.group("años") + # Separar los años y crear una cita para cada uno + años = [año for año in años_str.split(',')] + + for año in años: + refid = buscar_refid_por_surname_y_date(data_back, autor, año) + resultados.append({ + "cita": f"{autor} et al. ({año})" if "et al" in match.group(0) else f"{autor} ({año})", + "autor": autor, + "anio": año, + "refid": refid + }) + + # Patrón para citas simples: Nombre (2000) o Nombre et al. (2000) + patron_afuera = rf'(?P<autor>{apellido})(?:\s*[-‐]\s*{apellido})*(?:\s+et\s+al\s*\.?|\s+(?:y|and|&)\s+{apellido})?\s*\(\s*(?P<anio>\d{{4}}[a-z]?)\s*\)' + + for match in re.finditer(patron_afuera, texto): + # Verificar que no haya preposición antes de la cita + inicio_match = match.start() + texto_anterior = texto[:inicio_match].split() + + # Si hay palabras antes y la última es una preposición, saltarse esta cita + if texto_anterior and texto_anterior[-1].lower() in preposiciones_evitar: + continue + + autor = match.group("autor") + anio = match.group("anio") + + # Verificar que no sea parte de una cita con múltiples años ya procesada + cita_completa = match.group(0) + es_multiple = False + for resultado in resultados: + if resultado["autor"] == autor and resultado["anio"] == anio and "," in cita_completa: + es_multiple = True + break + + if not es_multiple: + refid = buscar_refid_por_surname_y_date(data_back, autor, anio) + resultados.append({ + "cita": cita_completa, + "autor": autor, + "anio": anio, + "refid": refid + }) + + return resultados + + +def clean_labels(texto): + """ + Elimina todas las etiquetas XML del texto. + """ + # Patrón para encontrar etiquetas XML (apertura y cierre) + patron_etiquetas = r'<[^>]+>' + texto_limpio = re.sub(patron_etiquetas, '', texto) + + # Limpiar espacios múltiples que puedan haber quedado + #texto_limpio = re.sub(r'\s+', ' ', texto_limpio) + + return texto_limpio#.strip() + + +def map_text(texto): + """ + Crea un mapa de TODO lo que esté etiquetado en el texto. + Clave: texto sin etiquetas, Valor: texto con etiquetas + """ + mapa = {} + + # Buscar TODAS las etiquetas y su contenido + patron = r'<[^>]+>.*?</[^>]+>|<[^/>]+/>' + matches = re.findall(patron, texto, re.DOTALL) + + for match in matches: + contenido_limpio = clean_labels(match)#.strip() + if contenido_limpio: # Solo si hay contenido real + mapa[contenido_limpio] = match#.strip() + + return mapa + + +def search_position(texto, substring): + """ + Encuentra todas las posiciones donde aparece un substring en el texto. + """ + posiciones = [] + inicio = 0 + while True: + pos = texto.find(substring, inicio) + if pos == -1: + break + posiciones.append((pos, pos + len(substring))) + inicio = pos + 1 + return posiciones + + +def extract_labels(texto_original, texto_limpio, pos_inicio, pos_fin): + """ + Extrae un fragmento específico del texto original basado en posiciones del texto limpio. + """ + contador_chars_limpios = 0 + resultado = "" + dentro_del_rango = False + + i = 0 + while i < len(texto_original) and contador_chars_limpios <= pos_fin: + char = texto_original[i] + + if char == '<': + # Encontrar el final de la etiqueta + fin_etiqueta = texto_original.find('>', i) + if fin_etiqueta != -1: + etiqueta = texto_original[i:fin_etiqueta + 1] + + # Si estamos dentro del rango, incluir la etiqueta + if dentro_del_rango: + resultado += etiqueta + + i = fin_etiqueta + 1 + continue + + # Verificar si entramos o salimos del rango + if contador_chars_limpios == pos_inicio: + dentro_del_rango = True + elif contador_chars_limpios == pos_fin: + dentro_del_rango = False + break + + # Si estamos dentro del rango, incluir el caracter + if dentro_del_rango: + resultado += char + + contador_chars_limpios += 1 + i += 1 + + return resultado + + +def restore_labels_ref(ref, mapa_etiquetado, texto_original, texto_limpio): + """ + Restaura las etiquetas en una referencia específica usando el mapa y verificando posición. + Solo reemplaza si el contenido estaba realmente etiquetado en esa posición específica. + """ + # Encontrar todas las posiciones donde aparece esta ref en el texto limpio + posiciones_ref = search_position(texto_limpio, ref) + + if not posiciones_ref: + return ref + + # Para cada posición, extraer el fragmento original y ver si contiene etiquetas + mejores_candidatos = [] + + for pos_inicio, pos_fin in posiciones_ref: + fragmento_original = extract_labels( + texto_original, texto_limpio, pos_inicio, pos_fin + ) + + # Si el fragmento original es diferente al ref, significa que tenía etiquetas + if fragmento_original != ref: + mejores_candidatos.append(fragmento_original) + + # Si encontramos candidatos con etiquetas, devolver el primero + if mejores_candidatos: + return mejores_candidatos[0] + + # Si no hay candidatos con etiquetas, devolver el ref original sin modificar + return ref + + +def proccess_labeled_text(texto, data_back): + """ + Procesa un texto eliminando etiquetas XML, extrae citas APA y las devuelve + con sus etiquetas originales restauradas. + + Args: + texto (str): Texto original con etiquetas XML + extraer_citas_apa (function): Función que extrae citas del texto limpio + + Returns: + list: Lista de citas con etiquetas XML restauradas + """ + + # Crear mapa de transformaciones + mapa_transformaciones = map_text(texto) + #print(f"mapa: {mapa_transformaciones}") + + # Limpiar texto eliminando etiquetas + texto_limpio = clean_labels(texto) + + # Extraer citas del texto limpio + refs = extract_citation_apa(texto_limpio, data_back) + #print(f"refs: {refs}") + + # 4. Para cada ref, usar posición para restaurar solo lo que realmente estaba etiquetado + refs_con_etiquetas = [] + for ref in refs: + ref_restaurada = ref + ref_restaurada['cita'] = restore_labels_ref(ref['cita'], mapa_transformaciones, texto, texto_limpio) + refs_con_etiquetas.append(ref_restaurada) + + return refs_con_etiquetas + + +def search_special_id(data_body, label): + for d in data_body: + if d['type'] in ['image', 'table']: + data = d['value'] + clean_label = re.sub(r'^[\s\.,;:–—-]+', '', label).capitalize() + + if d['type'] == 'image': + if clean_label == data['figlabel']: + return data.get('figid') + if data['figid'][0] == clean_label.lower()[0] and data['figid'][1] in clean_label.lower(): + return data.get('figid') + + if d['type'] == 'table': + if clean_label == data['tablabel']: + return data.get('tabid') + if data['tabid'][0] == clean_label.lower()[0] and data['tabid'][1] in clean_label.lower(): + return data.get('tabid') + + for d in data_body: + if d['type'] in ['compound_paragraph']: + data = d['value'] + clean_label = re.sub(r'^[\s\.,;:–—-]+', '', label).lower() + + if d['type'] == 'compound_paragraph': + if data['eid'][0] in clean_label[0] and data['eid'][1] in clean_label: + return data.get('eid') + + return None + + +def is_number_parenthesis(text): + pattern = re.compile(r'^\s*\(\s*(\d+)\s*\)\s*$') + match = pattern.fullmatch(text) + if match: + return f"({match.group(1)})" + return None + + +def proccess_special_content(text, data_body): + # normaliza espacios no separables por si acaso + text = re.sub(r'[\u00A0\u2007\u202F]', ' ', text) + + pattern = r""" + (?<!\w) # inicio no al medio de una palabra + (?: + Imagen|Imágen|Image|Imagem| + Figura|Figure| + Tabla|Table|Tabela| + Ecuaci[oó]n|Equa(?:ç[aã]o|cao)|Equation| + F[oó]rmula|Formula| + Eq\.|Ec\.|Form\.|F[óo]rm\. + )\s* + (?:\(\s*\d+\s*\)|\d+) # 1 o (1) + (?!\w) # que no siga una letra/número + """ + + res = [] + dict_type = {'f': 'fig', 't': 'table', 'e': 'disp-formula'} + + try: + for match in re.finditer(pattern, text, re.IGNORECASE | re.UNICODE | re.VERBOSE): + label = match.group(0) + + id = search_special_id(data_body, label) + + res.append({ + "label": label, + "id": id, + "reftype": dict_type.get(id[0].lower(), 'other') + }) + except Exception as exc: + print(f'ERROR proccess_special_content: {exc}') + pass + + return res + + +def remove_unpaired_tags(text): + # Match opening/closing tags, capturing only the tag name (before any space or >) + pattern = re.compile(r'<(/?)([a-zA-Z0-9]+)(?:\s[^>]*)?>') + + result = [] + stack = [] # Stores (tag_name, position_in_result) + + i = 0 + for match in pattern.finditer(text): + is_closing, tag_name = match.groups() + is_closing = bool(is_closing) + + # Text between tags + if match.start() > i: + result.append(text[i:match.start()]) + + tag_text = text[match.start():match.end()] + + if not is_closing: + # Opening tag + stack.append((tag_name, len(result))) + result.append(tag_text) + else: + # Closing tag + if stack and stack[-1][0] == tag_name: + stack.pop() + result.append(tag_text) + else: + # Orphan closing tag - skip + pass + + i = match.end() + + # Append remaining text + if i < len(text): + result.append(text[i:]) + + # Remove unclosed opening tags + for tag_name, pos in sorted(stack, reverse=True, key=lambda x: x[1]): + result.pop(pos) + + return ''.join(result) + + +def append_fragment(node_dest, val): + if not val: + parent = node_dest.getparent() + if parent: + parent.remove(node_dest) + return + + # 1) Limpiezas mínimas + # - eliminar <br> / <br/> + # - quitar saltos de línea + clean = re.sub(r"(?i)<br\s*/?>", "", val) + clean = clean.replace("\n", "") + + # normaliza entidades problemáticas + clean = clean.replace(" ", " ") + clean = re.sub(r'&(?!\w+;|#\d+;)', '&', clean) + + clean = remove_unpaired_tags(clean) + + if clean == "": + parent = node_dest.getparent() + if parent: + parent.remove(node_dest) + return + + # 2) Si no hay etiquetas, es texto plano + if "<" not in clean: + node_dest.text = (node_dest.text or "") + clean + return + + # 3) Envolver para que sea XML bien formado aunque empiece con texto + wrapper = etree.XML(f"<_wrap_>{clean}</_wrap_>") + + # 4) Pasar el texto inicial (antes del primer tag) + if wrapper.text: + node_dest.text = (node_dest.text or "") + wrapper.text + + # 5) Mover cada hijo al destino (sus .tail se conservan) + for child in list(wrapper): + node_dest.append(child) diff --git a/markup_doc/marker.py b/markup_doc/marker.py new file mode 100644 index 0000000..20a49a0 --- /dev/null +++ b/markup_doc/marker.py @@ -0,0 +1,46 @@ +# Standard library imports +import re + +# Local application imports +from model_ai.llama import LlamaService, LlamaInputSettings + + +def mark_article(text, metadata): + if metadata == 'author': + messages, response_format = LlamaInputSettings.get_author_config() + if metadata == 'affiliation': + messages, response_format = LlamaInputSettings.get_affiliations() + if metadata == 'doi': + messages, response_format = LlamaInputSettings.get_doi_and_section() + if metadata == 'title': + messages, response_format = LlamaInputSettings.get_titles() + + gll = LlamaService(messages, response_format) + output = gll.run(text) + output = output['choices'][0]['message']['content'] + if metadata == 'doi': + output = re.search(r'\{.*\}', output, re.DOTALL) + else: + output = re.search(r'\[.*\]', output, re.DOTALL) + if output: + output = output.group(0) + return output + +def mark_reference(reference_text): + messages, response_format = LlamaInputSettings.get_messages_and_response_format_for_reference(reference_text) + reference_marker = LlamaService(messages, response_format) + output = reference_marker.run(reference_text) + + for item in output["choices"]: + yield item["message"]["content"] + + +def mark_references(reference_block): + for ref_row in reference_block.split("\n"): + ref_row = ref_row.strip() + if ref_row: + choices = mark_reference(ref_row) + yield { + "reference": ref_row, + "choices": list(choices) + } diff --git a/markup_doc/migrations/0001_initial.py b/markup_doc/migrations/0001_initial.py new file mode 100644 index 0000000..74340ef --- /dev/null +++ b/markup_doc/migrations/0001_initial.py @@ -0,0 +1,2291 @@ +# Generated by Django 5.0.3 on 2025-09-07 17:04 + +import django.db.models.deletion +import markup_doc.models +import wagtail.blocks +import wagtail.fields +import wagtail.images.blocks +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name="CollectionValuesModel", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("acron", models.CharField(max_length=10, unique=True)), + ("name", models.CharField(max_length=255)), + ], + ), + migrations.CreateModel( + name="ArticleDocx", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "created", + models.DateTimeField( + auto_now_add=True, verbose_name="Creation date" + ), + ), + ( + "updated", + models.DateTimeField( + auto_now=True, verbose_name="Last update date" + ), + ), + ( + "title", + models.TextField( + blank=True, null=True, verbose_name="Document Title" + ), + ), + ( + "file", + models.FileField( + blank=True, + null=True, + upload_to="uploads_docx/", + verbose_name="Document", + ), + ), + ("estatus", models.IntegerField(default=0)), + ( + "creator", + models.ForeignKey( + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_creator", + to=settings.AUTH_USER_MODEL, + verbose_name="Creator", + ), + ), + ( + "updated_by", + models.ForeignKey( + blank=True, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_last_mod_user", + to=settings.AUTH_USER_MODEL, + verbose_name="Updater", + ), + ), + ], + options={ + "abstract": False, + }, + ), + migrations.CreateModel( + name="ArticleDocxMarkup", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "created", + models.DateTimeField( + auto_now_add=True, verbose_name="Creation date" + ), + ), + ( + "updated", + models.DateTimeField( + auto_now=True, verbose_name="Last update date" + ), + ), + ( + "title", + models.TextField( + blank=True, null=True, verbose_name="Document Title" + ), + ), + ( + "file", + models.FileField( + blank=True, + null=True, + upload_to="uploads_docx/", + verbose_name="Document", + ), + ), + ("estatus", models.IntegerField(default=0)), + ( + "collection", + models.CharField( + default=markup_doc.models.get_default_collection_acron, + max_length=10, + ), + ), + ( + "journal_title", + models.TextField( + blank=True, null=True, verbose_name="Journal Title" + ), + ), + ( + "acronym", + models.TextField(blank=True, null=True, verbose_name="Acronym"), + ), + ( + "short_title", + models.TextField(blank=True, null=True, verbose_name="Short Title"), + ), + ( + "title_nlm", + models.TextField(blank=True, null=True, verbose_name="NLM Title"), + ), + ( + "issn", + models.TextField( + blank=True, null=True, verbose_name="ISSN (id SciELO)" + ), + ), + ( + "pissn", + models.TextField(blank=True, null=True, verbose_name="Print ISSN"), + ), + ( + "eissn", + models.TextField( + blank=True, null=True, verbose_name="Electronic ISSN" + ), + ), + ( + "nimtitle", + models.TextField(blank=True, null=True, verbose_name="Nimtitle"), + ), + ( + "pubname", + models.TextField( + blank=True, null=True, verbose_name="Publisher Name" + ), + ), + ( + "license", + models.URLField( + blank=True, + max_length=500, + null=True, + verbose_name="License (URL)", + ), + ), + ( + "vol", + models.IntegerField(blank=True, null=True, verbose_name="Volume"), + ), + ( + "supplvol", + models.IntegerField( + blank=True, null=True, verbose_name="Suppl Volume" + ), + ), + ( + "issue", + models.IntegerField(blank=True, null=True, verbose_name="Issue"), + ), + ( + "supplno", + models.IntegerField( + blank=True, null=True, verbose_name="Suppl Num" + ), + ), + ( + "issid_part", + models.TextField(blank=True, null=True, verbose_name="Isid Part"), + ), + ( + "dateiso", + models.TextField(blank=True, null=True, verbose_name="Dateiso"), + ), + ( + "month", + models.TextField( + blank=True, null=True, verbose_name="Month/Season" + ), + ), + ( + "fpage", + models.TextField(blank=True, null=True, verbose_name="First Page"), + ), + ("seq", models.TextField(blank=True, null=True, verbose_name="@Seq")), + ( + "lpage", + models.TextField(blank=True, null=True, verbose_name="Last Page"), + ), + ( + "elocatid", + models.TextField( + blank=True, null=True, verbose_name="Elocation ID" + ), + ), + ( + "order", + models.TextField( + blank=True, null=True, verbose_name="Order (In TOC)" + ), + ), + ( + "pagcount", + models.TextField(blank=True, null=True, verbose_name="Pag count"), + ), + ( + "doctopic", + models.TextField(blank=True, null=True, verbose_name="Doc Topic"), + ), + ( + "language", + models.CharField( + blank=True, + choices=[ + ("aa", "Afar"), + ("af", "Afrikaans"), + ("ak", "Akan"), + ("sq", "Albanian"), + ("am", "Amharic"), + ("ar", "Arabic"), + ("an", "Aragonese"), + ("hy", "Armenian"), + ("as", "Assamese"), + ("av", "Avaric"), + ("ae", "Avestan"), + ("ay", "Aymara"), + ("az", "Azerbaijani"), + ("bm", "Bambara"), + ("ba", "Bashkir"), + ("eu", "Basque"), + ("be", "Belarusian"), + ("bn", "Bengali"), + ("bi", "Bislama"), + ("bs", "Bosnian"), + ("br", "Breton"), + ("bg", "Bulgarian"), + ("my", "Burmese"), + ("ca", "Catalan, Valencian"), + ("ch", "Chamorro"), + ("ce", "Chechen"), + ("ny", "Chichewa, Chewa, Nyanja"), + ("zh", "Chinese"), + ( + "cu", + "Church Slavic, Old Slavonic, Church Slavonic, Old Bulgarian, Old Church Slavonic", + ), + ("cv", "Chuvash"), + ("kw", "Cornish"), + ("co", "Corsican"), + ("cr", "Cree"), + ("hr", "Croatian"), + ("cs", "Czech"), + ("da", "Danish"), + ("dv", "Divehi, Dhivehi, Maldivian"), + ("nl", "Dutch, Flemish"), + ("dz", "Dzongkha"), + ("en", "English"), + ("eo", "Esperanto"), + ("et", "Estonian"), + ("ee", "Ewe"), + ("fo", "Faroese"), + ("fj", "Fijian"), + ("fi", "Finnish"), + ("fr", "French"), + ("fy", "Western Frisian"), + ("ff", "Fulah"), + ("gd", "Gaelic, Scottish Gaelic"), + ("gl", "Galician"), + ("lg", "Ganda"), + ("ka", "Georgian"), + ("de", "German"), + ("el", "Greek, Modern (1453–)"), + ("kl", "Kalaallisut, Greenlandic"), + ("gn", "Guarani"), + ("gu", "Gujarati"), + ("ht", "Haitian, Haitian Creole"), + ("ha", "Hausa"), + ("he", "Hebrew"), + ("hz", "Herero"), + ("hi", "Hindi"), + ("ho", "Hiri Motu"), + ("hu", "Hungarian"), + ("is", "Icelandic"), + ("io", "Ido"), + ("ig", "Igbo"), + ("id", "Indonesian"), + ( + "ia", + "Interlingua (International Auxiliary Language Association)", + ), + ("ie", "Interlingue, Occidental"), + ("iu", "Inuktitut"), + ("ik", "Inupiaq"), + ("ga", "Irish"), + ("it", "Italian"), + ("ja", "Japanese"), + ("jv", "Javanese"), + ("kn", "Kannada"), + ("kr", "Kanuri"), + ("ks", "Kashmiri"), + ("kk", "Kazakh"), + ("km", "Central Khmer"), + ("ki", "Kikuyu, Gikuyu"), + ("rw", "Kinyarwanda"), + ("ky", "Kirghiz, Kyrgyz"), + ("kv", "Komi"), + ("kg", "Kongo"), + ("ko", "Korean"), + ("kj", "Kuanyama, Kwanyama"), + ("ku", "Kurdish"), + ("lo", "Lao"), + ("la", "Latin"), + ("lv", "Latvian"), + ("li", "Limburgan, Limburger, Limburgish"), + ("ln", "Lingala"), + ("lt", "Lithuanian"), + ("lu", "Luba-Katanga"), + ("lb", "Luxembourgish, Letzeburgesch"), + ("mk", "Macedonian"), + ("mg", "Malagasy"), + ("ms", "Malay"), + ("ml", "Malayalam"), + ("mt", "Maltese"), + ("gv", "Manx"), + ("mi", "Maori"), + ("mr", "Marathi"), + ("mh", "Marshallese"), + ("mn", "Mongolian"), + ("na", "Nauru"), + ("nv", "Navajo, Navaho"), + ("nd", "North Ndebele"), + ("nr", "South Ndebele"), + ("ng", "Ndonga"), + ("ne", "Nepali"), + ("no", "Norwegian"), + ("nb", "Norwegian Bokmål"), + ("nn", "Norwegian Nynorsk"), + ("ii", "Sichuan Yi, Nuosu"), + ("oc", "Occitan"), + ("oj", "Ojibwa"), + ("or", "Oriya"), + ("om", "Oromo"), + ("os", "Ossetian, Ossetic"), + ("pi", "Pali"), + ("ps", "Pashto, Pushto"), + ("fa", "Persian"), + ("pl", "Polish"), + ("pt", "Português"), + ("pa", "Punjabi, Panjabi"), + ("qu", "Quechua"), + ("ro", "Romanian, Moldavian, Moldovan"), + ("rm", "Romansh"), + ("rn", "Rundi"), + ("ru", "Russian"), + ("se", "Northern Sami"), + ("sm", "Samoan"), + ("sg", "Sango"), + ("sa", "Sanskrit"), + ("sc", "Sardinian"), + ("sr", "Serbian"), + ("sn", "Shona"), + ("sd", "Sindhi"), + ("si", "Sinhala, Sinhalese"), + ("sk", "Slovak"), + ("sl", "Slovenian"), + ("so", "Somali"), + ("st", "Southern Sotho"), + ("es", "Español"), + ("su", "Sundanese"), + ("sw", "Swahili"), + ("ss", "Swati"), + ("sv", "Swedish"), + ("tl", "Tagalog"), + ("ty", "Tahitian"), + ("tg", "Tajik"), + ("ta", "Tamil"), + ("tt", "Tatar"), + ("te", "Telugu"), + ("th", "Thai"), + ("bo", "Tibetan"), + ("ti", "Tigrinya"), + ("to", "Tonga (Tonga Islands)"), + ("ts", "Tsonga"), + ("tn", "Tswana"), + ("tr", "Turkish"), + ("tk", "Turkmen"), + ("tw", "Twi"), + ("ug", "Uighur, Uyghur"), + ("uk", "Ukrainian"), + ("ur", "Urdu"), + ("uz", "Uzbek"), + ("ve", "Venda"), + ("vi", "Vietnamese"), + ("vo", "Volapük"), + ("wa", "Walloon"), + ("cy", "Welsh"), + ("wo", "Wolof"), + ("xh", "Xhosa"), + ("yi", "Yiddish"), + ("yo", "Yoruba"), + ("za", "Zhuang, Chuang"), + ("zu", "Zulu"), + ], + max_length=10, + null=True, + verbose_name="Language", + ), + ), + ( + "spsversion", + models.TextField(blank=True, null=True, verbose_name="Sps version"), + ), + ( + "artdate", + models.DateField(blank=True, null=True, verbose_name="Artdate"), + ), + ( + "ahpdate", + models.DateField(blank=True, null=True, verbose_name="Ahpdate"), + ), + ( + "file_xml", + models.FileField( + blank=True, + null=True, + upload_to="generate_xml/", + verbose_name="Document xml", + ), + ), + ( + "text_xml", + models.TextField(blank=True, null=True, verbose_name="Text XML"), + ), + ( + "content", + wagtail.fields.StreamField( + [ + ( + "paragraph_with_language", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "language", + wagtail.blocks.ChoiceBlock( + choices=[ + ("aa", "Afar"), + ("af", "Afrikaans"), + ("ak", "Akan"), + ("sq", "Albanian"), + ("am", "Amharic"), + ("ar", "Arabic"), + ("an", "Aragonese"), + ("hy", "Armenian"), + ("as", "Assamese"), + ("av", "Avaric"), + ("ae", "Avestan"), + ("ay", "Aymara"), + ("az", "Azerbaijani"), + ("bm", "Bambara"), + ("ba", "Bashkir"), + ("eu", "Basque"), + ("be", "Belarusian"), + ("bn", "Bengali"), + ("bi", "Bislama"), + ("bs", "Bosnian"), + ("br", "Breton"), + ("bg", "Bulgarian"), + ("my", "Burmese"), + ("ca", "Catalan, Valencian"), + ("ch", "Chamorro"), + ("ce", "Chechen"), + ("ny", "Chichewa, Chewa, Nyanja"), + ("zh", "Chinese"), + ( + "cu", + "Church Slavic, Old Slavonic, Church Slavonic, Old Bulgarian, Old Church Slavonic", + ), + ("cv", "Chuvash"), + ("kw", "Cornish"), + ("co", "Corsican"), + ("cr", "Cree"), + ("hr", "Croatian"), + ("cs", "Czech"), + ("da", "Danish"), + ( + "dv", + "Divehi, Dhivehi, Maldivian", + ), + ("nl", "Dutch, Flemish"), + ("dz", "Dzongkha"), + ("en", "English"), + ("eo", "Esperanto"), + ("et", "Estonian"), + ("ee", "Ewe"), + ("fo", "Faroese"), + ("fj", "Fijian"), + ("fi", "Finnish"), + ("fr", "French"), + ("fy", "Western Frisian"), + ("ff", "Fulah"), + ("gd", "Gaelic, Scottish Gaelic"), + ("gl", "Galician"), + ("lg", "Ganda"), + ("ka", "Georgian"), + ("de", "German"), + ("el", "Greek, Modern (1453–)"), + ("kl", "Kalaallisut, Greenlandic"), + ("gn", "Guarani"), + ("gu", "Gujarati"), + ("ht", "Haitian, Haitian Creole"), + ("ha", "Hausa"), + ("he", "Hebrew"), + ("hz", "Herero"), + ("hi", "Hindi"), + ("ho", "Hiri Motu"), + ("hu", "Hungarian"), + ("is", "Icelandic"), + ("io", "Ido"), + ("ig", "Igbo"), + ("id", "Indonesian"), + ( + "ia", + "Interlingua (International Auxiliary Language Association)", + ), + ("ie", "Interlingue, Occidental"), + ("iu", "Inuktitut"), + ("ik", "Inupiaq"), + ("ga", "Irish"), + ("it", "Italian"), + ("ja", "Japanese"), + ("jv", "Javanese"), + ("kn", "Kannada"), + ("kr", "Kanuri"), + ("ks", "Kashmiri"), + ("kk", "Kazakh"), + ("km", "Central Khmer"), + ("ki", "Kikuyu, Gikuyu"), + ("rw", "Kinyarwanda"), + ("ky", "Kirghiz, Kyrgyz"), + ("kv", "Komi"), + ("kg", "Kongo"), + ("ko", "Korean"), + ("kj", "Kuanyama, Kwanyama"), + ("ku", "Kurdish"), + ("lo", "Lao"), + ("la", "Latin"), + ("lv", "Latvian"), + ( + "li", + "Limburgan, Limburger, Limburgish", + ), + ("ln", "Lingala"), + ("lt", "Lithuanian"), + ("lu", "Luba-Katanga"), + ( + "lb", + "Luxembourgish, Letzeburgesch", + ), + ("mk", "Macedonian"), + ("mg", "Malagasy"), + ("ms", "Malay"), + ("ml", "Malayalam"), + ("mt", "Maltese"), + ("gv", "Manx"), + ("mi", "Maori"), + ("mr", "Marathi"), + ("mh", "Marshallese"), + ("mn", "Mongolian"), + ("na", "Nauru"), + ("nv", "Navajo, Navaho"), + ("nd", "North Ndebele"), + ("nr", "South Ndebele"), + ("ng", "Ndonga"), + ("ne", "Nepali"), + ("no", "Norwegian"), + ("nb", "Norwegian Bokmål"), + ("nn", "Norwegian Nynorsk"), + ("ii", "Sichuan Yi, Nuosu"), + ("oc", "Occitan"), + ("oj", "Ojibwa"), + ("or", "Oriya"), + ("om", "Oromo"), + ("os", "Ossetian, Ossetic"), + ("pi", "Pali"), + ("ps", "Pashto, Pushto"), + ("fa", "Persian"), + ("pl", "Polish"), + ("pt", "Português"), + ("pa", "Punjabi, Panjabi"), + ("qu", "Quechua"), + ( + "ro", + "Romanian, Moldavian, Moldovan", + ), + ("rm", "Romansh"), + ("rn", "Rundi"), + ("ru", "Russian"), + ("se", "Northern Sami"), + ("sm", "Samoan"), + ("sg", "Sango"), + ("sa", "Sanskrit"), + ("sc", "Sardinian"), + ("sr", "Serbian"), + ("sn", "Shona"), + ("sd", "Sindhi"), + ("si", "Sinhala, Sinhalese"), + ("sk", "Slovak"), + ("sl", "Slovenian"), + ("so", "Somali"), + ("st", "Southern Sotho"), + ("es", "Español"), + ("su", "Sundanese"), + ("sw", "Swahili"), + ("ss", "Swati"), + ("sv", "Swedish"), + ("tl", "Tagalog"), + ("ty", "Tahitian"), + ("tg", "Tajik"), + ("ta", "Tamil"), + ("tt", "Tatar"), + ("te", "Telugu"), + ("th", "Thai"), + ("bo", "Tibetan"), + ("ti", "Tigrinya"), + ("to", "Tonga (Tonga Islands)"), + ("ts", "Tsonga"), + ("tn", "Tswana"), + ("tr", "Turkish"), + ("tk", "Turkmen"), + ("tw", "Twi"), + ("ug", "Uighur, Uyghur"), + ("uk", "Ukrainian"), + ("ur", "Urdu"), + ("uz", "Uzbek"), + ("ve", "Venda"), + ("vi", "Vietnamese"), + ("vo", "Volapük"), + ("wa", "Walloon"), + ("cy", "Welsh"), + ("wo", "Wolof"), + ("xh", "Xhosa"), + ("yi", "Yiddish"), + ("yo", "Yoruba"), + ("za", "Zhuang, Chuang"), + ("zu", "Zulu"), + ], + label="Language", + required=False, + ), + ), + ( + "paragraph", + wagtail.blocks.TextBlock( + label="Title", required=False + ), + ), + ] + ), + ), + ( + "paragraph", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "paragraph", + wagtail.blocks.TextBlock( + label="Paragraph", required=False + ), + ), + ] + ), + ), + ( + "author_paragraph", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "paragraph", + wagtail.blocks.TextBlock( + label="Paragraph", required=False + ), + ), + ( + "surname", + wagtail.blocks.TextBlock( + label="Surname", required=False + ), + ), + ( + "given_names", + wagtail.blocks.TextBlock( + label="Given names", required=False + ), + ), + ( + "orcid", + wagtail.blocks.TextBlock( + label="Orcid", required=False + ), + ), + ( + "affid", + wagtail.blocks.TextBlock( + label="Aff id", required=False + ), + ), + ( + "char", + wagtail.blocks.TextBlock( + label="Char link", required=False + ), + ), + ] + ), + ), + ( + "aff_paragraph", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "paragraph", + wagtail.blocks.TextBlock( + label="Paragraph", required=False + ), + ), + ( + "affid", + wagtail.blocks.TextBlock( + label="Aff id", required=False + ), + ), + ( + "text_aff", + wagtail.blocks.TextBlock( + label="Full text Aff", required=False + ), + ), + ( + "char", + wagtail.blocks.TextBlock( + label="Char link", required=False + ), + ), + ( + "orgname", + wagtail.blocks.TextBlock( + label="Orgname", required=False + ), + ), + ( + "orgdiv2", + wagtail.blocks.TextBlock( + label="Orgdiv2", required=False + ), + ), + ( + "orgdiv1", + wagtail.blocks.TextBlock( + label="Orgdiv1", required=False + ), + ), + ( + "zipcode", + wagtail.blocks.TextBlock( + label="Zipcode", required=False + ), + ), + ( + "city", + wagtail.blocks.TextBlock( + label="City", required=False + ), + ), + ( + "state", + wagtail.blocks.TextBlock( + label="State", required=False + ), + ), + ( + "country", + wagtail.blocks.TextBlock( + label="Country", required=False + ), + ), + ( + "code_country", + wagtail.blocks.TextBlock( + label="Code country", required=False + ), + ), + ( + "original", + wagtail.blocks.TextBlock( + label="Original", required=False + ), + ), + ] + ), + ), + ], + blank=True, + use_json_field=True, + ), + ), + ( + "content_body", + wagtail.fields.StreamField( + [ + ( + "paragraph", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "paragraph", + wagtail.blocks.TextBlock( + label="Paragraph", required=False + ), + ), + ] + ), + ), + ( + "paragraph_with_language", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "language", + wagtail.blocks.ChoiceBlock( + choices=[ + ("aa", "Afar"), + ("af", "Afrikaans"), + ("ak", "Akan"), + ("sq", "Albanian"), + ("am", "Amharic"), + ("ar", "Arabic"), + ("an", "Aragonese"), + ("hy", "Armenian"), + ("as", "Assamese"), + ("av", "Avaric"), + ("ae", "Avestan"), + ("ay", "Aymara"), + ("az", "Azerbaijani"), + ("bm", "Bambara"), + ("ba", "Bashkir"), + ("eu", "Basque"), + ("be", "Belarusian"), + ("bn", "Bengali"), + ("bi", "Bislama"), + ("bs", "Bosnian"), + ("br", "Breton"), + ("bg", "Bulgarian"), + ("my", "Burmese"), + ("ca", "Catalan, Valencian"), + ("ch", "Chamorro"), + ("ce", "Chechen"), + ("ny", "Chichewa, Chewa, Nyanja"), + ("zh", "Chinese"), + ( + "cu", + "Church Slavic, Old Slavonic, Church Slavonic, Old Bulgarian, Old Church Slavonic", + ), + ("cv", "Chuvash"), + ("kw", "Cornish"), + ("co", "Corsican"), + ("cr", "Cree"), + ("hr", "Croatian"), + ("cs", "Czech"), + ("da", "Danish"), + ( + "dv", + "Divehi, Dhivehi, Maldivian", + ), + ("nl", "Dutch, Flemish"), + ("dz", "Dzongkha"), + ("en", "English"), + ("eo", "Esperanto"), + ("et", "Estonian"), + ("ee", "Ewe"), + ("fo", "Faroese"), + ("fj", "Fijian"), + ("fi", "Finnish"), + ("fr", "French"), + ("fy", "Western Frisian"), + ("ff", "Fulah"), + ("gd", "Gaelic, Scottish Gaelic"), + ("gl", "Galician"), + ("lg", "Ganda"), + ("ka", "Georgian"), + ("de", "German"), + ("el", "Greek, Modern (1453–)"), + ("kl", "Kalaallisut, Greenlandic"), + ("gn", "Guarani"), + ("gu", "Gujarati"), + ("ht", "Haitian, Haitian Creole"), + ("ha", "Hausa"), + ("he", "Hebrew"), + ("hz", "Herero"), + ("hi", "Hindi"), + ("ho", "Hiri Motu"), + ("hu", "Hungarian"), + ("is", "Icelandic"), + ("io", "Ido"), + ("ig", "Igbo"), + ("id", "Indonesian"), + ( + "ia", + "Interlingua (International Auxiliary Language Association)", + ), + ("ie", "Interlingue, Occidental"), + ("iu", "Inuktitut"), + ("ik", "Inupiaq"), + ("ga", "Irish"), + ("it", "Italian"), + ("ja", "Japanese"), + ("jv", "Javanese"), + ("kn", "Kannada"), + ("kr", "Kanuri"), + ("ks", "Kashmiri"), + ("kk", "Kazakh"), + ("km", "Central Khmer"), + ("ki", "Kikuyu, Gikuyu"), + ("rw", "Kinyarwanda"), + ("ky", "Kirghiz, Kyrgyz"), + ("kv", "Komi"), + ("kg", "Kongo"), + ("ko", "Korean"), + ("kj", "Kuanyama, Kwanyama"), + ("ku", "Kurdish"), + ("lo", "Lao"), + ("la", "Latin"), + ("lv", "Latvian"), + ( + "li", + "Limburgan, Limburger, Limburgish", + ), + ("ln", "Lingala"), + ("lt", "Lithuanian"), + ("lu", "Luba-Katanga"), + ( + "lb", + "Luxembourgish, Letzeburgesch", + ), + ("mk", "Macedonian"), + ("mg", "Malagasy"), + ("ms", "Malay"), + ("ml", "Malayalam"), + ("mt", "Maltese"), + ("gv", "Manx"), + ("mi", "Maori"), + ("mr", "Marathi"), + ("mh", "Marshallese"), + ("mn", "Mongolian"), + ("na", "Nauru"), + ("nv", "Navajo, Navaho"), + ("nd", "North Ndebele"), + ("nr", "South Ndebele"), + ("ng", "Ndonga"), + ("ne", "Nepali"), + ("no", "Norwegian"), + ("nb", "Norwegian Bokmål"), + ("nn", "Norwegian Nynorsk"), + ("ii", "Sichuan Yi, Nuosu"), + ("oc", "Occitan"), + ("oj", "Ojibwa"), + ("or", "Oriya"), + ("om", "Oromo"), + ("os", "Ossetian, Ossetic"), + ("pi", "Pali"), + ("ps", "Pashto, Pushto"), + ("fa", "Persian"), + ("pl", "Polish"), + ("pt", "Português"), + ("pa", "Punjabi, Panjabi"), + ("qu", "Quechua"), + ( + "ro", + "Romanian, Moldavian, Moldovan", + ), + ("rm", "Romansh"), + ("rn", "Rundi"), + ("ru", "Russian"), + ("se", "Northern Sami"), + ("sm", "Samoan"), + ("sg", "Sango"), + ("sa", "Sanskrit"), + ("sc", "Sardinian"), + ("sr", "Serbian"), + ("sn", "Shona"), + ("sd", "Sindhi"), + ("si", "Sinhala, Sinhalese"), + ("sk", "Slovak"), + ("sl", "Slovenian"), + ("so", "Somali"), + ("st", "Southern Sotho"), + ("es", "Español"), + ("su", "Sundanese"), + ("sw", "Swahili"), + ("ss", "Swati"), + ("sv", "Swedish"), + ("tl", "Tagalog"), + ("ty", "Tahitian"), + ("tg", "Tajik"), + ("ta", "Tamil"), + ("tt", "Tatar"), + ("te", "Telugu"), + ("th", "Thai"), + ("bo", "Tibetan"), + ("ti", "Tigrinya"), + ("to", "Tonga (Tonga Islands)"), + ("ts", "Tsonga"), + ("tn", "Tswana"), + ("tr", "Turkish"), + ("tk", "Turkmen"), + ("tw", "Twi"), + ("ug", "Uighur, Uyghur"), + ("uk", "Ukrainian"), + ("ur", "Urdu"), + ("uz", "Uzbek"), + ("ve", "Venda"), + ("vi", "Vietnamese"), + ("vo", "Volapük"), + ("wa", "Walloon"), + ("cy", "Welsh"), + ("wo", "Wolof"), + ("xh", "Xhosa"), + ("yi", "Yiddish"), + ("yo", "Yoruba"), + ("za", "Zhuang, Chuang"), + ("zu", "Zulu"), + ], + label="Language", + required=False, + ), + ), + ( + "paragraph", + wagtail.blocks.TextBlock( + label="Title", required=False + ), + ), + ] + ), + ), + ( + "compound_paragraph", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "eid", + wagtail.blocks.TextBlock( + label="Equation id", required=False + ), + ), + ( + "content", + wagtail.blocks.StreamBlock( + [ + ( + "text", + wagtail.blocks.TextBlock( + label="Text" + ), + ), + ( + "formula", + wagtail.blocks.TextBlock( + label="Formula" + ), + ), + ], + label="Content", + required=True, + ), + ), + ] + ), + ), + ( + "image", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "figid", + wagtail.blocks.TextBlock( + label="Fig id", required=False + ), + ), + ( + "figlabel", + wagtail.blocks.TextBlock( + label="Fig label", required=False + ), + ), + ( + "title", + wagtail.blocks.TextBlock( + label="Title", required=False + ), + ), + ( + "alttext", + wagtail.blocks.TextBlock( + label="Alt text", required=False + ), + ), + ( + "image", + wagtail.images.blocks.ImageChooserBlock( + required=True + ), + ), + ] + ), + ), + ( + "table", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "tabid", + wagtail.blocks.TextBlock( + label="Table id", required=False + ), + ), + ( + "tablabel", + wagtail.blocks.TextBlock( + label="Table label", required=False + ), + ), + ( + "title", + wagtail.blocks.TextBlock( + label="Title", required=False + ), + ), + ( + "content", + wagtail.blocks.TextBlock( + label="Content", required=False + ), + ), + ] + ), + ), + ], + blank=True, + use_json_field=True, + ), + ), + ( + "content_back", + wagtail.fields.StreamField( + [ + ( + "paragraph", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "paragraph", + wagtail.blocks.TextBlock( + label="Paragraph", required=False + ), + ), + ] + ), + ), + ( + "ref_paragraph", + wagtail.blocks.StructBlock( + [ + ( + "label", + wagtail.blocks.ChoiceBlock( + choices=[ + ("<abstract>", "<abstract>"), + ( + "<abstract-title>", + "<abstract-title>", + ), + ("<aff>", "<aff>"), + ("<article-id>", "<article-id>"), + ( + "<article-title>", + "<article-title>", + ), + ( + "<author-notes>", + "<author-notes>", + ), + ("<contrib>", "<contrib>"), + ( + "<date-accepted>", + "<date-accepted>", + ), + ( + "<date-received>", + "<date-received>", + ), + ("<fig>", "<fig>"), + ("<fig-attrib>", "<fig-attrib>"), + ("<history>", "<history>"), + ("<kwd-title>", "<kwd-title>"), + ("<kwd-group>", "<kwd-group>"), + ("<list>", "<list>"), + ("<p>", "<p>"), + ("<sec>", "<sec>"), + ("<sub-sec>", "<sub-sec>"), + ("<subject>", "<subject>"), + ("<table>", "<table>"), + ("<table-foot>", "<table-foot>"), + ("<title>", "<title>"), + ( + "<trans-abstract>", + "<trans-abstract>", + ), + ("<trans-title>", "<trans-title>"), + ( + "<translate-front>", + "<translate-front>", + ), + ( + "<translate-body>", + "<translate-body>", + ), + ( + "<disp-formula>", + "<disp-formula>", + ), + ( + "<inline-formula>", + "<inline-formula>", + ), + ("<formula>", "<formula>"), + ], + label="Label", + required=False, + ), + ), + ( + "paragraph", + wagtail.blocks.TextBlock( + label="Paragraph", required=False + ), + ), + ( + "reftype", + wagtail.blocks.TextBlock( + label="Ref type", required=False + ), + ), + ( + "refid", + wagtail.blocks.TextBlock( + label="Ref id", required=False + ), + ), + ( + "authors", + wagtail.blocks.StreamBlock( + [ + ( + "Author", + wagtail.blocks.StructBlock( + [ + ( + "surname", + wagtail.blocks.TextBlock( + label="Surname", + required=False, + ), + ), + ( + "given_names", + wagtail.blocks.TextBlock( + label="Given names", + required=False, + ), + ), + ] + ), + ) + ], + label="Authors", + required=False, + ), + ), + ( + "date", + wagtail.blocks.TextBlock( + label="Date", required=False + ), + ), + ( + "title", + wagtail.blocks.TextBlock( + label="Title", required=False + ), + ), + ( + "chapter", + wagtail.blocks.TextBlock( + label="Chapter", required=False + ), + ), + ( + "edition", + wagtail.blocks.TextBlock( + label="Edition", required=False + ), + ), + ( + "source", + wagtail.blocks.TextBlock( + label="Source", required=False + ), + ), + ( + "vol", + wagtail.blocks.TextBlock( + label="Vol", required=False + ), + ), + ( + "issue", + wagtail.blocks.TextBlock( + label="Issue", required=False + ), + ), + ( + "pages", + wagtail.blocks.TextBlock( + label="Pages", required=False + ), + ), + ( + "fpage", + wagtail.blocks.TextBlock( + label="First page", required=False + ), + ), + ( + "lpage", + wagtail.blocks.TextBlock( + label="Last page", required=False + ), + ), + ( + "doi", + wagtail.blocks.TextBlock( + label="DOI", required=False + ), + ), + ( + "access_id", + wagtail.blocks.TextBlock( + label="Access id", required=False + ), + ), + ( + "degree", + wagtail.blocks.TextBlock( + label="Degree", required=False + ), + ), + ( + "organization", + wagtail.blocks.TextBlock( + label="Organization", required=False + ), + ), + ( + "location", + wagtail.blocks.TextBlock( + label="Location", required=False + ), + ), + ( + "org_location", + wagtail.blocks.TextBlock( + label="Org location", required=False + ), + ), + ( + "num_pages", + wagtail.blocks.TextBlock( + label="Num pages", required=False + ), + ), + ( + "uri", + wagtail.blocks.TextBlock( + label="Uri", required=False + ), + ), + ( + "version", + wagtail.blocks.TextBlock( + label="Version", required=False + ), + ), + ( + "access_date", + wagtail.blocks.TextBlock( + label="Access date", required=False + ), + ), + ] + ), + ), + ], + blank=True, + use_json_field=True, + ), + ), + ( + "creator", + models.ForeignKey( + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_creator", + to=settings.AUTH_USER_MODEL, + verbose_name="Creator", + ), + ), + ( + "updated_by", + models.ForeignKey( + blank=True, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_last_mod_user", + to=settings.AUTH_USER_MODEL, + verbose_name="Updater", + ), + ), + ], + options={ + "abstract": False, + }, + ), + migrations.CreateModel( + name="MarkupXML", + fields=[], + options={ + "proxy": True, + "indexes": [], + "constraints": [], + }, + bases=("markup_doc.articledocxmarkup",), + ), + migrations.CreateModel( + name="UploadDocx", + fields=[], + options={ + "proxy": True, + "indexes": [], + "constraints": [], + }, + bases=("markup_doc.articledocxmarkup",), + ), + migrations.CreateModel( + name="CollectionModel", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "collection", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="markup_doc.collectionvaluesmodel", + ), + ), + ], + ), + migrations.CreateModel( + name="JournalModel", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "title", + models.TextField(blank=True, null=True, verbose_name="Title"), + ), + ( + "short_title", + models.TextField(blank=True, null=True, verbose_name="Short Title"), + ), + ( + "title_nlm", + models.TextField(blank=True, null=True, verbose_name="NLM Title"), + ), + ( + "acronym", + models.TextField(blank=True, null=True, verbose_name="Acronym"), + ), + ( + "issn", + models.TextField( + blank=True, null=True, verbose_name="ISSN (id SciELO)" + ), + ), + ( + "pissn", + models.TextField(blank=True, null=True, verbose_name="Print ISSN"), + ), + ( + "eissn", + models.TextField( + blank=True, null=True, verbose_name="Electronic ISSN" + ), + ), + ( + "pubname", + models.TextField( + blank=True, null=True, verbose_name="Publisher Name" + ), + ), + ], + options={ + "unique_together": {("title",)}, + }, + ), + migrations.AddField( + model_name="articledocxmarkup", + name="journal", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="markup_doc.journalmodel", + ), + ), + ] diff --git a/markup_doc/migrations/0002_alter_articledocx_estatus_and_more.py b/markup_doc/migrations/0002_alter_articledocx_estatus_and_more.py new file mode 100644 index 0000000..600fba0 --- /dev/null +++ b/markup_doc/migrations/0002_alter_articledocx_estatus_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 5.0.8 on 2025-09-21 23:13 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('markup_doc', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='articledocx', + name='estatus', + field=models.IntegerField(blank=True, choices=[(1, 'Processing'), (2, 'Processed')], default=1, verbose_name='Process estatus'), + ), + migrations.AlterField( + model_name='articledocxmarkup', + name='estatus', + field=models.IntegerField(blank=True, choices=[(1, 'Processing'), (2, 'Processed')], default=1, verbose_name='Process estatus'), + ), + ] diff --git a/markup_doc/migrations/__init__.py b/markup_doc/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/markup_doc/models.py b/markup_doc/models.py new file mode 100644 index 0000000..bfd4722 --- /dev/null +++ b/markup_doc/models.py @@ -0,0 +1,521 @@ +import os +import sys +import requests + +from django.db import models +from django.utils.translation import gettext_lazy as _ +from django import forms +from django.utils.html import format_html +from django.urls import reverse + +from modelcluster.fields import ParentalKey +from modelcluster.models import ClusterableModel +from wagtail.admin.panels import FieldPanel, InlinePanel, ObjectList, TabbedInterface +from wagtailautocomplete.edit_handlers import AutocompletePanel +from wagtail.documents.models import Document + +from core.forms import CoreAdminModelForm +from core.choices import LANGUAGE +from core.models import ( + CommonControlField, + Language, + TextWithLang +) +from wagtail.fields import StreamField +from wagtail.blocks import StructBlock, TextBlock, CharBlock, ChoiceBlock, ListBlock, StreamBlock +from wagtail.images.blocks import ImageChooserBlock +from .choices import front_labels + + +class ProcessStatus(models.IntegerChoices): + PROCESSING = 1, _("Processing") + PROCESSED = 2, _("Processed") + + +class ReadOnlyFileWidget(forms.Widget): + def render(self, name, value, attrs=None, renderer=None): + if value: + # Muestra el archivo como un enlace de descarga + #return format_html('<a href="{}" target="_blank" download>{}</a>', value.url, value.name.split('/')[-1]) + instance = value.instance + url = reverse('generate_xml', args=[instance.pk]) + return format_html('<a href="{}" target="_blank" download>Download XML</a>', url) + return "" + +# Create your models here. +class ArticleDocx(CommonControlField): + title = models.TextField(_("Document Title"), null=True, blank=True) + file = models.FileField( + null=True, + blank=True, + verbose_name=_("Document"), + upload_to='uploads_docx/', + ) + estatus = models.IntegerField( + _("Process estatus"), + choices=ProcessStatus.choices, + blank=True, + default=ProcessStatus.PROCESSING + ) + + panels = [ + FieldPanel("title"), + FieldPanel("file"), + ] + + base_form_class = CoreAdminModelForm + + def __unicode__(self): + return f"{self.title} | {self.estatus}" + + def __str__(self): + return f"{self.title} | {self.estatus}" + + @classmethod + def get( + cls, + title): + return cls.objects.get(title=title) + + @classmethod + def update(cls, title, estatus): + try: + obj = cls.get(title=title) + except (cls.DoesNotExist, ValueError): + pass + + obj.estatus = estatus + obj.save() + return obj + + +class ParagraphWithLanguageBlock(StructBlock): + label = ChoiceBlock( + choices=front_labels, + required=False, + label=_("Label") + ) + language = ChoiceBlock( + choices=LANGUAGE, + required=False, + label="Language" + ) + paragraph = TextBlock(required=False, label=_("Title")) + + class Meta: + label = _("Paragraph with Language") + + +class ParagraphBlock(StructBlock): + label = ChoiceBlock( + choices=front_labels, + required=False, + label=_("Label") + ) + paragraph = TextBlock(required=False, label=_("Paragraph")) + + class Meta: + label = _("Paragraph") + + +class CompoundParagraphBlock(StructBlock): + label = ChoiceBlock( + choices=front_labels, + required=False, + label=_("Label") + ) + eid = TextBlock(required=False, label=_("Equation id")) + content = StreamBlock([ + ('text', TextBlock(label=_("Text"))), + ('formula', TextBlock(label=_("Formula"))), + ], label=_("Content"), required=True) + + class Meta: + label = _("Compound paragraph") + + +class ImageBlock(StructBlock): + label = ChoiceBlock( + choices=front_labels, + required=False, + label=_("Label") + ) + figid = TextBlock(required=False, label=_("Fig id")) + figlabel = TextBlock(required=False, label=_("Fig label")) + title = TextBlock(required=False, label=_("Title")) + alttext = TextBlock(required=False, label=_("Alt text")) + image = ImageChooserBlock(required=True) + + class Meta: + label = _("Image") + + +class TableBlock(StructBlock): + label = ChoiceBlock( + choices=front_labels, + required=False, + label=_("Label") + ) + tabid = TextBlock(required=False, label=_("Table id")) + tablabel = TextBlock(required=False, label=_("Table label")) + title = TextBlock(required=False, label=_("Title")) + content = TextBlock(required=False, label=_("Content")) + + class Meta: + label = _("Table") + + +class AuthorParagraphBlock(ParagraphBlock): + surname = TextBlock(required=False, label=_("Surname")) + given_names = TextBlock(required=False, label=_("Given names")) + orcid = TextBlock(required=False, label=_("Orcid")) + affid = TextBlock(required=False, label=_("Aff id")) + char = TextBlock(required=False, label=_("Char link")) + + class Meta: + label = _("Author Paragraph") + + +class AffParagraphBlock(ParagraphBlock): + affid = TextBlock(required=False, label=_("Aff id")) + text_aff = TextBlock(required=False, label=_("Full text Aff")) + char = TextBlock(required=False, label=_("Char link")) + orgname = TextBlock(required=False, label=_("Orgname")) + orgdiv2 = TextBlock(required=False, label=_("Orgdiv2")) + orgdiv1 = TextBlock(required=False, label=_("Orgdiv1")) + zipcode = TextBlock(required=False, label=_("Zipcode")) + city = TextBlock(required=False, label=_("City")) + state = TextBlock(required=False, label=_("State")) + country = TextBlock(required=False, label=_("Country")) + code_country = TextBlock(required=False, label=_("Code country")) + original = TextBlock(required=False, label=_("Original")) + + class Meta: + label = _("Aff Paragraph") + + +class RefNameBlock(StructBlock): + surname = TextBlock(required=False, label=_("Surname")) + given_names = TextBlock(required=False, label=_("Given names")) + + +class RefParagraphBlock(ParagraphBlock): + reftype = TextBlock(required=False, label=_("Ref type")) + refid = TextBlock(required=False, label=_("Ref id")) + #authors = ListBlock(RefNameBlock(), label=_("Authors")) + authors = StreamBlock([ + ('Author', RefNameBlock()), + ], label=_("Authors"), required=False) + date = TextBlock(required=False, label=_("Date")) + title = TextBlock(required=False, label=_("Title")) + chapter = TextBlock(required=False, label=_("Chapter")) + edition = TextBlock(required=False, label=_("Edition")) + source = TextBlock(required=False, label=_("Source")) + vol = TextBlock(required=False, label=_("Vol")) + issue = TextBlock(required=False, label=_("Issue")) + pages = TextBlock(required=False, label=_("Pages")) + fpage = TextBlock(required=False, label=_("First page")) + lpage = TextBlock(required=False, label=_("Last page")) + doi = TextBlock(required=False, label=_("DOI")) + access_id = TextBlock(required=False, label=_("Access id")) + degree = TextBlock(required=False, label=_("Degree")) + organization = TextBlock(required=False, label=_("Organization")) + location = TextBlock(required=False, label=_("Location")) + org_location = TextBlock(required=False, label=_("Org location")) + num_pages = TextBlock(required=False, label=_("Num pages")) + uri = TextBlock(required=False, label=_("Uri")) + version = TextBlock(required=False, label=_("Version")) + access_date = TextBlock(required=False, label=_("Access date")) + + class Meta: + label = _("Ref Paragraph") + + +class CollectionValuesModel(models.Model): + acron = models.CharField(max_length=10, unique=True) + name = models.CharField(max_length=255) + + autocomplete_search_field = "acron" + + def autocomplete_label(self): + return str(self) + + def __str__(self): + return f"{self.acron.upper()} - {self.name}" + + +class CollectionModel(models.Model): + collection = models.ForeignKey(CollectionValuesModel, null=True, blank=True, on_delete=models.SET_NULL) + + autocomplete_search_field = "collection.acron" + + def autocomplete_label(self): + return str(self) + + panels = [ + AutocompletePanel('collection'), + ] + + def __str__(self): + return f"{self.collection.acron.upper()} - {self.collection.acron}" + + +class JournalModel(models.Model): + title = models.TextField(_("Title"), null=True, blank=True) + short_title = models.TextField(_("Short Title"), null=True, blank=True) + title_nlm = models.TextField(_("NLM Title"), null=True, blank=True) + acronym = models.TextField(_("Acronym"), null=True, blank=True) + issn = models.TextField(_("ISSN (id SciELO)"), null=True, blank=True) + pissn = models.TextField(_("Print ISSN"), null=True, blank=True) + eissn = models.TextField(_("Electronic ISSN"), null=True, blank=True) + pubname = models.TextField(_("Publisher Name"), null=True, blank=True) + + autocomplete_search_field = "title" + + class Meta: + unique_together = ('title',) + + def autocomplete_label(self): + return str(self) + + def __str__(self): + return self.title + + +def get_default_collection_acron(): + try: + obj = CollectionModel.objects.select_related('collection').first() + return obj.collection.acron if obj and obj.collection else '' + except Exception: + return '' + + +class ArticleDocxMarkup(CommonControlField, ClusterableModel): + title = models.TextField(_("Document Title"), null=True, blank=True) + file = models.FileField( + null=True, + blank=True, + verbose_name=_("Document"), + upload_to='uploads_docx/', + ) + estatus = models.IntegerField( + _("Process estatus"), + choices=ProcessStatus.choices, + blank=True, + default=ProcessStatus.PROCESSING + ) + + collection = models.CharField(max_length=10, default=get_default_collection_acron) + journal = models.ForeignKey(JournalModel, null=True, blank=True, on_delete=models.SET_NULL) + + journal_title = models.TextField(_("Journal Title"), null=True, blank=True) + acronym = models.TextField(_("Acronym"), null=True, blank=True) + short_title = models.TextField(_("Short Title"), null=True, blank=True) + title_nlm = models.TextField(_("NLM Title"), null=True, blank=True) + issn = models.TextField(_("ISSN (id SciELO)"), null=True, blank=True) + pissn = models.TextField(_("Print ISSN"), null=True, blank=True) + eissn = models.TextField(_("Electronic ISSN"), null=True, blank=True) + nimtitle = models.TextField(_("Nimtitle"), null=True, blank=True) + pubname = models.TextField(_("Publisher Name"), null=True, blank=True) + license = models.URLField( + max_length=500, + blank=True, + null=True, + verbose_name=_("License (URL)") + ) + vol = models.IntegerField( + verbose_name=_("Volume"), + null=True, + blank=True + ) + supplvol = models.IntegerField( + verbose_name=_("Suppl Volume"), + null=True, + blank=True + ) + issue = models.IntegerField( + verbose_name=_("Issue"), + null=True, + blank=True + ) + supplno = models.IntegerField( + verbose_name=_("Suppl Num"), + null=True, + blank=True + ) + issid_part = models.TextField(_("Isid Part"), null=True, blank=True) + dateiso = models.TextField(_("Dateiso"), null=True, blank=True) + month = models.TextField(_("Month/Season"), null=True, blank=True) + fpage = models.TextField(_("First Page"), null=True, blank=True) + seq = models.TextField(_("@Seq"), null=True, blank=True) + lpage = models.TextField(_("Last Page"), null=True, blank=True) + elocatid = models.TextField(_("Elocation ID"), null=True, blank=True) + order = models.TextField(_("Order (In TOC)"), null=True, blank=True) + pagcount = models.TextField(_("Pag count"), null=True, blank=True) + doctopic = models.TextField(_("Doc Topic"), null=True, blank=True) + language = models.CharField( + _("Language"), + max_length=10, + choices=LANGUAGE, + null=True, + blank=True + ) + spsversion = models.TextField(_("Sps version"), null=True, blank=True) + artdate = models.DateField(_("Artdate"), null=True, blank=True) + ahpdate = models.DateField(_("Ahpdate"), null=True, blank=True) + + file_xml = models.FileField( + null=True, + blank=True, + verbose_name=_("Document xml"), + upload_to='generate_xml/', + ) + + text_xml = models.TextField(_("Text XML"), null=True, blank=True) + + content = StreamField([ + ('paragraph_with_language', ParagraphWithLanguageBlock()), + ('paragraph', ParagraphBlock()), + ('author_paragraph', AuthorParagraphBlock()), + ('aff_paragraph', AffParagraphBlock()), + ], blank=True, use_json_field=True) + + content_body = StreamField([ + ('paragraph', ParagraphBlock()), + ('paragraph_with_language', ParagraphWithLanguageBlock()), + ('compound_paragraph', CompoundParagraphBlock()), + ('image', ImageBlock()), + ('table', TableBlock()), + ], blank=True, use_json_field=True) + + content_back = StreamField([ + ('paragraph', ParagraphBlock()), + ('ref_paragraph', RefParagraphBlock()), + ], blank=True, use_json_field=True) + + panels = [ + FieldPanel("title"), + FieldPanel("file"), + FieldPanel("collection"), + AutocompletePanel("journal") + ] + + def __unicode__(self): + return f"{self.title} | {self.estatus}" + + def __str__(self): + return f"{self.title} | {self.estatus}" + + @property + def url_download(self): + return self.file_xml.url if self.file_xml else None + + @classmethod + def create(cls, title, doi): + obj = cls() + obj.title = title + obj.doi = doi + obj.save() + return obj + + @classmethod + def get( + cls, + title): + return cls.objects.get(title=title) + + @classmethod + def update(cls, title, estatus): + try: + obj = cls.get(title=title) + except (cls.DoesNotExist, ValueError): + pass + + obj.estatus = estatus + obj.save() + return obj + + base_form_class = CoreAdminModelForm + + +class UploadDocx(ArticleDocxMarkup): + panels_doc = [ + FieldPanel("title"), + FieldPanel("file"), + ] + + edit_handler = TabbedInterface( + [ + ObjectList(panels_doc, heading=_("Document")), + ] + ) + + class Meta: + proxy = True + + +class MarkupXML(ArticleDocxMarkup): + panels_front = [ + FieldPanel('content'), + #InlinePanel("element_docx", label=_("Elements Docx")), + ] + + panels_body = [ + FieldPanel('content_body'), + ] + + panels_back = [ + FieldPanel('content_back'), + ] + + panels_xml = [ + FieldPanel('file_xml', widget=ReadOnlyFileWidget()), + FieldPanel('text_xml'), + ] + + panels_details = [ + FieldPanel('collection'), + AutocompletePanel('journal'), + FieldPanel('journal_title'), + FieldPanel('short_title'), + FieldPanel('title_nlm'), + FieldPanel('acronym'), + FieldPanel('issn'), + FieldPanel('pissn'), + FieldPanel('eissn'), + FieldPanel('nimtitle'), + FieldPanel('pubname'), + FieldPanel('license'), + FieldPanel('vol'), + FieldPanel('supplvol'), + FieldPanel('issue'), + FieldPanel('supplno'), + FieldPanel('issid_part'), + + FieldPanel('dateiso'), + FieldPanel('month'), + FieldPanel('fpage'), + FieldPanel('seq'), + FieldPanel('lpage'), + FieldPanel('elocatid'), + FieldPanel('order'), + FieldPanel('pagcount'), + FieldPanel('doctopic'), + FieldPanel('language'), + FieldPanel('spsversion'), + FieldPanel('artdate'), + FieldPanel('ahpdate'), + ] + + edit_handler = TabbedInterface( + [ + ObjectList(panels_xml, heading="XML"), + ObjectList(panels_details, heading=_("Details")), + ObjectList(panels_front, heading="Front"), + ObjectList(panels_body, heading="Body"), + ObjectList(panels_back, heading="Back"), + ] + ) + + class Meta: + proxy = True \ No newline at end of file diff --git a/markup_doc/pkg_zip_builder.py b/markup_doc/pkg_zip_builder.py new file mode 100644 index 0000000..b3168ac --- /dev/null +++ b/markup_doc/pkg_zip_builder.py @@ -0,0 +1,183 @@ +from zipfile import ZipFile, ZIP_DEFLATED +import os, sys + +from packtools.sps.models.v2.article_assets import ArticleAssets +from packtools.sps.models.article_and_subarticles import ArticleAndSubArticles + +class PkgZipBuilder: + def __init__(self, xml_with_pre): + self.xml_with_pre = xml_with_pre + self.sps_pkg_name = xml_with_pre.sps_pkg_name + self.components = {} + self.texts = {} + + def build_sps_package( + self, + output_folder, + renditions, + translations, + main_paragraphs_lang, + issue_proc, + ): + """ + A partir do XML original ou gerado a partir do HTML, e + dos ativos digitais, todos registrados em MigratedFile, + cria o zip com nome no padrão SPS (ISSN-ACRON-VOL-NUM-SUPPL-ARTICLE) e + o armazena em SPSPkg.not_optimised_zip_file. + Neste momento o XML não contém pid v3. + """ + # gera nome de pacote padrão SPS ISSN-ACRON-VOL-NUM-SUPPL-ARTICLE + + sps_pkg_zip_path = os.path.join(output_folder, f"{self.sps_pkg_name}.zip") + + # cria pacote zip + with ZipFile(sps_pkg_zip_path, "w", compression=ZIP_DEFLATED) as zf: + + # A partir do XML, obtém os nomes dos arquivos dos ativos digitais + self._build_sps_package_add_assets(zf, issue_proc) + + # add renditions (pdf) to zip + result = self._build_sps_package_add_renditions( + zf, renditions, translations, main_paragraphs_lang + ) + self.texts.update(result) + + # adiciona XML em zip + self._build_sps_package_add_xml(zf) + + return sps_pkg_zip_path + + def _build_sps_package_add_renditions( + self, zf, renditions, translations, main_paragraphs_lang + ): + xml = ArticleAndSubArticles(self.xml_with_pre.xmltree) + xml_langs = [] + for item in xml.data: + if item.get("lang"): + xml_langs.append(item.get("lang")) + + pdf_langs = [] + + for rendition in renditions: + try: + if rendition.lang: + sps_filename = f"{self.sps_pkg_name}-{rendition.lang}.pdf" + pdf_langs.append(rendition.lang) + else: + sps_filename = f"{self.sps_pkg_name}.pdf" + pdf_langs.append(xml_langs[0]) + + zf.write(rendition.file.path, arcname=sps_filename) + + self.components[sps_filename] = { + "lang": rendition.lang, + "legacy_uri": rendition.original_href, + "component_type": "rendition", + } + except Exception as e: + exc_type, exc_value, exc_traceback = sys.exc_info() + self.components[rendition.original_name] = { + "failures": format_traceback(exc_traceback), + } + html_langs = list(translations.keys()) + try: + if main_paragraphs_lang: + html_langs.append(main_paragraphs_lang) + except Exception as e: + pass + + return { + "xml_langs": xml_langs, + "pdf_langs": pdf_langs, + "html_langs": html_langs, + } + + def _build_sps_package_add_assets(self, zf, issue_proc): + replacements = {} + subdir = os.path.join( + issue_proc.journal_proc.acron, + issue_proc.issue_folder, + ) + xml_assets = ArticleAssets(self.xml_with_pre.xmltree) + for xml_graphic in xml_assets.items: + try: + if replacements.get(xml_graphic.xlink_href): + continue + + basename = os.path.basename(xml_graphic.xlink_href) + name, ext = os.path.splitext(basename) + + found = False + + # procura a "imagem" no contexto do "issue" + for asset in issue_proc.find_asset(basename, name): + found = True + self._build_sps_package_add_asset( + zf, + asset, + xml_graphic, + replacements, + ) + + if not found: + self.components[xml_graphic.xlink_href] = { + "failures": "Not found", + } + + except Exception as e: + exc_type, exc_value, exc_traceback = sys.exc_info() + #self.components[xml_graphic.xlink_href] = { + # "failures": format_traceback(exc_traceback), + #} + print(e) + print(exc_traceback) + xml_assets.replace_names(replacements) + + def _build_sps_package_add_asset( + self, + zf, + asset, + xml_graphic, + replacements, + ): + try: + # obtém o nome do arquivo no padrão sps + sps_filename = xml_graphic.name_canonical(self.sps_pkg_name) + + # indica a troca de href original para o padrão SPS + replacements[xml_graphic.xlink_href] = sps_filename + + # adiciona arquivo ao zip + zf.write(asset.file.path, arcname=sps_filename) + + component_type = ( + "supplementary-material" + if xml_graphic.is_supplementary_material + else "asset" + ) + self.components[sps_filename] = { + "xml_elem_id": xml_graphic.id, + "legacy_uri": asset.original_href, + "component_type": component_type, + } + except Exception as e: + exc_type, exc_value, exc_traceback = sys.exc_info() + #self.components[xml_graphic.xlink_href] = { + # "failures": format_traceback(exc_traceback), + #} + print(e) + print(exc_traceback) + + def _build_sps_package_add_xml(self, zf): + try: + sps_xml_name = self.sps_pkg_name + ".xml" + zf.writestr(sps_xml_name, self.xml_with_pre.tostring(pretty_print=True)) + self.components[sps_xml_name] = {"component_type": "xml"} + except Exception as e: + exc_type, exc_value, exc_traceback = sys.exc_info() + #self.components[sps_xml_name] = { + #"component_type": "xml", + #"failures": format_traceback(exc_traceback), + #} + print(e) + print(exc_traceback) diff --git a/markup_doc/static/css/article.css b/markup_doc/static/css/article.css new file mode 100644 index 0000000..07c1ba4 --- /dev/null +++ b/markup_doc/static/css/article.css @@ -0,0 +1,4 @@ +@charset "UTF-8";/*! + * Article + */@-webkit-keyframes bounce{0%,100%,20%,50%,80%{-webkit-transform:translateY(0)}40%{-webkit-transform:translateY(30px)}60%{-webkit-transform:translateY(15px)}}@-moz-keyframes bounce{0%,100%,20%,50%,80%{-moz-transform:translateY(0)}40%{-moz-transform:translateY(30px)}60%{-moz-transform:translateY(15px)}}@-ms-keyframes bounce{0%,100%,20%,50%,80%{-ms-transform:translateY(0)}40%{-ms-transform:translateY(30px)}60%{-ms-transform:translateY(15px)}}@-o-keyframes bounce{0%,100%,20%,50%,80%{-o-transform:translateY(0)}40%{-o-transform:translateY(30px)}60%{-o-transform:translateY(15px)}}@keyframes bounce{0%,100%,20%,50%,80%{transform:translateY(0)}40%{transform:translateY(30px)}60%{transform:translateY(15px)}}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,30%,0);transform:translate3d(0,30%,0);visibility:visible;opacity:0}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}.scielo__shadow-1{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.scielo__shadow-2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.scielo__shadow-3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.scielo__shadow-4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.scielo__shadow-5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}.article .zindexFix{z-index:98!important}.article a.goto{white-space:nowrap;text-decoration:none}.article a.goto .glyphBtn{margin-right:-5px}.article .levelMenu{padding:18px 0;margin:0;height:100px}.article .levelMenu a.selected:after{border-bottom-color:#fff;display:none}.article .levelMenu .downloadOptions li,.article .levelMenu .downloadOptions ul{display:inline;margin:0;padding:0}.article .levelMenu .downloadOptions li{list-style:none}.article .levelMenu .downloadOptions ul.dropdown-menu{display:none;min-width:inherit;width:100%;border-color:#dedddb;font-size:.9em;border-top-left-radius:0;border-top-right-radius:0;border-top:0}.article .levelMenu .downloadOptions .group:hover ul.dropdown-menu{display:block}.article .levelMenu .downloadOptions .group:hover a.btn{color:#fff}.article .levelMenu .downloadOptions .group:hover a.btn .glyphBtn.pdfDownload{background-position:center -2800px}.article .levelMenu .downloadOptions .group:hover a.btn .glyphBtn.xmlDownload{background-position:center -2845px}.article .levelMenu .downloadOptions .group:hover a.btn .glyphBtn.epubDownload{background-position:center -3700px}.article .levelMenu .downloadOptions .btn-group .group:not(:first-child):not(:last-child) .btn{border-radius:0}.article .levelMenu .downloadOptions .btn-group .group:first-child:not(:last-child) .btn{border-bottom-right-radius:0;border-top-right-radius:0}.article .levelMenu .downloadOptions .btn-group .group:first-child:not(:last-child) .btn{border-bottom-right-radius:0;border-top-right-radius:0}.article .levelMenu .downloadOptions .btn-group .group:last-child:not(:first-child) .btn{border-bottom-left-radius:0;border-top-left-radius:0}.article .levelMenu .downloadOptions .group{display:block;float:left;position:relative}.article .levelMenu .downloadOptions .group a.btn{width:100%}.article .levelMenu .downloadOptions .group+.group{margin-left:-1px}.article .levelMenu .downloadOptions .btn{text-align:left}.article .share{display:flex;justify-content:flex-end;align-items:center;height:36px}.article .share a{margin:0 3px}.article .share .sendViaMail{margin-left:4px}.article .journalMenu .language{top:10px}.article .alternativeHeader{top:0!important}.article .alternativeHeader .mainNav{height:55px}.article .mainNav{height:55px}.article .mainMenu{top:-7px}.article .xref{display:inline-block;font-weight:700;text-align:center;color:#3867ce;cursor:pointer}.scielo__theme--dark .article .xref{color:#86acff}.scielo__theme--light .article .xref{color:#3867ce}.article .xref.big{margin-top:0;vertical-align:middle;color:#b67f00}.article .xref a{text-decoration:none;color:#b67f00}.article sup.xref{padding:4px 0 3px}.article .ref{position:relative;display:inline}@media screen and (max-width:575px){.article .ref{position:static}}.article .ref .refCtt{-webkit-box-shadow:2px 2px 7px 0 rgba(0,0,0,.2);-moz-box-shadow:2px 2px 7px 0 rgba(0,0,0,.2);box-shadow:2px 2px 7px 0 rgba(0,0,0,.2)}.article .ref .closed{display:none}.article .ref .opened{margin-top:1.4em;padding:14px;position:absolute;width:350px;height:auto!important;overflow-y:inherit!important;overflow-x:hidden;text-overflow:ellipsis;border-radius:4px;z-index:99;background:#3867ce;color:#fff}@media screen and (max-width:575px){.article .ref .opened{width:90%}}.scielo__theme--dark .article .ref .opened{background:#86acff;color:#333}.scielo__theme--light .article .ref .opened{background:#3867ce;color:#fff}.article .ref .opened:before{content:'';display:block;width:100%;position:absolute;height:.6em;margin-top:-1.6em;background:0 0;left:0}.article .ref .opened a{color:#fff!important}.article .ref .opened a:hover{text-decoration:underline}.article .ref .opened strong{display:block;margin:0 0 5px}.article .ref .opened .source{display:block;margin-top:5px}.article .ref .opened .refOverflow{overflow-x:hidden;text-overflow:ellipsis}.article .ref.footnote{letter-spacing:0}.article .ref.footnote .refCtt{padding:0}.article .ref.footnote .refCtt .refCttPadding{display:block;padding:14px}.article .ref.footnote .refCtt.opened{background:#fef5e8;border:1px solid #fce0b7;color:#333;padding:5px 10px}.article .ref.footnote .fn-title{display:block;text-transform:uppercase;color:#b67f00}.article .ref.footnote .footref{cursor:default}.article .ref.footnote .smallRef{font-size:1em;position:relative;display:block;padding:14px;width:100%;color:#fff;border:0;border-radius:0}.article .ref.footnote .smallRef .xref{position:absolute;top:12px;cursor:default}.article .ref.footnote .smallRef .xref:first-child{font-size:11px!important}.article .ref.footnote .smallRef .footrefCtt{display:block;padding-left:14px}.article .refList{margin:0;padding:0;width:100%}.article .refList *{line-height:130%}.article .refList [class*=" material-icons"],.article .refList [class^=material-icons]{line-height:1}.article .refList a{overflow-x:hidden;text-overflow:ellipsis}.article .refList.outer{padding-bottom:10px;overflow:hidden;-webkit-box-shadow:inset 0 -7px 7px -7px rgba(0,0,0,.2);box-shadow:inset 0 -7px 7px -7px rgba(0,0,0,.2)}.article .refList.full{position:absolute;height:auto!important;overflow:inherit!important;background:#fff;z-index:99;padding-bottom:0;-webkit-box-shadow:0 0 10px 0 rgba(0,0,0,.2);box-shadow:0 0 10px 0 rgba(0,0,0,.2)}.article .refList li{list-style:none;padding:16px 8px 16px 0;margin:0;width:100%;border-bottom:1px dotted #ccc}.scielo__theme--dark .article .refList li{border-bottom:1px dotted rgba(255,255,255,.3)}.scielo__theme--light .article .refList li{border-bottom:1px dotted #ccc}.article .refList li:last-child{background:0 0}.article .refList li:after{content:'';clear:both;display:block;height:1px;float:none;width:100%}.article .refList li.highlight{background-color:#f0f3fb}.article .refList li.highlight .closed{display:none}.article .refList li.highlight .opened{display:inline-block}.article .refList li strong{margin:0 0 10px}.article .refList sup{border-radius:30px}.article .refList .source{font-style:italic}.article .refList.footnote .xref.big{color:#b67f00}.article .ref-list .refList .xref{width:33px;padding:5px 10px;cursor:default;position:absolute;left:0;top:5px;margin-top:1%}.article .ref-list .refList .refCtt.opened{margin-top:1.4em}.article .ref-list .refList li{position:relative;padding-left:30px;text-overflow:ellipsis;z-index:1}.article .ref-list .refList div{display:block;overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto}.article .ref-list .refList div strong{display:inline}.article .ref-list .refList.footnote li{padding:0 8px 8px 0}.article .ref-list .refList.footnote li .xref.big{position:static;width:auto}.articleCtt{background:#f7f6f4}.scielo__theme--dark .articleCtt{background:#393939}.scielo__theme--light .articleCtt{background:#f7f6f4}.articleCtt hr{border:0;background:url(../img/dashline.png) bottom left repeat-x;height:1px;margin:50px 0}.articleCtt .sci-ico-fileFigure:before,.articleCtt .sci-ico-fileFormula:before,.articleCtt .sci-ico-fileTable:before{margin-left:-2px;margin-right:-4px}.articleCtt .open-asset-modal{white-space:nowrap}.articleCtt .container{position:relative}.articleCtt .articleBlock h1{margin:0;font-size:1.9em}.articleCtt .articleBlock a:active,.articleCtt .articleBlock a:focus,.articleCtt .articleBlock a:visited{text-decoration:none}.articleCtt .articleMeta,.articleCtt .editionMeta{text-align:center;font-size:.85em}.articleCtt .articleMeta span,.articleCtt .editionMeta span{font-size:1em;margin:0;font-weight:400;color:#a7a49e}.articleCtt .articleMeta .atricleLink,.articleCtt .editionMeta .atricleLink{width:18px;background-position:center -2576px}.articleCtt .articleMeta{line-height:24px}.articleCtt .articleMeta .sci-ico-cr,.articleCtt .articleMeta .sci-ico-public-domain{font-size:21px}.articleCtt .articleMeta label{margin-left:8px;width:10%;border:1px solid #e0e0df;cursor:pointer}.articleCtt .articleMeta div{display:inline}.articleCtt .articleMeta div:first-child{margin-right:60px}.articleCtt .articleMeta .doi{color:#1b92e4}.articleCtt .license{letter-spacing:-16.28px;vertical-align:middle;line-height:44px;white-space:nowrap;display:inline-block;margin-bottom:5px;cursor:pointer}.articleCtt .license [class*=" sci-ico-"],.articleCtt .license [class^=sci-ico-]{cursor:pointer;font-size:44px}.articleCtt .license [class*=" sci-ico-"].sci-ico-cc,.articleCtt .license [class^=sci-ico-].sci-ico-cc{margin-right:4px}.articleCtt .contribGroup{color:#403d39;margin:15px 10%;font-size:1.1em;text-align:center}.articleCtt .contribGroup a.btn-fechar{display:inline-block;border-radius:100%;cursor:pointer;width:30px;height:30px;font-size:86%;padding:5px 0;text-align:center;margin-top:10px}.articleCtt .contribGroup a.btn-fechar:hover{color:#fff}.articleCtt .contribGroup .sci-ico-emailOutlined{font-size:20px;vertical-align:baseline}.articleCtt .contribGroup .dropdown{display:inline-block;padding:0 10px}.articleCtt .contribGroup .dropdown .dropdown-toggle{white-space:nowrap}.articleCtt .contribGroup .dropdown .dropdown-menu{padding:0 20px 10px 20px;color:#fff;text-align:left;box-shadow:none;border:none}.articleCtt .contribGroup .dropdown .dropdown-menu strong{display:block;margin:20px 0 8px 0;font-size:11px;color:#00314c;text-transform:uppercase}.articleCtt .contribGroup .dropdown a{cursor:pointer}.articleCtt .contribGroup .dropdown a span{display:inline-block;padding:5px 0}.articleCtt .contribGroup .dropdown.open a{color:#fff}.articleCtt .contribGroup.contribGroupAlignLeft{text-align:left;margin-left:0;margin-top:0}.articleCtt .contribGroup.contribGroupAlignLeft .dropdown:first-child{margin-left:-10px}.articleCtt .linkGroup{position:relative;font-size:.85em}.articleCtt .linkGroup a.selected{position:relative}.articleCtt .linkGroup a.selected:after{content:'';display:block;position:absolute;bottom:-16px;left:4px;width:16px;height:7px;background:url(../img/articleContent-arrow.png) bottom center no-repeat;z-index:999}.articleCtt .floatInformation{margin-top:9px;border:1px solid #ddd;padding:15px;position:absolute;display:none;z-index:99;width:100%;background:#f7f6f4}.scielo__theme--dark .articleCtt .floatInformation{background:#393939}.scielo__theme--light .articleCtt .floatInformation{background:#f7f6f4}.articleCtt .floatInformation .close{margin-top:-7px}.articleCtt .floatInformation ul{margin:0;padding:0}.articleCtt .floatInformation li{list-style:none;margin-bottom:7px;padding-left:20px}.articleCtt .floatInformation li .xref:first-child{margin-left:-22px}.articleCtt .floatInformation .rowBlock{padding:7px 15px;background:url(../img/dashline.png) bottom left repeat-x}.articleCtt .floatInformation .rowBlock:last-child{background:0 0}.articleCtt .floatInformation h3{margin:0 0 10px}.articleCtt .articleTxt{position:relative;padding:0 50px 100px;margin-bottom:60px;overflow-x:hidden;box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23);border-radius:4px;background:#fff}.scielo__theme--dark .articleCtt .articleTxt{background:#333}.scielo__theme--light .articleCtt .articleTxt{background:#fff}.articleCtt .articleTxt .article-title,.articleCtt .articleTxt .articleSectionTitle{margin:25px 0 12px}@media screen and (max-width:575px){.articleCtt .articleTxt .article-title,.articleCtt .articleTxt .articleSectionTitle{font-weight:700;font-size:1.75rem;line-height:1.2em;letter-spacing:-.14px}}.articleCtt .articleTxt .articleBadge-editionMeta-doi-copyLink{font-size:.85em;margin:0;font-weight:400;padding:10px 0 0;text-align:center;min-height:35px;line-height:110%;color:#6c6b6b}.scielo__theme--dark .articleCtt .articleTxt .articleBadge-editionMeta-doi-copyLink{color:#adadad}.scielo__theme--light .articleCtt .articleTxt .articleBadge-editionMeta-doi-copyLink{color:#6c6b6b}.articleCtt .articleTxt .articleBadge-editionMeta-doi-copyLink ._articleBadge{font-weight:700;opacity:1}.articleCtt .articleTxt .articleBadge-editionMeta-doi-copyLink .group-doi{white-space:nowrap;display:inline-block}.articleCtt .articleTxt .articleBadge-editionMeta-doi-copyLink ._doi{color:#3867ce}@media screen and (max-width:575px){.articleCtt .articleTxt .articleBadge-editionMeta-doi-copyLink ._doi{display:table;white-space:pre-wrap;margin:12px 0}}.scielo__theme--dark .articleCtt .articleTxt .articleBadge-editionMeta-doi-copyLink ._doi{color:#86acff}.scielo__theme--light .articleCtt .articleTxt .articleBadge-editionMeta-doi-copyLink ._doi{color:#3867ce}.articleCtt .articleTxt .articleBadge-editionMeta-doi-copyLink .copyLink{white-space:nowrap;margin:0 0 8px 8px}.articleCtt .articleTxt .article-title{text-align:center}@media screen and (max-width:575px){.articleCtt .articleTxt .article-title{font-weight:700;font-size:1.75rem;line-height:1.2em;letter-spacing:-.14px}}.articleCtt .articleTxt .article-title .sci-ico-openAccess{margin-bottom:7px}.articleCtt .articleTxt .article-title .short-link{position:relative;visibility:hidden;cursor:pointer;text-decoration:none}.articleCtt .articleTxt .article-title .short-link [class^=sci-ico-]{vertical-align:baseline!important;margin-left:.5rem}.articleCtt .articleTxt .article-title .short-link:after{position:absolute;background:#34ad65;top:100%;left:0;right:0;bottom:0;z-index:2;text-align:center;font-family:scielo-glyphs!important;content:"\e924";color:#fff;font-size:20px;visibility:hidden;vertical-align:middle;display:flex;justify-content:center;align-items:center;border-radius:4px}.articleCtt .articleTxt .article-title .short-link.copyFeedback:after{top:0;visibility:visible}.articleCtt .articleTxt .article-title .ref .opened{margin-top:2.4em}.articleCtt .articleTxt .article-title .ref.footnote .xref:first-child{font-size:1.5rem}.articleCtt .articleTxt .article-title .ref.footnote .refCtt.opened{text-align:left;font-weight:400;font-size:18px;letter-spacing:inherit;background:#fef5e8;border:1px solid #fce0b7;color:#403d39}.articleCtt .articleTxt .article-title .ref.footnote .refCtt .refCttPadding{line-height:1.5rem}.articleCtt .articleTxt .article-title:hover .short-link{visibility:visible}.articleCtt .articleTxt h2.article-title{font-weight:400}.articleCtt .articleTxt .article-correction-title{margin:10px 15% 20px;border:2px solid #f5d431;padding:20px}.articleCtt .articleTxt .article-correction-title .panel-heading{font-size:13px;font-weight:700;text-align:left;padding:3px;padding:5px}.articleCtt .articleTxt .article-correction-title .panel-body{padding:0}.articleCtt .articleTxt .article-correction-title ul{margin:0;padding:0;text-align:left;font-size:14px}.articleCtt .articleTxt .article-correction-title li{list-style:none;padding-left:15px;position:relative}.articleCtt .articleTxt .article-correction-title li:before{content:'\00bb';font-weight:700;position:absolute;left:0}.articleCtt .articleTxt .article-correction-title a{font-weight:700}.articleCtt .articleTxt .article-correction-title a:hover{text-decoration:underline}.articleCtt .articleTxt .articleSection{padding:0 0 1px;background:url(../img/dashline.png) bottom left repeat-x}.articleCtt .articleTxt .articleSection .article-title{text-align:left}@media screen and (max-width:575px){.articleCtt .articleTxt .articleSection .article-title{font-weight:700;font-size:1.75rem;line-height:1.2em;letter-spacing:-.14px}}.articleCtt .articleTxt .articleSection:last-child{background:0 0}.articleCtt .articleTxt .articleSection .articleSignature{font-size:15px;font-style:italic}.articleCtt .articleTxt .articleSection .articleSignature small{display:block}.articleCtt .articleTxt .articleSection.articleSection--abstract h3,.articleCtt .articleTxt .articleSection.articleSection--resumen h3,.articleCtt .articleTxt .articleSection.articleSection--resumo h3{text-transform:lowercase!important}.articleCtt .articleTxt .articleSection.articleSection--abstract h3::first-letter,.articleCtt .articleTxt .articleSection.articleSection--resumen h3::first-letter,.articleCtt .articleTxt .articleSection.articleSection--resumo h3::first-letter{text-transform:uppercase!important}.articleCtt .articleTxt .paragraph{position:relative;margin-bottom:25px;font-size:1em;line-height:1.7em}.articleCtt .articleTxt .btn.primary{background:#fff;font-size:1.1em;padding:10px 15px}.articleCtt .articleTxt .btn.primary:hover{color:#fff}.articleCtt .articleTxt span.formula{display:block;margin:20px 0;padding:7px;text-align:center;font-size:2em;border-radius:3px}.articleCtt .articleTxt span.formula img{max-width:95%}.articleCtt .articleTxt p{margin:0 0 15px;padding:0;overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto}.articleCtt .articleTxt .articleReferral{display:flex;align-items:center;position:relative;margin-bottom:20px;padding:15px 50px 15px 140px;border:1px solid #f3f2e4;vertical-align:middle;min-height:168px}.articleCtt .articleTxt .articleReferral .arText{padding-left:25px}.articleCtt .articleTxt .articleReferral .arText h2{margin-top:0}.articleCtt .articleTxt .articleReferral .arText p{margin-bottom:0}.articleCtt .articleTxt .articleReferral .arPicture{position:relative;width:98px;margin-left:-120px}.articleCtt .articleTxt .articleReferral .arPicture small{font-size:62%;white-space:nowrap}.articleCtt .articleTxt .articleReferral .arPicture small span{display:block}.articleCtt .articleTxt .articleReferral.noPicture{padding:15px 40px}.articleCtt .articleTxt .articleReferral.noPicture .arText{padding-left:0}.articleCtt .articleTxt .articleReferral.biography .arPicture{margin-top:-40px}.articleCtt .articleMenu{position:absolute;margin:25px 0 90px 0;padding:0 15px 0 0;font-size:.85em}.articleCtt .articleMenu.fixed{position:fixed;top:50px}.articleCtt .articleMenu.fixedBottom{position:absolute;top:initial;bottom:50px}.articleCtt .articleMenu li{list-style:none;padding-left:17px}.articleCtt .articleMenu li:before{content:'\00bb';display:inline-block;width:12px;text-align:center;margin-left:-17px;vertical-align:middle;margin-bottom:5px;color:#6c6b6b}.scielo__theme--dark .articleCtt .articleMenu li:before{color:#adadad}.scielo__theme--light .articleCtt .articleMenu li:before{color:#6c6b6b}.articleCtt .articleMenu li.link-to-top{margin-top:20px}.articleCtt .articleMenu li.link-to-top:before{content:'';display:inline;width:auto}.articleCtt .articleMenu li.link-to-top a .circle{width:20px;height:20px;display:inline-block;color:#fff;border-radius:100px;padding:0 0 0 3px;font-size:125%}.articleCtt .articleMenu a{display:inline-block;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;margin-bottom:5px;text-decoration:none;color:#6c6b6b;text-transform:lowercase!important}.scielo__theme--dark .articleCtt .articleMenu a{color:#adadad}.scielo__theme--light .articleCtt .articleMenu a{color:#6c6b6b}.articleCtt .articleMenu a::first-letter{text-transform:uppercase!important}.articleCtt .articleMenu ul{margin:0;padding:0}.articleCtt .articleMenu li li{padding-left:7px}.articleCtt .articleMenu li li:before{display:none}.articleCtt .articleMenu li.selected:before,.articleCtt .articleMenu li.selected>a{font-weight:700;color:#00314c}.scielo__theme--dark .articleCtt .articleMenu li.selected:before,.scielo__theme--dark .articleCtt .articleMenu li.selected>a{color:#eee}.scielo__theme--light .articleCtt .articleMenu li.selected:before,.scielo__theme--light .articleCtt .articleMenu li.selected>a{color:#00314c}.articleCtt .articleMenu li.selected li a,.articleCtt .articleMenu li.selected li:before{color:#00314c}.scielo__theme--dark .articleCtt .articleMenu li.selected li a,.scielo__theme--dark .articleCtt .articleMenu li.selected li:before{color:#eee}.scielo__theme--light .articleCtt .articleMenu li.selected li a,.scielo__theme--light .articleCtt .articleMenu li.selected li:before{color:#00314c}.articleCtt .articleMenu a:active,.articleCtt .articleMenu a:focus,.articleCtt .articleMenu a:visited{text-decoration:none}.articleCtt .articleFigure{position:absolute;border:4px solid #efeeec}.articleCtt .table-notes a{display:block;padding:5px 0}.articleCtt .nav-tabs li:first-child{margin-left:15px}.articleCtt .nav-tabs a{border:1px solid #ddd;background:#fff}.articleCtt .nav-tabs a:hover{background:#f7f6f4}.scielo__theme--dark .articleCtt .nav-tabs a:hover{background:#393939}.scielo__theme--light .articleCtt .nav-tabs a:hover{background:#f7f6f4}.articleCtt .articleTimeline{margin:0 0 25px;padding:0;font-size:.9em}.articleCtt .articleTimeline li{display:inline-block;width:33%;height:40px;padding-left:25px;list-style:none}.articleCtt .articleTimeline li:before{content:'\00bb';margin-left:-25px;display:inline-block;width:22px;text-align:center}.articleCtt .documentLicense{margin:20px 0}.articleCtt .documentLicense .container-license{font-size:.8em;padding:25px;width:100%;background:#efeeec}.scielo__theme--dark .articleCtt .documentLicense .container-license{background:#414141}.scielo__theme--light .articleCtt .documentLicense .container-license{background:#efeeec}.articleCtt .documentLicense .container-license .row div:first-child{text-align:center}.articleCtt .documentLicense .container-license .row div:last-child{padding-left:0}.articleCtt .documentLicense .container-license a{cursor:pointer;display:inline-block}.articleCtt .documentLicense img{margin:0 auto;width:100%}.articleCtt .journalLicense .row{padding-bottom:25px;font-size:.9em}.articleCtt .share{text-align:center;margin-top:-3px;background:url(../img/dashline.png) bottom left repeat-x;padding-bottom:5px}.articleCtt .collapseBlock{font-size:.9em}.articleCtt .collapseBlock .collapseTitle{position:relative;display:block;background:url(../img/dashline.png) bottom left repeat-x;padding:7px 2px}.articleCtt .collapseBlock .collapseTitle .collapseIcon{position:absolute;right:0}.articleCtt .collapseBlock .collapseTitle:active,.articleCtt .collapseBlock .collapseTitle:focus{text-decoration:none}.articleCtt .collapseContent{background:#f7f6f5;font-size:.9em;padding:15px}.articleCtt .collapseContent ul{margin:0;padding:0}.articleCtt .collapseContent li{list-style:none;padding-left:15px;margin-bottom:5px}.articleCtt .collapseContent li:before{content:'\00bb';display:inline-block;width:13px;text-align:center;margin-left:-15px}.articleCtt .collapseContent .logos:before{width:22px;height:12px;display:inline-block;content:'';background:url(../img/button.glyphs.png) no-repeat}.articleCtt .collapseContent .logos.scielo:before{background-position:center -4556px}.articleCtt .collapseContent .logos.fapesp:before{background-position:center -4506px}.articleCtt .collapseContent .logos.google:before{background-position:center -4531px}.articleCtt .functionsBlock{position:absolute;right:0;z-index:99}.articleCtt .articleBadge{text-align:center}.articleCtt .articleBadge span{display:inline-block;padding:5px 10px;margin:0 0 15px 0;border-radius:4px;position:relative;font-size:20px}.articleCtt .articleBadge span:after{content:'';position:absolute;left:0;right:0;bottom:0}.articleCtt .articleCttLeft .article-title,.articleCtt .articleCttLeft .articleBadge,.articleCtt .articleCttLeft .articleMeta,.articleCtt .articleCttLeft .editionMeta{text-align:left!important}.articleCtt .articleCttLeft .contribGroup{margin-left:0;margin-right:0;text-align:left}.articleCtt .articleCttLeft .contribGroup .dropdown:first-child{margin-left:-10px}#translateArticleModal .modal-body{font-size:.9em;background:#f7f6f4}.scielo__theme--dark #translateArticleModal .modal-body{background:#393939}.scielo__theme--light #translateArticleModal .modal-body{background:#f7f6f4}#translateArticleModal .modal-footer{margin-top:0}#translateArticleModal .dashline{padding-bottom:5px;background:url(../img/dashline.png) bottom left repeat-x}#translateArticleModal th{padding:12px;border:1px solid #ddd;border-radius:4px;background:#fdfcf9}#translateArticleModal table{width:100%}#translateArticleModal td{padding:8px 10px;border-bottom:1px solid #dee5f5;text-align:center}#translateArticleModal th{vertical-align:top}.ModalDefault .tab-pane,.articleCtt .tab-pane{font-size:.9em}.ModalDefault .tab-pane p,.articleCtt .tab-pane p{margin:10px 0}.ModalDefault .tab-pane .center,.articleCtt .tab-pane .center{text-align:center}.ModalDefault .tab-pane label,.articleCtt .tab-pane label{font-weight:400;color:#888}.ModalDefault .tab-pane .big,.articleCtt .tab-pane .big{font-size:2em;font-weight:400}.ModalDefault .tab-pane table td,.ModalDefault .tab-pane table th,.articleCtt .tab-pane table td,.articleCtt .tab-pane table th{padding:7px 10px}.ModalDefault .tab-pane table th,.articleCtt .tab-pane table th{font-weight:400;color:#b7b7b7}.ModalDefault .tab-pane a.midGlyph,.articleCtt .tab-pane a.midGlyph{display:block;text-align:center}.ModalDefault .fig,.ModalDefault .table,.articleCtt .fig,.articleCtt .table{margin-top:10px;margin-bottom:40px;position:relative;width:initial}.ModalDefault .fig .col-md-8,.ModalDefault .table .col-md-8,.articleCtt .fig .col-md-8,.articleCtt .table .col-md-8{padding-top:10px}.ModalDefault .fig strong,.ModalDefault .table strong,.articleCtt .fig strong,.articleCtt .table strong{padding:0}.ModalDefault .fig .thumb,.ModalDefault .fig .thumbOff,.ModalDefault .table .thumb,.ModalDefault .table .thumbOff,.articleCtt .fig .thumb,.articleCtt .fig .thumbOff,.articleCtt .table .thumb,.articleCtt .table .thumbOff{height:160px;background-size:100% auto;text-indent:-5000px;background-color:#e5e4e3;cursor:pointer;border-radius:3px;position:relative;border:4px solid #ccc}.scielo__theme--dark .ModalDefault .fig .thumb,.scielo__theme--dark .ModalDefault .fig .thumbOff,.scielo__theme--dark .ModalDefault .table .thumb,.scielo__theme--dark .ModalDefault .table .thumbOff,.scielo__theme--dark .articleCtt .fig .thumb,.scielo__theme--dark .articleCtt .fig .thumbOff,.scielo__theme--dark .articleCtt .table .thumb,.scielo__theme--dark .articleCtt .table .thumbOff{border:4px solid rgba(255,255,255,.3)}.scielo__theme--light .ModalDefault .fig .thumb,.scielo__theme--light .ModalDefault .fig .thumbOff,.scielo__theme--light .ModalDefault .table .thumb,.scielo__theme--light .ModalDefault .table .thumbOff,.scielo__theme--light .articleCtt .fig .thumb,.scielo__theme--light .articleCtt .fig .thumbOff,.scielo__theme--light .articleCtt .table .thumb,.scielo__theme--light .articleCtt .table .thumbOff{border:4px solid #ccc}.ModalDefault .fig .thumb img,.ModalDefault .fig .thumbOff img,.ModalDefault .table .thumb img,.ModalDefault .table .thumbOff img,.articleCtt .fig .thumb img,.articleCtt .fig .thumbOff img,.articleCtt .table .thumb img,.articleCtt .table .thumbOff img{width:100%}.ModalDefault .fig .thumb .zoom,.ModalDefault .fig .thumbOff .zoom,.ModalDefault .table .thumb .zoom,.ModalDefault .table .thumbOff .zoom,.articleCtt .fig .thumb .zoom,.articleCtt .fig .thumbOff .zoom,.articleCtt .table .thumb .zoom,.articleCtt .table .thumbOff .zoom{position:absolute;bottom:10px;right:10px;border-radius:4px;font-size:24px;text-align:center;width:30px;height:30px;line-height:30px;text-indent:0;background-color:#3867ce;color:#fff}.scielo__theme--dark .ModalDefault .fig .thumb .zoom,.scielo__theme--dark .ModalDefault .fig .thumbOff .zoom,.scielo__theme--dark .ModalDefault .table .thumb .zoom,.scielo__theme--dark .ModalDefault .table .thumbOff .zoom,.scielo__theme--dark .articleCtt .fig .thumb .zoom,.scielo__theme--dark .articleCtt .fig .thumbOff .zoom,.scielo__theme--dark .articleCtt .table .thumb .zoom,.scielo__theme--dark .articleCtt .table .thumbOff .zoom{background-color:#86acff;color:#333}.scielo__theme--light .ModalDefault .fig .thumb .zoom,.scielo__theme--light .ModalDefault .fig .thumbOff .zoom,.scielo__theme--light .ModalDefault .table .thumb .zoom,.scielo__theme--light .ModalDefault .table .thumbOff .zoom,.scielo__theme--light .articleCtt .fig .thumb .zoom,.scielo__theme--light .articleCtt .fig .thumbOff .zoom,.scielo__theme--light .articleCtt .table .thumb .zoom,.scielo__theme--light .articleCtt .table .thumbOff .zoom{background-color:#3867ce;color:#fff}.ModalDefault .fig .thumbOff,.ModalDefault .table .thumbOff,.articleCtt .fig .thumbOff,.articleCtt .table .thumbOff{font-family:'Material Icons Outlined'!important;text-align:center;line-height:140px;font-size:100px;color:#6c6b6b;text-indent:0;overflow:hidden;background:#fff}.scielo__theme--dark .ModalDefault .fig .thumbOff,.scielo__theme--dark .ModalDefault .table .thumbOff,.scielo__theme--dark .articleCtt .fig .thumbOff,.scielo__theme--dark .articleCtt .table .thumbOff{background:#333;color:#adadad}.scielo__theme--light .ModalDefault .fig .thumbOff,.scielo__theme--light .ModalDefault .table .thumbOff,.scielo__theme--light .articleCtt .fig .thumbOff,.scielo__theme--light .articleCtt .table .thumbOff{background:#fff;color:#6c6b6b}.ModalDefault .fig .thumbOff:before,.ModalDefault .table .thumbOff:before,.articleCtt .fig .thumbOff:before,.articleCtt .table .thumbOff:before{content:"table_chart"}.ModalDefault .fig .thumbImg,.ModalDefault .table .thumbImg,.articleCtt .fig .thumbImg,.articleCtt .table .thumbImg{position:relative;overflow:hidden;box-sizing:border-box;height:140px;border:4px solid #ccc;border-radius:3px;background-color:#ccc;cursor:pointer}.scielo__theme--dark .ModalDefault .fig .thumbImg,.scielo__theme--dark .ModalDefault .table .thumbImg,.scielo__theme--dark .articleCtt .fig .thumbImg,.scielo__theme--dark .articleCtt .table .thumbImg{border:4px solid rgba(255,255,255,.3);background-color:rgba(255,255,255,.3)}.scielo__theme--light .ModalDefault .fig .thumbImg,.scielo__theme--light .ModalDefault .table .thumbImg,.scielo__theme--light .articleCtt .fig .thumbImg,.scielo__theme--light .articleCtt .table .thumbImg{border:4px solid #ccc;background-color:#ccc}.ModalDefault .fig .thumbImg img,.ModalDefault .table .thumbImg img,.articleCtt .fig .thumbImg img,.articleCtt .table .thumbImg img{width:100%;height:auto;min-height:131px;display:block}.ModalDefault .fig .thumbImg .zoom,.ModalDefault .table .thumbImg .zoom,.articleCtt .fig .thumbImg .zoom,.articleCtt .table .thumbImg .zoom{position:absolute;bottom:10px;right:10px;width:30px;height:30px;border-radius:4px;padding:5px;display:inline-block;font-size:24px;line-height:50%;background-color:#3867ce;color:#fff}.scielo__theme--dark .ModalDefault .fig .thumbImg .zoom,.scielo__theme--dark .ModalDefault .table .thumbImg .zoom,.scielo__theme--dark .articleCtt .fig .thumbImg .zoom,.scielo__theme--dark .articleCtt .table .thumbImg .zoom{background-color:#86acff;color:#333}.scielo__theme--light .ModalDefault .fig .thumbImg .zoom,.scielo__theme--light .ModalDefault .table .thumbImg .zoom,.scielo__theme--light .articleCtt .fig .thumbImg .zoom,.scielo__theme--light .articleCtt .table .thumbImg .zoom{background-color:#3867ce;color:#fff}.ModalDefault .fig .preview,.ModalDefault .table .preview,.articleCtt .fig .preview,.articleCtt .table .preview{position:absolute;border-radius:3px;border:4px solid #e5e4e3;background-color:#fff;top:0;right:0;z-index:99;padding:10px}.ModalDefault .fig .preview img,.ModalDefault .table .preview img,.articleCtt .fig .preview img,.articleCtt .table .preview img{width:100%}.ModalDefault .fig .figInfo,.ModalDefault .table .figInfo,.articleCtt .fig .figInfo,.articleCtt .table .figInfo{padding:10px 10px 10px 45px;line-height:1.4em;color:#8a8987;position:relative}.ModalDefault .fig .figInfo .glyphBtn,.ModalDefault .table .figInfo .glyphBtn,.articleCtt .fig .figInfo .glyphBtn,.articleCtt .table .figInfo .glyphBtn{position:absolute;top:10px;margin-left:-34px}.ModalDefault .formula,.articleCtt .formula{text-align:center;font-family:"Times New Roman",Times,serif;margin-bottom:15px}.ModalDefault .formula span,.articleCtt .formula span{font-family:Arial;font-weight:700;font-size:16px;display:block;width:100%}.ModalDefault .formula .formula-container,.articleCtt .formula .formula-container{width:100%;display:flex;align-content:center;align-items:center;position:relative;flex-direction:column}.ModalDefault .formula .formula-container .MathJax_Display,.ModalDefault .formula .formula-container .MathJax_SVG,.ModalDefault .formula .formula-container .MathJax_SVG_Display,.ModalDefault .formula .formula-container .formula-body,.articleCtt .formula .formula-container .MathJax_Display,.articleCtt .formula .formula-container .MathJax_SVG,.articleCtt .formula .formula-container .MathJax_SVG_Display,.articleCtt .formula .formula-container .formula-body{flex:99;font-size:1.4rem!important}.ModalDefault .formula .formula-container>span,.articleCtt .formula .formula-container>span{flex:1}.ModalDefault .formula .formula-container .label,.articleCtt .formula .formula-container .label{flex:1;color:#000;font-size:1.4rem;display:block;width:auto}.ModalDefault .formula .formula-container .label:first-child,.articleCtt .formula .formula-container .label:first-child{left:0}.ModalDefault .formula .formula-container .label:last-child,.articleCtt .formula .formula-container .label:last-child{right:0}.ModalDefault .formula svg,.articleCtt .formula svg{display:block;width:100%}.ModalDefault .modal-center{text-align:center}.ModalDefault .md-list{margin:0;padding:0;list-style:none}.ModalDefault .md-list li{margin-bottom:4px}.ModalDefault .md-list li:last-child{margin-bottom:0}.ModalDefault .md-list li.colspan3{margin-bottom:10px}.ModalDefault .md-list li.colspan3 a{display:flex;vertical-align:middle;justify-content:center;align-items:center;height:63px;white-space:normal;overflow:hidden}.ModalDefault .md-list.inline li{float:left;min-width:18%;margin-right:10px}.ModalDefault .md-tabs{margin:0;padding:0}.ModalDefault .md-tabs>li{display:flex;align-items:center;justify-content:center;text-align:center;padding:0}.ModalDefault .md-tabs>li a{padding:5px;display:inline-block;margin:0;border:none;color:#7f7a71}.ModalDefault .md-tabs>li a:focus,.ModalDefault .md-tabs>li a:hover{background:0 0}.ModalDefault .md-tabs>li.active a:focus,.ModalDefault .md-tabs>li.active a:hover{border:none;background:0 0}.ModalDefault .md-tabs>li.active .figureIconGray{background-position:center -4414px}.ModalDefault .md-tabs>li.active .tableIconGray{background-position:center -4368px}.ModalDefault .md-tabs>li .glyphBtn{width:40px;height:40px}.ModalDefault .fig,.ModalDefault .table{margin-top:20px;margin-bottom:20px}.ModalTutors .info{padding:28px 0;border-bottom:1px dotted #ccc}.scielo__theme--dark .ModalTutors .info{border-bottom:1px dotted rgba(255,255,255,.3)}.scielo__theme--light .ModalTutors .info{border-bottom:1px dotted #ccc}.ModalTutors .info:last-child{border-bottom:0}.ModalTutors .info:first-child{padding-top:0}.ModalTutors .info h3{margin:0 0 15px;font-size:1.429em;font-weight:400}.ModalTutors .info .tutors{margin-bottom:25px}.ModalTutors .info .tutors strong:first-child{font-size:1.071em}.ModalTutors .info .tutors:last-child{margin-bottom:0}.ModalTutors ul li{margin-top:10px;border-color:#e0e0df}.ModalTutors ul li.inline li{display:inline}#ModalDownloads strong{display:inline-block;padding:15px 0}#ModalDownloads .glyphBtn{width:40px;height:40px}#ModalDownloads [class^=sci-ico-file]{line-height:40px!important;font-size:40px}#ModalArticles .md-tabs,#ModalMetrics .md-tabs{margin:0 0 25px}#ModalArticles .md-tabs>li,#ModalMetrics .md-tabs>li{min-height:50px}#ModalMetrics .outlineFadeLink{margin:0 0 20px;padding:12px;font-size:15px;display:block;text-align:center}#ModalArticles #how2cite-export{margin:20px 0 2px;background:url(../img/dashline.png) top left repeat-x}#ModalArticles #how2cite-export .col-md-2.col-sm-2{width:20%}#ModalArticles .outlineFadeLink{margin-left:0}#ModalArticles .download{display:block}#ModalArticles #citation-ctt{position:absolute;top:-5000px}#ModalArticles #citationCut{position:absolute;top:-5000px}.ModalFigs .modal-title .sci-ico-fileFigure,.ModalFigs .modal-title .sci-ico-fileTable,.ModalTables .modal-title .sci-ico-fileFigure,.ModalTables .modal-title .sci-ico-fileTable{font-size:24px}.ModalFigs .link-newWindow,.ModalTables .link-newWindow{text-decoration:none}.ModalFigs .link-newWindow:hover,.ModalTables .link-newWindow:hover{opacity:1}.ModalFigs .modal-footer,.ModalTables .modal-footer{margin-top:0;text-align:left;background:#f7f6f4}.scielo__theme--dark .ModalFigs .modal-footer,.scielo__theme--dark .ModalTables .modal-footer{background:#393939}.scielo__theme--light .ModalFigs .modal-footer,.scielo__theme--light .ModalTables .modal-footer{background:#f7f6f4}.ModalFigs .modal-title{width:calc(100% - 70px)}.ModalFigs img{float:none}.ModalFigs .modal-body{padding:1rem}.ModalTables .modal-body{overflow:auto}.ModalTables .modal-body:after{content:'';position:absolute;top:0;bottom:0;left:0;right:0;background:#fff url(../img/list.loading.gif) center center no-repeat}.scielo__theme--dark .ModalTables .modal-body:after{background:#333 url(../img/list.loading.gif) center center no-repeat}.scielo__theme--light .ModalTables .modal-body:after{background:#fff url(../img/list.loading.gif) center center no-repeat}.ModalTables .modal-body.cached:after{display:none}.ModalTables .table{margin-top:0;font-size:14px;position:relative;z-index:1}.ModalTables .table .autoWidth{width:auto}.ModalTables .table .striped{background-color:#f8f8f8}.ModalTables .table .inline-graphic{width:100%}.ModalTables .table-hover .table>tbody>tr:hover>td,.ModalTables .table-hover .table>tbody>tr:hover>th{background-color:#f0f3fb}.ModalTables .table-hover .table>tbody>tr:hover>td.striped,.ModalTables .table-hover .table>tbody>tr:hover>th.striped{background-color:#e8eaf2}.ModalTables .ref-list h2{font-size:14px}.ModalTables .ref-list .refList .xref.big{padding:5px 10px}.ModalTables .refList li{padding-bottom:0}.ModalTables .xref{cursor:text}#ModalRelatedArticles .inline li{min-width:48%}#ModalRelatedArticles .inline li:nth-child(2),#ModalRelatedArticles .inline li:nth-child(4){margin-right:0}#ModalVersionsTranslations .modal-body .md-body-dashVertical{display:inline-block;min-height:150px;background:url(../img/dashline.v.png) top center repeat-y}#ModalVersionsTranslations strong{display:inline-block;padding:15px 0}.ModalDefault .md-list li a.lattes,.ModalDefault .md-list li a.researcherid,.ModalDefault .md-list li a.scopus,.articleCtt .contribGroup .btnContribLinks.lattes,.articleCtt .contribGroup .btnContribLinks.researcherid,.articleCtt .contribGroup .btnContribLinks.scopus{padding-left:30px}.ModalDefault .md-list li a.scopus,.articleCtt .contribGroup .btnContribLinks.scopus{background:url(../img/authorIcon-scopus.png) 10px center no-repeat}.ModalDefault .md-list li a.lattes,.articleCtt .contribGroup .btnContribLinks.lattes{background:url(../img/authorIcon-lattes.png) 10px center no-repeat}.ModalDefault .md-list li a.researcherid,.articleCtt .contribGroup .btnContribLinks.researcherid{background:url(../img/authorIcon-researcherid.png) 10px center no-repeat}.ModalDefault .md-list li a.lattes-matteWhite,.articleCtt .contribGroup .btnContribLinks.lattes-matteWhite{background:url(../img/authorIcon-lattes-matteWhite.png) 10px center no-repeat}.articleCtt .article-title.page-header-title,.articleCtt .only-renditions-available p{text-align:center}.articleCtt .only-renditions-available .jumbotron{background-color:#f6f8fa;margin-top:35px}.levelMenu{background:#f7f6f4}.scielo__theme--dark .levelMenu{background:#393939}.scielo__theme--light .levelMenu{background:#f7f6f4}.levelMenu .btn{min-height:38px}.levelMenu .btn.group{width:auto;padding-left:16px!important;padding-right:16px!important}.levelMenu .btn:hover{color:#fff}.levelMenu .btn:hover [class^=sci-ico-]{color:#fff}.levelMenu .dropdown-menu a.current{position:relative;width:100%;font-weight:700}.levelMenu .dropdown-menu a.current:after{content:"✓";display:inline-block;position:absolute;right:5px}.levelMenu-xs .btn-group.btn-group-nav-mobile{width:100%;display:table}.levelMenu-xs .btn-group.btn-group-nav-mobile>.btn{display:table-cell;width:60%}.levelMenu-xs .btn-group.btn-group-nav-mobile>.btn:first-of-type{width:20%}.levelMenu-xs .btn-group.btn-group-nav-mobile>.btn:last-of-type{width:20%}.levelMenu-xs .btn-group.btn-group-nav-mobile>.btn .sci-ico-socialOther{display:inline-block;width:70%}.levelMenu-xs .btn-group.btn-group-nav-mobile-content{width:100%;display:table;padding:5px 2px}.levelMenu-xs .btn-group.btn-group-nav-mobile-content>.dropdown{display:table-cell;width:33%;padding-right:4px}.levelMenu-xs .btn-group.btn-group-nav-mobile-content>.dropdown:last-child{padding-right:0}.levelMenu-xs .btn-group.btn-group-nav-mobile-content>.dropdown:last-child .btn span{width:auto}.levelMenu-xs .btn-group.btn-group-nav-mobile-content>.dropdown:last-child .btn span:nth-child(2){width:55%}.levelMenu-xs .btn-group.btn-group-nav-mobile-content>.dropdown .btn{width:100%;position:relative}.levelMenu-xs .btn-group.btn-group-nav-mobile-content>.dropdown .btn span{width:90%;display:inline-block}.levelMenu-xs .btn-group.btn-group-nav-mobile-content>.dropdown .btn span:last-child{width:auto}.levelMenu-xs .btn-group.btn-group-nav-mobile-content>.dropdown .btn span.caret{position:absolute;right:10px;top:17px}.ref .xref a{color:#b67f00;pointer-events:none}.scielo__theme--dark .ref .xref a{color:#b67f00}.scielo__theme--light .ref .xref a{color:#b67f00}.ref .xref.xrefblue a{color:#3867ce}.scielo__theme--dark .ref .xref.xrefblue a{color:#86acff}.scielo__theme--light .ref .xref.xrefblue a{color:#3867ce}@media screen and (max-width:575px){.ref{position:static}}.ref .opened{background:#3867ce;color:#fff}@media screen and (max-width:575px){.ref .opened{width:90%;margin-left:5%}}.scielo__theme--dark .ref .opened{background:#86acff;color:#333}.scielo__theme--light .ref .opened{background:#3867ce;color:#fff}.h5,h3,h4,h5:not(.modal-title){margin:25px 0 12px}.modal .info{padding-left:24px}.modal .info div{margin-bottom:16px}.modal .info span{list-style:disc;display:list-item}.xref{color:#3867ce}.scielo__theme--dark .xref{color:#86acff}.scielo__theme--light .xref{color:#3867ce} +/*# sourceMappingURL=article.css.map */ \ No newline at end of file diff --git a/markup_doc/static/css/bootstrap.min.css b/markup_doc/static/css/bootstrap.min.css new file mode 100644 index 0000000..efab8ae --- /dev/null +++ b/markup_doc/static/css/bootstrap.min.css @@ -0,0 +1,10 @@ +@charset "UTF-8";/*! + * Bootstrap v5.0.0-beta1 (https://getbootstrap.com/) + * Copyright 2011-2020 The Bootstrap Authors + * Copyright 2011-2020 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */@import url(https://fonts.googleapis.com/css2?family=Arapey&family=Noto+Sans:ital,wght@0,400;0,700;1,400;1,700&display=swap);@import url(https://fonts.googleapis.com/icon?family=Material+Icons&display=swap);@import url(https://fonts.googleapis.com/icon?family=Material+Icons+Outlined);@-webkit-keyframes bounce{0%,100%,20%,50%,80%{-webkit-transform:translateY(0)}40%{-webkit-transform:translateY(30px)}60%{-webkit-transform:translateY(15px)}}@-moz-keyframes bounce{0%,100%,20%,50%,80%{-moz-transform:translateY(0)}40%{-moz-transform:translateY(30px)}60%{-moz-transform:translateY(15px)}}@-ms-keyframes bounce{0%,100%,20%,50%,80%{-ms-transform:translateY(0)}40%{-ms-transform:translateY(30px)}60%{-ms-transform:translateY(15px)}}@-o-keyframes bounce{0%,100%,20%,50%,80%{-o-transform:translateY(0)}40%{-o-transform:translateY(30px)}60%{-o-transform:translateY(15px)}}@keyframes bounce{0%,100%,20%,50%,80%{transform:translateY(0)}40%{transform:translateY(30px)}60%{transform:translateY(15px)}}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,30%,0);transform:translate3d(0,30%,0);visibility:visible;opacity:0}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}.scielo__shadow-1{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24)}.scielo__shadow-2{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.scielo__shadow-3{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.scielo__shadow-4{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.scielo__shadow-5{box-shadow:0 19px 38px rgba(0,0,0,.3),0 15px 12px rgba(0,0,0,.22)}:root{--scielo-blue:#3867CE;--scielo-indigo:#6628EE;--scielo-purple:#8D5DF8;--scielo-pink:#C32AA3;--scielo-red:#C63800;--scielo-orange:#FF7E4A;--scielo-yellow:#B67F00;--scielo-green:#2C9D45;--scielo-teal:#30A47F;--scielo-cyan:#2195A9;--scielo-white:#fff;--scielo-gray:#333;--scielo-gray-dark:#00314C;--scielo-primary:#3867CE;--scielo-secondary:#fff;--scielo-success:#2C9D45;--scielo-info:#2195A9;--scielo-warning:#B67F00;--scielo-danger:#C63800;--scielo-light:#F7F6F4;--scielo-dark:#393939;--scielo-font-sans-serif:"Noto Sans",sans-serif;--scielo-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--scielo-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--scielo-font-sans-serif);font-size:1rem;font-weight:400;line-height:1.5;color:#393939;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#3867ce;text-decoration:underline}a:hover{color:#2d52a5}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--scielo-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#c32aa3;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#393939;border-radius:.12 .5rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:rgba(0,0,0,.6);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:rgba(0,0,0,.6)}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.3);border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:rgba(0,0,0,.6)}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-right:var(--scielo-gutter-x,.5rem);padding-left:var(--scielo-gutter-x,.5rem);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:100%}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--scielo-gutter-x:1rem;--scielo-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(var(--scielo-gutter-y) * -1);margin-right:calc(var(--scielo-gutter-x)/ -2);margin-left:calc(var(--scielo-gutter-x)/ -2)}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--scielo-gutter-x)/ 2);padding-left:calc(var(--scielo-gutter-x)/ 2);margin-top:var(--scielo-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333%}.col-2{flex:0 0 auto;width:16.66667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333%}.col-5{flex:0 0 auto;width:41.66667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333%}.col-8{flex:0 0 auto;width:66.66667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333%}.col-11{flex:0 0 auto;width:91.66667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}.g-0,.gx-0{--scielo-gutter-x:0}.g-0,.gy-0{--scielo-gutter-y:0}.g-1,.gx-1{--scielo-gutter-x:0.25rem}.g-1,.gy-1{--scielo-gutter-y:0.25rem}.g-2,.gx-2{--scielo-gutter-x:0.5rem}.g-2,.gy-2{--scielo-gutter-y:0.5rem}.g-3,.gx-3{--scielo-gutter-x:1rem}.g-3,.gy-3{--scielo-gutter-y:1rem}.g-4,.gx-4{--scielo-gutter-x:1.5rem}.g-4,.gy-4{--scielo-gutter-y:1.5rem}.g-5,.gx-5{--scielo-gutter-x:3rem}.g-5,.gy-5{--scielo-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333%}.col-sm-2{flex:0 0 auto;width:16.66667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333%}.col-sm-5{flex:0 0 auto;width:41.66667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333%}.col-sm-8{flex:0 0 auto;width:66.66667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333%}.col-sm-11{flex:0 0 auto;width:91.66667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}.g-sm-0,.gx-sm-0{--scielo-gutter-x:0}.g-sm-0,.gy-sm-0{--scielo-gutter-y:0}.g-sm-1,.gx-sm-1{--scielo-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--scielo-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--scielo-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--scielo-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--scielo-gutter-x:1rem}.g-sm-3,.gy-sm-3{--scielo-gutter-y:1rem}.g-sm-4,.gx-sm-4{--scielo-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--scielo-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--scielo-gutter-x:3rem}.g-sm-5,.gy-sm-5{--scielo-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333%}.col-md-2{flex:0 0 auto;width:16.66667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333%}.col-md-5{flex:0 0 auto;width:41.66667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333%}.col-md-8{flex:0 0 auto;width:66.66667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333%}.col-md-11{flex:0 0 auto;width:91.66667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}.g-md-0,.gx-md-0{--scielo-gutter-x:0}.g-md-0,.gy-md-0{--scielo-gutter-y:0}.g-md-1,.gx-md-1{--scielo-gutter-x:0.25rem}.g-md-1,.gy-md-1{--scielo-gutter-y:0.25rem}.g-md-2,.gx-md-2{--scielo-gutter-x:0.5rem}.g-md-2,.gy-md-2{--scielo-gutter-y:0.5rem}.g-md-3,.gx-md-3{--scielo-gutter-x:1rem}.g-md-3,.gy-md-3{--scielo-gutter-y:1rem}.g-md-4,.gx-md-4{--scielo-gutter-x:1.5rem}.g-md-4,.gy-md-4{--scielo-gutter-y:1.5rem}.g-md-5,.gx-md-5{--scielo-gutter-x:3rem}.g-md-5,.gy-md-5{--scielo-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333%}.col-lg-2{flex:0 0 auto;width:16.66667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333%}.col-lg-5{flex:0 0 auto;width:41.66667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333%}.col-lg-8{flex:0 0 auto;width:66.66667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333%}.col-lg-11{flex:0 0 auto;width:91.66667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}.g-lg-0,.gx-lg-0{--scielo-gutter-x:0}.g-lg-0,.gy-lg-0{--scielo-gutter-y:0}.g-lg-1,.gx-lg-1{--scielo-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--scielo-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--scielo-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--scielo-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--scielo-gutter-x:1rem}.g-lg-3,.gy-lg-3{--scielo-gutter-y:1rem}.g-lg-4,.gx-lg-4{--scielo-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--scielo-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--scielo-gutter-x:3rem}.g-lg-5,.gy-lg-5{--scielo-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333%}.col-xl-2{flex:0 0 auto;width:16.66667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333%}.col-xl-5{flex:0 0 auto;width:41.66667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333%}.col-xl-8{flex:0 0 auto;width:66.66667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333%}.col-xl-11{flex:0 0 auto;width:91.66667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}.g-xl-0,.gx-xl-0{--scielo-gutter-x:0}.g-xl-0,.gy-xl-0{--scielo-gutter-y:0}.g-xl-1,.gx-xl-1{--scielo-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--scielo-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--scielo-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--scielo-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--scielo-gutter-x:1rem}.g-xl-3,.gy-xl-3{--scielo-gutter-y:1rem}.g-xl-4,.gx-xl-4{--scielo-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--scielo-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--scielo-gutter-x:3rem}.g-xl-5,.gy-xl-5{--scielo-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333%}.col-xxl-2{flex:0 0 auto;width:16.66667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333%}.col-xxl-5{flex:0 0 auto;width:41.66667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333%}.col-xxl-8{flex:0 0 auto;width:66.66667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333%}.col-xxl-11{flex:0 0 auto;width:91.66667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333%}.offset-xxl-2{margin-left:16.66667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333%}.offset-xxl-5{margin-left:41.66667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333%}.offset-xxl-8{margin-left:66.66667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333%}.offset-xxl-11{margin-left:91.66667%}.g-xxl-0,.gx-xxl-0{--scielo-gutter-x:0}.g-xxl-0,.gy-xxl-0{--scielo-gutter-y:0}.g-xxl-1,.gx-xxl-1{--scielo-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--scielo-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--scielo-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--scielo-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--scielo-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--scielo-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--scielo-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--scielo-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--scielo-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--scielo-gutter-y:3rem}}.table{--scielo-table-bg:transparent;--scielo-table-striped-color:#393939;--scielo-table-striped-bg:rgba(0, 0, 0, 0.05);--scielo-table-active-color:#393939;--scielo-table-active-bg:rgba(0, 0, 0, 0.1);--scielo-table-hover-color:#393939;--scielo-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#393939;vertical-align:top;border-color:rgba(0,0,0,.3)}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--scielo-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--scielo-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:last-child)>:last-child>*{border-bottom-color:currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-striped>tbody>tr:nth-of-type(odd){--scielo-table-accent-bg:var(--scielo-table-striped-bg);color:var(--scielo-table-striped-color)}.table-active{--scielo-table-accent-bg:var(--scielo-table-active-bg);color:var(--scielo-table-active-color)}.table-hover>tbody>tr:hover{--scielo-table-accent-bg:var(--scielo-table-hover-bg);color:var(--scielo-table-hover-color)}.table-primary{--scielo-table-bg:#d7e1f5;--scielo-table-striped-bg:#ccd6e9;--scielo-table-striped-color:#000;--scielo-table-active-bg:#c2cbdd;--scielo-table-active-color:#000;--scielo-table-hover-bg:#c7d0e3;--scielo-table-hover-color:#000;color:#000;border-color:#c2cbdd}.table-secondary{--scielo-table-bg:white;--scielo-table-striped-bg:#f2f2f2;--scielo-table-striped-color:#000;--scielo-table-active-bg:#e6e6e6;--scielo-table-active-color:#000;--scielo-table-hover-bg:#ececec;--scielo-table-hover-color:#000;color:#000;border-color:#e6e6e6}.table-success{--scielo-table-bg:#d5ebda;--scielo-table-striped-bg:#cadfcf;--scielo-table-striped-color:#000;--scielo-table-active-bg:#c0d4c4;--scielo-table-active-color:#000;--scielo-table-hover-bg:#c5d9ca;--scielo-table-hover-color:#000;color:#000;border-color:#c0d4c4}.table-info{--scielo-table-bg:#d3eaee;--scielo-table-striped-bg:#c8dee2;--scielo-table-striped-color:#000;--scielo-table-active-bg:#bed3d6;--scielo-table-active-color:#000;--scielo-table-hover-bg:#c3d8dc;--scielo-table-hover-color:#000;color:#000;border-color:#bed3d6}.table-warning{--scielo-table-bg:#f0e5cc;--scielo-table-striped-bg:#e4dac2;--scielo-table-striped-color:#000;--scielo-table-active-bg:#d8ceb8;--scielo-table-active-color:#000;--scielo-table-hover-bg:#ded4bd;--scielo-table-hover-color:#000;color:#000;border-color:#d8ceb8}.table-danger{--scielo-table-bg:#f4d7cc;--scielo-table-striped-bg:#e8ccc2;--scielo-table-striped-color:#000;--scielo-table-active-bg:#dcc2b8;--scielo-table-active-color:#000;--scielo-table-hover-bg:#e2c7bd;--scielo-table-hover-color:#000;color:#000;border-color:#dcc2b8}.table-light{--scielo-table-bg:#F7F6F4;--scielo-table-striped-bg:#ebeae8;--scielo-table-striped-color:#000;--scielo-table-active-bg:#dedddc;--scielo-table-active-color:#000;--scielo-table-hover-bg:#e4e4e2;--scielo-table-hover-color:#000;color:#000;border-color:#dedddc}.table-dark{--scielo-table-bg:#393939;--scielo-table-striped-bg:#434343;--scielo-table-striped-color:#fff;--scielo-table-active-bg:#4d4d4d;--scielo-table-active-color:#fff;--scielo-table-hover-bg:#484848;--scielo-table-hover-color:#fff;color:#fff;border-color:#4d4d4d}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:rgba(0,0,0,.6)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#393939;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.4);appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#393939;background-color:#fff;border-color:#9cb3e7;outline:0;box-shadow:0 0 0 .25rem rgba(56,103,206,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::placeholder{color:rgba(0,0,0,.6);opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#efeeec;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:#393939;background-color:#efeeec;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#e3e2e0}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:#393939;background-color:#efeeec;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#e3e2e0}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#393939;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.12 .5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{max-width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 1rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#393939;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23414141' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid rgba(0,0,0,.4);border-radius:.25rem;appearance:none}.form-select:focus{border-color:#9cb3e7;outline:0;box-shadow:0 0 0 .25rem rgba(56,103,206,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{color:rgba(0,0,0,.6);background-color:#efeeec}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #393939}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);appearance:none;color-adjust:exact;transition:background-color .15s ease-in-out,background-position .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-check-input{transition:none}}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#9cb3e7;outline:0;box-shadow:0 0 0 .25rem rgba(56,103,206,.25)}.form-check-input:checked{background-color:#3867ce;border-color:#3867ce}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#3867ce;border-color:#3867ce;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%239cb3e7'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(56,103,206,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(56,103,206,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#3867ce;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#c3d1f0}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:rgba(0,0,0,.3);border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#3867ce;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#c3d1f0}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:rgba(0,0,0,.3);border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:rgba(0,0,0,.5)}.form-range:disabled::-moz-range-thumb{background-color:rgba(0,0,0,.5)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);padding:1rem .75rem}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#393939;text-align:center;white-space:nowrap;background-color:#efeeec;border:1px solid rgba(0,0,0,.4);border-radius:.25rem}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.12 .5rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:1.75rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#2c9d45}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#000;background-color:rgba(44,157,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#2c9d45;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%232C9D45' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#2c9d45;box-shadow:0 0 0 .25rem rgba(44,157,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#2c9d45;padding-right:calc(.75em + 2.3125rem);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='%23414141' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%232C9D45' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 1.75rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#2c9d45;box-shadow:0 0 0 .25rem rgba(44,157,69,.25)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#2c9d45}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#2c9d45}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(44,157,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#2c9d45}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group .form-control.is-valid,.input-group .form-select.is-valid,.was-validated .input-group .form-control:valid,.was-validated .input-group .form-select:valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#c63800}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(198,56,0,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#c63800;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23C63800'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23C63800' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#c63800;box-shadow:0 0 0 .25rem rgba(198,56,0,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#c63800;padding-right:calc(.75em + 2.3125rem);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='%23414141' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23C63800'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23C63800' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 1.75rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#c63800;box-shadow:0 0 0 .25rem rgba(198,56,0,.25)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#c63800}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#c63800}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(198,56,0,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#c63800}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group .form-control.is-invalid,.input-group .form-select.is-invalid,.was-validated .input-group .form-control:invalid,.was-validated .input-group .form-select:invalid{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#393939;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#393939}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(56,103,206,.25)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#3867ce;border-color:#3867ce}.btn-primary:hover{color:#fff;background-color:#3058af;border-color:#2d52a5}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#3058af;border-color:#2d52a5;box-shadow:0 0 0 .25rem rgba(86,126,213,.5)}.btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#2d52a5;border-color:#2a4d9b}.btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(86,126,213,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#3867ce;border-color:#3867ce}.btn-secondary{color:#000;background-color:#fff;border-color:#fff}.btn-secondary:hover{color:#000;background-color:#fff;border-color:#fff}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#000;background-color:#fff;border-color:#fff;box-shadow:0 0 0 .25rem rgba(217,217,217,.5)}.btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{color:#000;background-color:#fff;border-color:#fff}.btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-secondary.active:focus,.btn-secondary:active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,217,217,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#000;background-color:#fff;border-color:#fff}.btn-success{color:#000;background-color:#2c9d45;border-color:#2c9d45}.btn-success:hover{color:#000;background-color:#4cac61;border-color:#41a758}.btn-check:focus+.btn-success,.btn-success:focus{color:#000;background-color:#4cac61;border-color:#41a758;box-shadow:0 0 0 .25rem rgba(37,133,59,.5)}.btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{color:#000;background-color:#56b16a;border-color:#41a758}.btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-success.active:focus,.btn-success:active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(37,133,59,.5)}.btn-success.disabled,.btn-success:disabled{color:#000;background-color:#2c9d45;border-color:#2c9d45}.btn-info{color:#000;background-color:#2195a9;border-color:#2195a9}.btn-info:hover{color:#000;background-color:#42a5b6;border-color:#37a0b2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#42a5b6;border-color:#37a0b2;box-shadow:0 0 0 .25rem rgba(28,127,144,.5)}.btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#4daaba;border-color:#37a0b2}.btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-info.active:focus,.btn-info:active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(28,127,144,.5)}.btn-info.disabled,.btn-info:disabled{color:#000;background-color:#2195a9;border-color:#2195a9}.btn-warning{color:#000;background-color:#b67f00;border-color:#b67f00}.btn-warning:hover{color:#000;background-color:#c19226;border-color:#bd8c1a}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#c19226;border-color:#bd8c1a;box-shadow:0 0 0 .25rem rgba(155,108,0,.5)}.btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#c59933;border-color:#bd8c1a}.btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(155,108,0,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#000;background-color:#b67f00;border-color:#b67f00}.btn-danger{color:#fff;background-color:#c63800;border-color:#c63800}.btn-danger:hover{color:#fff;background-color:#a83000;border-color:#9e2d00}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#a83000;border-color:#9e2d00;box-shadow:0 0 0 .25rem rgba(207,86,38,.5)}.btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#9e2d00;border-color:#952a00}.btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-danger.active:focus,.btn-danger:active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(207,86,38,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#c63800;border-color:#c63800}.btn-light{color:#000;background-color:#f7f6f4;border-color:#f7f6f4}.btn-light:hover{color:#000;background-color:#f8f7f6;border-color:#f8f7f5}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f8f7f6;border-color:#f8f7f5;box-shadow:0 0 0 .25rem rgba(210,209,207,.5)}.btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-light.active,.btn-light:active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9f8f6;border-color:#f8f7f5}.btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-light.active:focus,.btn-light:active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(210,209,207,.5)}.btn-light.disabled,.btn-light:disabled{color:#000;background-color:#f7f6f4;border-color:#f7f6f4}.btn-dark{color:#fff;background-color:#393939;border-color:#393939}.btn-dark:hover{color:#fff;background-color:#303030;border-color:#2e2e2e}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#303030;border-color:#2e2e2e;box-shadow:0 0 0 .25rem rgba(87,87,87,.5)}.btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#2e2e2e;border-color:#2b2b2b}.btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-dark.active:focus,.btn-dark:active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(87,87,87,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#393939;border-color:#393939}.btn-outline-primary{color:#3867ce;border-color:#3867ce}.btn-outline-primary:hover{color:#fff;background-color:#3867ce;border-color:#3867ce}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(56,103,206,.5)}.btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{color:#fff;background-color:#3867ce;border-color:#3867ce}.btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus{box-shadow:0 0 0 .25rem rgba(56,103,206,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#3867ce;background-color:transparent}.btn-outline-secondary{color:#fff;border-color:#fff}.btn-outline-secondary:hover{color:#000;background-color:#fff;border-color:#fff}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(255,255,255,.5)}.btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active{color:#000;background-color:#fff;border-color:#fff}.btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus{box-shadow:0 0 0 .25rem rgba(255,255,255,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#fff;background-color:transparent}.btn-outline-success{color:#2c9d45;border-color:#2c9d45}.btn-outline-success:hover{color:#000;background-color:#2c9d45;border-color:#2c9d45}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(44,157,69,.5)}.btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active{color:#000;background-color:#2c9d45;border-color:#2c9d45}.btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus{box-shadow:0 0 0 .25rem rgba(44,157,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#2c9d45;background-color:transparent}.btn-outline-info{color:#2195a9;border-color:#2195a9}.btn-outline-info:hover{color:#000;background-color:#2195a9;border-color:#2195a9}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(33,149,169,.5)}.btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active{color:#000;background-color:#2195a9;border-color:#2195a9}.btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus{box-shadow:0 0 0 .25rem rgba(33,149,169,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#2195a9;background-color:transparent}.btn-outline-warning{color:#b67f00;border-color:#b67f00}.btn-outline-warning:hover{color:#000;background-color:#b67f00;border-color:#b67f00}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(182,127,0,.5)}.btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active{color:#000;background-color:#b67f00;border-color:#b67f00}.btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus{box-shadow:0 0 0 .25rem rgba(182,127,0,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#b67f00;background-color:transparent}.btn-outline-danger{color:#c63800;border-color:#c63800}.btn-outline-danger:hover{color:#fff;background-color:#c63800;border-color:#c63800}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(198,56,0,.5)}.btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active{color:#fff;background-color:#c63800;border-color:#c63800}.btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus{box-shadow:0 0 0 .25rem rgba(198,56,0,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#c63800;background-color:transparent}.btn-outline-light{color:#f7f6f4;border-color:#f7f6f4}.btn-outline-light:hover{color:#000;background-color:#f7f6f4;border-color:#f7f6f4}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(247,246,244,.5)}.btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active{color:#000;background-color:#f7f6f4;border-color:#f7f6f4}.btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus{box-shadow:0 0 0 .25rem rgba(247,246,244,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f7f6f4;background-color:transparent}.btn-outline-dark{color:#393939;border-color:#393939}.btn-outline-dark:hover{color:#fff;background-color:#393939;border-color:#393939}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(57,57,57,.5)}.btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active{color:#fff;background-color:#393939;border-color:#393939}.btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus{box-shadow:0 0 0 .25rem rgba(57,57,57,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#393939;background-color:transparent}.btn-link{font-weight:400;color:#3867ce;text-decoration:underline}.btn-link:hover{color:#2d52a5}.btn-link.disabled,.btn-link:disabled{color:rgba(0,0,0,.6)}.btn-group-lg>.btn,.btn-group.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.btn-group-sm>.btn,.btn-group.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.12 .5rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropend,.dropstart,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#393939;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu{top:0;right:auto;left:100%}.dropend .dropdown-menu[data-bs-popper]{margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu{top:0;right:100%;left:auto}.dropstart .dropdown-menu[data-bs-popper]{margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#393939;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#333;background-color:#f7f6f4}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#3867ce}.dropdown-item.disabled,.dropdown-item:disabled{color:rgba(0,0,0,.6);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:rgba(0,0,0,.6);white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#393939}.dropdown-menu-dark{color:rgba(0,0,0,.3);background-color:#414141;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:rgba(0,0,0,.3)}.dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#3867ce}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:rgba(0,0,0,.5)}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:rgba(0,0,0,.3)}.dropdown-menu-dark .dropdown-header{color:rgba(0,0,0,.5)}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link.disabled{color:rgba(0,0,0,.6);pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid rgba(0,0,0,.3)}.nav-tabs .nav-link{margin-bottom:-1px;background:0 0;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#efeeec #efeeec rgba(0,0,0,.3);isolation:isolate}.nav-tabs .nav-link.disabled{color:rgba(0,0,0,.6);background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:rgba(0,0,0,.7);background-color:#fff;border-color:rgba(0,0,0,.3) rgba(0,0,0,.3) #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#3867ce}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--scielo-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.5rem;margin-bottom:-.5rem;margin-left:-.5rem;border-bottom:0}.card-header-pills{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-group>.card{margin-bottom:.5rem}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#393939;text-align:left;background-color:transparent;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#325db9;background-color:#ebf0fa;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23325db9'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23393939'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#9cb3e7;outline:0;box-shadow:0 0 0 .25rem rgba(56,103,206,.25)}.accordion-header{margin-bottom:0}.accordion-item{margin-bottom:-1px;background-color:transparent;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.accordion-item:last-of-type{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:rgba(0,0,0,.6);content:var(--scielo-breadcrumb-divider, "/")}.breadcrumb-item.active{color:rgba(0,0,0,.6)}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#3867ce;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.3);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#2d52a5;background-color:#efeeec;border-color:rgba(0,0,0,.3)}.page-link:focus{z-index:3;color:#2d52a5;background-color:#efeeec;outline:0;box-shadow:0 0 0 .25rem rgba(56,103,206,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#3867ce;border-color:#3867ce}.page-item.disabled .page-link{color:rgba(0,0,0,.6);pointer-events:none;background-color:#fff;border-color:rgba(0,0,0,.3)}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.12 .5rem;border-bottom-left-radius:.12 .5rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.12 .5rem;border-bottom-right-radius:.12 .5rem}.badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#223e7c;background-color:#d7e1f5;border-color:#c3d1f0}.alert-primary .alert-link{color:#1b3263}.alert-secondary{color:#666;background-color:#fff;border-color:#fff}.alert-secondary .alert-link{color:#525252}.alert-success{color:#1a5e29;background-color:#d5ebda;border-color:#c0e2c7}.alert-success .alert-link{color:#154b21}.alert-info{color:#145965;background-color:#d3eaee;border-color:#bcdfe5}.alert-info .alert-link{color:#104751}.alert-warning{color:#6d4c00;background-color:#f0e5cc;border-color:#e9d9b3}.alert-warning .alert-link{color:#573d00}.alert-danger{color:#720;background-color:#f4d7cc;border-color:#eec3b3}.alert-danger .alert-link{color:#5f1b00}.alert-light{color:#636262;background-color:#fdfdfd;border-color:#fdfcfc}.alert-light .alert-link{color:#4f4e4e}.alert-dark{color:#222;background-color:#d7d7d7;border-color:#c4c4c4}.alert-dark .alert-link{color:#1b1b1b}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#efeeec;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#3867ce;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:rgba(0,0,0,.7);text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:rgba(0,0,0,.7);text-decoration:none;background-color:#f7f6f4}.list-group-item-action:active{color:#393939;background-color:#efeeec}.list-group-item{position:relative;display:block;padding:.5rem 1rem;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:rgba(0,0,0,.6);pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#3867ce;border-color:#3867ce}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#223e7c;background-color:#d7e1f5}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#223e7c;background-color:#c2cbdd}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#223e7c;border-color:#223e7c}.list-group-item-secondary{color:#666;background-color:#fff}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#666;background-color:#e6e6e6}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#666;border-color:#666}.list-group-item-success{color:#1a5e29;background-color:#d5ebda}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#1a5e29;background-color:#c0d4c4}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#1a5e29;border-color:#1a5e29}.list-group-item-info{color:#145965;background-color:#d3eaee}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#145965;background-color:#bed3d6}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#145965;border-color:#145965}.list-group-item-warning{color:#6d4c00;background-color:#f0e5cc}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#6d4c00;background-color:#d8ceb8}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#6d4c00;border-color:#6d4c00}.list-group-item-danger{color:#720;background-color:#f4d7cc}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#720;background-color:#dcc2b8}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#720;border-color:#720}.list-group-item-light{color:#636262;background-color:#fdfdfd}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636262;background-color:#e4e4e4}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636262;border-color:#636262}.list-group-item-dark{color:#222;background-color:#d7d7d7}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#222;background-color:#c2c2c2}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#222;border-color:#222}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(56,103,206,.25);opacity:1}.btn-close.disabled,.btn-close:disabled{pointer-events:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{width:350px;max-width:100%;font-size:.875rem;pointer-events:auto;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem}.toast:not(.showing):not(.show){opacity:0}.toast.hide{display:none}.toast-container{width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:.5rem}.toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:rgba(0,0,0,.6);background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-header .btn-close{margin-right:-.375rem;margin-left:.75rem}.toast-body{padding:.75rem;word-wrap:break-word}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1060;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.5rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid rgba(0,0,0,.3);border-top-left-radius:calc(.5rem - 1px);border-top-right-radius:calc(.5rem - 1px)}.modal-header .btn-close{padding:.5rem .5rem;margin:-.5rem -.5rem -.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid rgba(0,0,0,.3);border-bottom-right-radius:calc(.5rem - 1px);border-bottom-left-radius:calc(.5rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.tooltip{position:absolute;z-index:1080;display:block;margin:0;font-family:var(--scielo-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[data-popper-placement^=right],.bs-tooltip-end{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[data-popper-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[data-popper-placement^=left],.bs-tooltip-start{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1070;display:block;max-width:276px;font-family:var(--scielo-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.5rem}.popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f0f0f0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid #d8d8d8;border-top-left-radius:calc(.5rem - 1px);border-top-right-radius:calc(.5rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem 1rem;color:#393939}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{animation-duration:1.5s}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#3867ce}.link-primary:focus,.link-primary:hover{color:#2d52a5}.link-secondary{color:#fff}.link-secondary:focus,.link-secondary:hover{color:#fff}.link-success{color:#2c9d45}.link-success:focus,.link-success:hover{color:#56b16a}.link-info{color:#2195a9}.link-info:focus,.link-info:hover{color:#4daaba}.link-warning{color:#b67f00}.link-warning:focus,.link-warning:hover{color:#c59933}.link-danger{color:#c63800}.link-danger:focus,.link-danger:hover{color:#9e2d00}.link-light{color:#f7f6f4}.link-light:focus,.link-light:hover{color:#f9f8f6}.link-dark{color:#393939}.link-dark:focus,.link-dark:hover{color:#2e2e2e}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--scielo-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--scielo-aspect-ratio:100%}.ratio-4x3{--scielo-aspect-ratio:calc(3 / 4 * 100%)}.ratio-16x9{--scielo-aspect-ratio:calc(9 / 16 * 100%)}.ratio-21x9{--scielo-aspect-ratio:calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:sticky;top:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:1px solid rgba(0,0,0,.3)!important}.border-0{border:0!important}.border-top{border-top:1px solid rgba(0,0,0,.3)!important}.border-top-0{border-top:0!important}.border-end{border-right:1px solid rgba(0,0,0,.3)!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:1px solid rgba(0,0,0,.3)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:1px solid rgba(0,0,0,.3)!important}.border-start-0{border-left:0!important}.border-primary{border-color:#3867ce!important}.border-secondary{border-color:#fff!important}.border-success{border-color:#2c9d45!important}.border-info{border-color:#2195a9!important}.border-warning{border-color:#b67f00!important}.border-danger{border-color:#c63800!important}.border-light{border-color:#f7f6f4!important}.border-dark{border-color:#393939!important}.border-white{border-color:#fff!important}.border-0{border-width:0!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.font-monospace{font-family:var(--scielo-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{color:#3867ce!important}.text-secondary{color:#fff!important}.text-success{color:#2c9d45!important}.text-info{color:#2195a9!important}.text-warning{color:#b67f00!important}.text-danger{color:#c63800!important}.text-light{color:#f7f6f4!important}.text-dark{color:#393939!important}.text-white{color:#fff!important}.text-body{color:#393939!important}.text-muted{color:rgba(0,0,0,.6)!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-reset{color:inherit!important}.bg-primary{background-color:#3867ce!important}.bg-secondary{background-color:#fff!important}.bg-success{background-color:#2c9d45!important}.bg-info{background-color:#2195a9!important}.bg-warning{background-color:#b67f00!important}.bg-danger{background-color:#c63800!important}.bg-light{background-color:#f7f6f4!important}.bg-dark{background-color:#393939!important}.bg-body{background-color:#fff!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.bg-gradient{background-image:var(--scielo-gradient)!important}.user-select-all{user-select:all!important}.user-select-auto{user-select:auto!important}.user-select-none{user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.25rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.12 .5rem!important}.rounded-2{border-radius:.25rem!important}.rounded-3{border-radius:.5rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-end{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-start{border-bottom-left-radius:.25rem!important;border-top-left-radius:.25rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}.h1,.h2,.h3,.h4,.h5,.h6,body,h1,h2,h3,h4,h5,h6,input,p,textarea{text-rendering:optimizeLegibility}body.top-nav-visible{padding-top:115px}@media (min-width:768px){body.top-nav-visible{padding-top:74px}}.journalInfo{margin-top:74px}::-moz-selection{background:#f8f567}.scielo__theme--dark ::-moz-selection{background:#070a98}.scielo__theme--light ::-moz-selection{background:#f8f567}::selection{background:#f8f567}.scielo__theme--dark ::selection{background:#070a98}.scielo__theme--light ::selection{background:#f8f567}.scielo__theme--light{background:#fff;color:#333}.scielo__theme--dark{background:#333;color:#c4c4c4}.container{padding-left:16px;padding-right:16px}@media screen and (min-width:576px){.col,.container,[class*=col-]{padding-left:10px;padding-right:10px}.row{margin-left:-10px;margin-right:-10px}}@media screen and (min-width:768px){.col,.container,[class*=col-]{padding-left:12px;padding-right:12px}.row{margin-left:-12px;margin-right:-12px}}@media screen and (min-width:992px){.col,.container,[class*=col-]{padding-left:16px;padding-right:16px}.row{margin-left:-16px;margin-right:-16px}}@media screen and (min-width:1200px){.col,.container,[class*=col-]{padding-left:20px;padding-right:20px}.row{margin-left:-20px;margin-right:-20px}}a{color:#3867ce;text-decoration:none;word-wrap:break-word}a:hover{text-decoration:underline}a:hover{color:#254895}.scielo__theme--dark a{color:#86acff}.scielo__theme--dark a:hover{color:#d3e0ff}.scielo__theme--light a{color:#3867ce;text-decoration:none;word-wrap:break-word}.scielo__theme--light a:hover{text-decoration:underline}.scielo__theme--light a:hover{color:#254895}a .material-icons,a .material-icons-outlined{vertical-align:text-bottom}p{line-height:1.6;margin-bottom:1.5rem}p .material-icons,p .material-icons-outlined{vertical-align:text-bottom}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{color:#00314c;margin-bottom:1.5rem}.h1 .material-icons,.h1 .material-icons-outlined,.h2 .material-icons,.h2 .material-icons-outlined,.h3 .material-icons,.h3 .material-icons-outlined,.h4 .material-icons,.h4 .material-icons-outlined,.h5 .material-icons,.h5 .material-icons-outlined,.h6 .material-icons,.h6 .material-icons-outlined,h1 .material-icons,h1 .material-icons-outlined,h2 .material-icons,h2 .material-icons-outlined,h3 .material-icons,h3 .material-icons-outlined,h4 .material-icons,h4 .material-icons-outlined,h5 .material-icons,h5 .material-icons-outlined,h6 .material-icons,h6 .material-icons-outlined{vertical-align:text-bottom;font-size:inherit;line-height:inherit;display:inline-block}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{color:#333;font-weight:inherit}.scielo__theme--dark .h1,.scielo__theme--dark .h2,.scielo__theme--dark .h3,.scielo__theme--dark .h4,.scielo__theme--dark .h5,.scielo__theme--dark .h6,.scielo__theme--dark h1,.scielo__theme--dark h2,.scielo__theme--dark h3,.scielo__theme--dark h4,.scielo__theme--dark h5,.scielo__theme--dark h6{color:#eee}.scielo__theme--dark .h1 .small,.scielo__theme--dark .h1 small,.scielo__theme--dark .h2 .small,.scielo__theme--dark .h2 small,.scielo__theme--dark .h3 .small,.scielo__theme--dark .h3 small,.scielo__theme--dark .h4 .small,.scielo__theme--dark .h4 small,.scielo__theme--dark .h5 .small,.scielo__theme--dark .h5 small,.scielo__theme--dark .h6 .small,.scielo__theme--dark .h6 small,.scielo__theme--dark h1 .small,.scielo__theme--dark h1 small,.scielo__theme--dark h2 .small,.scielo__theme--dark h2 small,.scielo__theme--dark h3 .small,.scielo__theme--dark h3 small,.scielo__theme--dark h4 .small,.scielo__theme--dark h4 small,.scielo__theme--dark h5 .small,.scielo__theme--dark h5 small,.scielo__theme--dark h6 .small,.scielo__theme--dark h6 small{color:#c4c4c4}.scielo__theme--light .h1,.scielo__theme--light .h2,.scielo__theme--light .h3,.scielo__theme--light .h4,.scielo__theme--light .h5,.scielo__theme--light .h6,.scielo__theme--light h1,.scielo__theme--light h2,.scielo__theme--light h3,.scielo__theme--light h4,.scielo__theme--light h5,.scielo__theme--light h6{color:#00314c}.scielo__theme--light .h1 .small,.scielo__theme--light .h1 small,.scielo__theme--light .h2 .small,.scielo__theme--light .h2 small,.scielo__theme--light .h3 .small,.scielo__theme--light .h3 small,.scielo__theme--light .h4 .small,.scielo__theme--light .h4 small,.scielo__theme--light .h5 .small,.scielo__theme--light .h5 small,.scielo__theme--light .h6 .small,.scielo__theme--light .h6 small,.scielo__theme--light h1 .small,.scielo__theme--light h1 small,.scielo__theme--light h2 .small,.scielo__theme--light h2 small,.scielo__theme--light h3 .small,.scielo__theme--light h3 small,.scielo__theme--light h4 .small,.scielo__theme--light h4 small,.scielo__theme--light h5 .small,.scielo__theme--light h5 small,.scielo__theme--light h6 .small,.scielo__theme--light h6 small{color:#333;font-weight:inherit}.h1,.scielo__text-title--1,h1{font-weight:700;font-size:2.5rem;line-height:1.2em;letter-spacing:-.2px}.h1 .material-icons,.h1 .material-icons-outlined,.scielo__text-title--1 .material-icons,.scielo__text-title--1 .material-icons-outlined,h1 .material-icons,h1 .material-icons-outlined{vertical-align:text-bottom;font-size:inherit;line-height:inherit;display:inline-block}.h2,.scielo__text-title--2,h2{font-weight:700;font-size:2rem;line-height:1.2em;letter-spacing:-.16px}.h2 .material-icons,.h2 .material-icons-outlined,.scielo__text-title--2 .material-icons,.scielo__text-title--2 .material-icons-outlined,h2 .material-icons,h2 .material-icons-outlined{vertical-align:text-bottom;font-size:inherit;line-height:inherit;display:inline-block}.h3,.scielo__text-title--3,h3{font-weight:700;font-size:1.75rem;line-height:1.2em;letter-spacing:-.14px}.h3 .material-icons,.h3 .material-icons-outlined,.scielo__text-title--3 .material-icons,.scielo__text-title--3 .material-icons-outlined,h3 .material-icons,h3 .material-icons-outlined{vertical-align:text-bottom;font-size:inherit;line-height:inherit;display:inline-block}.h4,.scielo__text-title--4,h4{font-weight:700;font-size:1.5rem;line-height:1.2em;letter-spacing:-.12px}.h4 .material-icons,.h4 .material-icons-outlined,.scielo__text-title--4 .material-icons,.scielo__text-title--4 .material-icons-outlined,h4 .material-icons,h4 .material-icons-outlined{vertical-align:text-bottom;font-size:inherit;line-height:inherit;display:inline-block}.h5,.scielo__text-subtitle,h5{font-weight:700;font-size:1.3125rem;line-height:1.25em;letter-spacing:0}.h5 .material-icons,.h5 .material-icons-outlined,.scielo__text-subtitle .material-icons,.scielo__text-subtitle .material-icons-outlined,h5 .material-icons,h5 .material-icons-outlined{vertical-align:text-bottom;font-size:inherit;line-height:inherit;display:inline-block}.h6,.scielo__text-subtitle--small,h6{font-size:1.03125rem;letter-spacing:0}.h6 .material-icons,.h6 .material-icons-outlined,.scielo__text-subtitle--small .material-icons,.scielo__text-subtitle--small .material-icons-outlined,h6 .material-icons,h6 .material-icons-outlined{vertical-align:text-bottom;font-size:inherit;line-height:inherit;display:inline-block}.scielo__text-body{font-weight:400;font-size:1rem;line-height:1.6em;letter-spacing:.1px}.scielo__text-body--large{font-size:1.125rem}.scielo__text-body--small{font-size:.75rem;letter-spacing:.06}.scielo__text-body--micro{font-size:.75rem}.scielo__text-overline{font-weight:700;font-size:.75rem;line-height:1.2em;letter-spacing:.06px}.scielo__text-caption{font-weight:400;font-size:1rem;line-height:1.2em}.scielo__text-caption--large{font-weight:700;font-size:1;line-height:1.2em;letter-spacing:0}.scielo__text-button{font-weight:400!important;font-size:1rem;letter-spacing:.1px!important;white-space:nowrap}.scielo__text-button--large{font-size:1.25rem}.mark,mark{background:rgba(0,176,230,.2)}.scielo__theme--dark .mark,.scielo__theme--dark mark{color:#c4c4c4}.scielo__theme--light .mark,.scielo__theme--light mark{color:#333}code{font-size:1.125rem;color:#00314c;background:rgba(0,176,230,.2)}.scielo__theme--dark code{color:#eee}.scielo__theme--light code{color:#00314c}abbr[data-original-title],abbr[title]{text-decoration:none;border-bottom:1px dotted #333}.scielo__theme--dark abbr[data-original-title],.scielo__theme--dark abbr[title]{border-bottom-color:#c4c4c4}.scielo__theme--light abbr[data-original-title],.scielo__theme--light abbr[title]{border-bottom-color:#333}html{font-size:16px}.articleCtt{font-size:18px}.display-1,.display-2,.display-3,.display-4,.h1,.h2,.h3,.h4,.h5,.h6,.lead{color:#00314c}.display-1 .material-icons,.display-1 .material-icons-outlined,.display-2 .material-icons,.display-2 .material-icons-outlined,.display-3 .material-icons,.display-3 .material-icons-outlined,.display-4 .material-icons,.display-4 .material-icons-outlined,.h1 .material-icons,.h1 .material-icons-outlined,.h2 .material-icons,.h2 .material-icons-outlined,.h3 .material-icons,.h3 .material-icons-outlined,.h4 .material-icons,.h4 .material-icons-outlined,.h5 .material-icons,.h5 .material-icons-outlined,.h6 .material-icons,.h6 .material-icons-outlined,.lead .material-icons,.lead .material-icons-outlined{vertical-align:text-bottom;font-size:inherit;line-height:inherit;display:inline-block}.display-1 .small,.display-1 small,.display-2 .small,.display-2 small,.display-3 .small,.display-3 small,.display-4 .small,.display-4 small,.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,.lead .small,.lead small{color:#333;font-weight:inherit}.scielo__theme--dark .display-1,.scielo__theme--dark .display-2,.scielo__theme--dark .display-3,.scielo__theme--dark .display-4,.scielo__theme--dark .h1,.scielo__theme--dark .h2,.scielo__theme--dark .h3,.scielo__theme--dark .h4,.scielo__theme--dark .h5,.scielo__theme--dark .h6,.scielo__theme--dark .lead{color:#eee}.scielo__theme--dark .display-1 .small,.scielo__theme--dark .display-1 small,.scielo__theme--dark .display-2 .small,.scielo__theme--dark .display-2 small,.scielo__theme--dark .display-3 .small,.scielo__theme--dark .display-3 small,.scielo__theme--dark .display-4 .small,.scielo__theme--dark .display-4 small,.scielo__theme--dark .h1 .small,.scielo__theme--dark .h1 small,.scielo__theme--dark .h2 .small,.scielo__theme--dark .h2 small,.scielo__theme--dark .h3 .small,.scielo__theme--dark .h3 small,.scielo__theme--dark .h4 .small,.scielo__theme--dark .h4 small,.scielo__theme--dark .h5 .small,.scielo__theme--dark .h5 small,.scielo__theme--dark .h6 .small,.scielo__theme--dark .h6 small,.scielo__theme--dark .lead .small,.scielo__theme--dark .lead small{color:#c4c4c4}.scielo__theme--light .display-1,.scielo__theme--light .display-2,.scielo__theme--light .display-3,.scielo__theme--light .display-4,.scielo__theme--light .h1,.scielo__theme--light .h2,.scielo__theme--light .h3,.scielo__theme--light .h4,.scielo__theme--light .h5,.scielo__theme--light .h6,.scielo__theme--light .lead{color:#00314c}.scielo__theme--light .display-1 .small,.scielo__theme--light .display-1 small,.scielo__theme--light .display-2 .small,.scielo__theme--light .display-2 small,.scielo__theme--light .display-3 .small,.scielo__theme--light .display-3 small,.scielo__theme--light .display-4 .small,.scielo__theme--light .display-4 small,.scielo__theme--light .h1 .small,.scielo__theme--light .h1 small,.scielo__theme--light .h2 .small,.scielo__theme--light .h2 small,.scielo__theme--light .h3 .small,.scielo__theme--light .h3 small,.scielo__theme--light .h4 .small,.scielo__theme--light .h4 small,.scielo__theme--light .h5 .small,.scielo__theme--light .h5 small,.scielo__theme--light .h6 .small,.scielo__theme--light .h6 small,.scielo__theme--light .lead .small,.scielo__theme--light .lead small{color:#333}.display-1,.h1{font-weight:700;font-size:2.5rem;line-height:1.2em;letter-spacing:-.2px}.display-1 .material-icons,.display-1 .material-icons-outlined,.h1 .material-icons,.h1 .material-icons-outlined{vertical-align:text-bottom;font-size:inherit;line-height:inherit;display:inline-block}.display-2,.h2{font-weight:700;font-size:2rem;line-height:1.2em;letter-spacing:-.16px}.display-2 .material-icons,.display-2 .material-icons-outlined,.h2 .material-icons,.h2 .material-icons-outlined{vertical-align:text-bottom;font-size:inherit;line-height:inherit;display:inline-block}.display-3,.h3{font-weight:700;font-size:1.75rem;line-height:1.2em;letter-spacing:-.14px}.display-3 .material-icons,.display-3 .material-icons-outlined,.h3 .material-icons,.h3 .material-icons-outlined{vertical-align:text-bottom;font-size:inherit;line-height:inherit;display:inline-block}.display-4,.h4{font-weight:700;font-size:1.5rem;line-height:1.2em;letter-spacing:-.12px}.display-4 .material-icons,.display-4 .material-icons-outlined,.h4 .material-icons,.h4 .material-icons-outlined{vertical-align:text-bottom;font-size:inherit;line-height:inherit;display:inline-block}.h5,.lead{font-weight:700;font-size:1.3125rem;line-height:1.25em;letter-spacing:0}.h5 .material-icons,.h5 .material-icons-outlined,.lead .material-icons,.lead .material-icons-outlined{vertical-align:text-bottom;font-size:inherit;line-height:inherit;display:inline-block}.h6{font-size:1.03125rem;letter-spacing:0}.h6 .material-icons,.h6 .material-icons-outlined{vertical-align:text-bottom;font-size:inherit;line-height:inherit;display:inline-block}.blockquote,blockquote{margin:0 0 1rem;padding:.8rem 1.4rem;border-left:4px solid rgba(0,0,0,.3);background-color:#efeeec}.scielo__theme--dark .blockquote,.scielo__theme--dark blockquote{border-left-color:#414141}.scielo__theme--light .blockquote,.scielo__theme--light blockquote{border-left-color:#efeeec}cite{display:block;font-size:.86667rem}cite:before{content:"— "}.form-text,.text-muted{color:#6c6b6b!important}.scielo__theme--dark .form-text,.scielo__theme--dark .text-muted{color:#adadad!important}.scielo__theme--light .form-text,.scielo__theme--light .text-muted{color:#6c6b6b!important}@media (min-width:768px){.scielo__truncate{display:block;max-width:285px}}@font-face{font-family:scielo-social-network;src:url(../fonts/scielo-social-network.eot?dhp6e8);src:url(../fonts/scielo-social-network.eot?dhp6e8#iefix) format("embedded-opentype"),url(../fonts/scielo-social-network.ttf?dhp6e8) format("truetype"),url(../fonts/scielo-social-network.woff?dhp6e8) format("woff"),url(../fonts/scielo-social-network.svg?dhp6e8#scielo-social-network) format("svg");font-weight:400;font-style:normal;font-display:block}[class*=" icon-"],[class^=icon-]{font-family:scielo-social-network!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-bluesky:before{content:"\e900";color:#616060}.icon-mastodon:before{content:"\e901";color:#616060}.icon-linkedin:before{content:"\e902";color:#616060}.icon-facebook:before{content:"\e903";color:#616060}.icon-youtube:before{content:"\e904";color:#616060}.scielo__social-network-links a{text-decoration:none!important}.scielo__social-network-links a:hover [class*=" icon-"]::before,.scielo__social-network-links a:hover [class^=icon-]::before{color:#3867ce}.logo-open-access{height:2em;width:auto}.h1 .logo-open-access,.h2 .logo-open-access,.h3 .logo-open-access,.h4 .logo-open-access,.h5 .logo-open-access,.h6 .logo-open-access,h1 .logo-open-access,h2 .logo-open-access,h3 .logo-open-access,h4 .logo-open-access,h5 .logo-open-access,h6 .logo-open-access{height:.9em;width:auto}footer .logo-open-access{height:1.5em;width:auto}.scielo__logo-scielo{background-image:url(../img/logo-scielo-no-label.svg);background-size:contain;background-repeat:no-repeat;display:inline-block;width:4rem;height:4rem}.scielo__theme--dark .scielo__logo-scielo{background-image:url(../img/logo-scielo-no-label-negative.svg)}.scielo__theme--light .scielo__logo-scielo{background-image:url(../img/logo-scielo-no-label.svg)}.scielo__logo-scielo--large{background-image:url(../img/logo-scielo-no-label.svg);background-size:contain;background-repeat:no-repeat;display:inline-block;width:15.625rem;height:15.625rem}.scielo__theme--dark .scielo__logo-scielo--large{background-image:url(../img/logo-scielo-no-label-negative.svg)}.scielo__theme--light .scielo__logo-scielo--large{background-image:url(../img/logo-scielo-no-label.svg)}.scielo__logo-scielo--medium{background-image:url(../img/logo-scielo-no-label.svg);background-size:contain;background-repeat:no-repeat;display:inline-block;width:9.375rem;height:9.375rem}.scielo__theme--dark .scielo__logo-scielo--medium{background-image:url(../img/logo-scielo-no-label-negative.svg)}.scielo__theme--light .scielo__logo-scielo--medium{background-image:url(../img/logo-scielo-no-label.svg)}.scielo__logo-scielo--medium.scielo__logo-scielo--caption{margin-bottom:2rem}.scielo__logo-scielo--medium.scielo__logo-scielo--caption .small,.scielo__logo-scielo--medium.scielo__logo-scielo--caption small{position:relative;font-size:1.875rem;font-family:Arapey,serif;color:#333;font-style:italic;padding-left:60px;border-bottom:1px solid #ccc;padding-bottom:12px;padding-right:5px;top:80px;left:110px}.scielo__theme--dark .scielo__logo-scielo--medium.scielo__logo-scielo--caption .small,.scielo__theme--dark .scielo__logo-scielo--medium.scielo__logo-scielo--caption small{color:#c4c4c4;border-color:rgba(255,255,255,.3)}.scielo__theme--light .scielo__logo-scielo--medium.scielo__logo-scielo--caption .small,.scielo__theme--light .scielo__logo-scielo--medium.scielo__logo-scielo--caption small{color:#333;border-color:#ccc}.scielo__logo-scielo--medium.scielo__logo-scielo--caption span{position:relative;left:50%;transform:translateX(-7.1875rem);top:6.25rem;display:block;font-size:1.5rem;font-family:Arapey,serif;color:#333;white-space:nowrap;width:14.375rem}.scielo__theme--dark .scielo__logo-scielo--medium.scielo__logo-scielo--caption span{color:#c4c4c4}.scielo__theme--light .scielo__logo-scielo--medium.scielo__logo-scielo--caption span{color:#333}.scielo__logo-scielo--small{background-image:url(../img/logo-scielo-no-label.svg);background-size:contain;background-repeat:no-repeat;display:inline-block;width:4rem;height:4rem}.scielo__theme--dark .scielo__logo-scielo--small{background-image:url(../img/logo-scielo-no-label-negative.svg)}.scielo__theme--light .scielo__logo-scielo--small{background-image:url(../img/logo-scielo-no-label.svg)}.scielo__logo-scielo--small.scielo__logo-scielo--caption strong{position:relative;left:4.5rem;top:1.75rem;color:#333}.scielo__theme--dark .scielo__logo-scielo--small.scielo__logo-scielo--caption strong{color:#c4c4c4}.scielo__theme--light .scielo__logo-scielo--small.scielo__logo-scielo--caption strong{color:#333}.scielo__logo-scielo-caption{position:relative;width:16.875rem;height:6.25rem;background-image:url(../img/logo-scielo-no-label.svg);background-repeat:no-repeat;background-size:75px auto;background-position-x:calc(50% - 22px);display:inline-block}@media (min-width:576px){.scielo__logo-scielo-caption{width:21.875rem;height:11.375rem;background-size:150px auto;background-position-x:calc(50% - 55px)}}.scielo__theme--dark .scielo__logo-scielo-caption{background-image:url(../img/logo-scielo-no-label-negative.svg)}.scielo__theme--light .scielo__logo-scielo-caption{background-image:url(../img/logo-scielo-no-label.svg)}.scielo__logo-scielo-caption:after{content:"Scientific Electronic Library Online";position:absolute;top:4.375rem;display:block;font-size:1.2rem;font-family:Arapey,serif;color:#333;white-space:nowrap;width:100%;text-align:center}@media (min-width:576px){.scielo__logo-scielo-caption:after{top:9.375rem;font-size:1.5rem}}.scielo__theme--dark .scielo__logo-scielo-caption:after{color:#c4c4c4}.scielo__theme--light .scielo__logo-scielo-caption:after{color:#333}.scielo__logo-scielo-caption .small,.scielo__logo-scielo-caption small{position:absolute;font-size:1rem;font-family:Arapey,serif;color:#333;font-style:italic;border-bottom:1px solid #ccc;padding-bottom:10px;padding-left:24px;padding-right:0;top:40px;left:8.125rem;line-height:1rem}@media (min-width:576px){.scielo__logo-scielo-caption .small,.scielo__logo-scielo-caption small{font-size:1.875rem;padding-bottom:12px;padding-left:60px;padding-right:5px;top:80px;left:9.375rem;line-height:normal}}.scielo__theme--dark .scielo__logo-scielo-caption .small,.scielo__theme--dark .scielo__logo-scielo-caption small{color:#c4c4c4;border-color:rgba(255,255,255,.3)}.scielo__theme--light .scielo__logo-scielo-caption .small,.scielo__theme--light .scielo__logo-scielo-caption small{color:#333;border-color:#ccc}.scielo__logo-scielo-collection{position:relative;background-image:url(../img/logo-scielo-no-label.svg);background-size:contain;background-repeat:no-repeat;display:inline-block;width:4rem;height:4rem}.scielo__theme--dark .scielo__logo-scielo-collection{background-image:url(../img/logo-scielo-no-label-negative.svg)}.scielo__theme--light .scielo__logo-scielo-collection{background-image:url(../img/logo-scielo-no-label.svg)}.scielo__logo-scielo-collection .small,.scielo__logo-scielo-collection small{position:absolute;left:4.5rem;top:1.75rem;color:#333;font-weight:bolder}.scielo__theme--dark .scielo__logo-scielo-collection .small,.scielo__theme--dark .scielo__logo-scielo-collection small{color:#c4c4c4}.scielo__theme--light .scielo__logo-scielo-collection .small,.scielo__theme--light .scielo__logo-scielo-collection small{color:#333}footer .scielo__logo-scielo,header .scielo__logo-scielo{width:64px;height:64px}.scielo__logo-periodico{max-height:100px}.btn{position:relative;display:inline-block;padding:.625rem 1rem;border-radius:.25rem;line-height:1.25rem;height:2.5rem;font-weight:400!important;font-size:1rem;letter-spacing:.1px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background-position:center;transition:all .8s;margin:0 0 1rem;background-color:#fff;border:1px solid #ccc;color:#333}.btn:focus{box-shadow:0 0 0 .125rem rgba(56,103,206,.25);outline:0}.btn:focus:active{box-shadow:0 0 0 .25rem rgba(56,103,206,.25)}.btn:focus{box-shadow:0 0 0 .125rem rgba(204,204,204,.25);outline:0}.btn:focus-visible{outline:3px solid #3867ce;outline-offset:2px}.btn:active{box-shadow:0 0 0 .25rem rgba(204,204,204,.25)}.btn:focus{background-color:#fff;color:#333}.btn:focus-visible{outline:3px solid #3867ce;outline-offset:2px}.btn.active:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background-color:#d9d9d9;color:#333}.show>.btn.dropdown-toggle{background-color:#d9d9d9;color:#333}.btn:hover:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background:#d9d9d9 radial-gradient(circle,transparent 1%,#d9d9d9 1%) center/15000%;color:#333;text-decoration:none}.btn:active:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background-color:#1a1a1a;background-size:100%;transition:background 0s;color:#333}.btn:hover:not(:disabled):not(.disabled){border:1px solid #ccc;background:hoverBgColor radial-gradient(circle,transparent 1%,hoverBgColor 1%) center/15000%;color:#333}.btn:active:not(:disabled):not(.disabled){border:1px solid #ccc;background-color:gray;background-size:100%;transition:background 0s;color:#333}.btn:focus{border-color:#ccc}.scielo__theme--dark .btn{background-color:#c4c4c4;border:1px solid rgba(255,255,255,.3);color:#333}.scielo__theme--dark .btn:focus{background-color:#c4c4c4;color:#333}.scielo__theme--dark .btn.active:not(:disabled):not(.disabled){background-color:#a7a7a7;color:#333}.scielo__theme--dark .btn:hover:not(:disabled):not(.disabled){border:1px solid #dcdcdc;background:#dcdcdc radial-gradient(circle,transparent 1%,#dcdcdc 1%) center/15000%;color:#333;text-decoration:none}.scielo__theme--dark .btn:active:not(:disabled):not(.disabled){border:1px solid #dcdcdc;background-color:#f9f9f9;background-size:100%;transition:background 0s;color:#333}.scielo__theme--dark .btn:hover:not(:disabled):not(.disabled){border:1px solid rgba(255,255,255,.3);background:hoverBgColor radial-gradient(circle,transparent 1%,hoverBgColor 1%) center/15000%;color:#333}.scielo__theme--dark .btn:active:not(:disabled):not(.disabled){border:1px solid rgba(255,255,255,.3);background-color:#f9f9f9;background-size:100%;transition:background 0s;color:#333}.scielo__theme--dark .btn:focus{border-color:rgba(255,255,255,.3)}.scielo__theme--light .btn{background-color:#fff;border-color:1px solid #ccc;color:#333}.scielo__theme--light .btn:focus{background-color:#fff;color:#333}.scielo__theme--light .btn.active:not(:disabled):not(.disabled){background-color:#fff;color:#333}.scielo__theme--light .btn:hover:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background:#d9d9d9 radial-gradient(circle,transparent 1%,#d9d9d9 1%) center/15000%;color:#333;text-decoration:none}.scielo__theme--light .btn:active:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background-color:#1a1a1a;background-size:100%;transition:background 0s;color:#333}.scielo__theme--light .btn:hover:not(:disabled):not(.disabled){border:1px solid #ccc;background:hoverBgColor radial-gradient(circle,transparent 1%,hoverBgColor 1%) center/15000%;color:#333}.scielo__theme--light .btn:active:not(:disabled):not(.disabled){border:1px solid #ccc;background-color:gray;background-size:100%;transition:background 0s;color:#333}.scielo__theme--light .btn:focus{border-color:#ccc}.btn-light,.btn-primary{background-color:#3867ce;border:1px solid #3867ce;color:#fff}.btn-light:focus,.btn-primary:focus{box-shadow:0 0 0 .125rem rgba(56,103,206,.25);outline:0}.btn-light:focus-visible,.btn-primary:focus-visible{outline:3px solid #3867ce;outline-offset:2px}.btn-light:focus:active,.btn-primary:focus:active{box-shadow:0 0 0 .25rem rgba(56,103,206,.25)}.btn-light:focus,.btn-primary:focus{background-color:#3867ce;color:#fff}.btn-light:focus-visible,.btn-primary:focus-visible{outline:3px solid #3867ce;outline-offset:2px}.btn-light.active:not(:disabled):not(.disabled),.btn-primary.active:not(:disabled):not(.disabled){border:1px solid #3058af;background-color:#3058af;color:#fff}.show>.btn-light.dropdown-toggle,.show>.btn-primary.dropdown-toggle{background-color:#3058af;color:#fff}.btn-light:hover:not(:disabled):not(.disabled),.btn-primary:hover:not(:disabled):not(.disabled){border:1px solid #3058af;background:#3058af radial-gradient(circle,transparent 1%,#3058af 1%) center/15000%;color:#fff;text-decoration:none}.btn-light:active:not(:disabled):not(.disabled),.btn-primary:active:not(:disabled):not(.disabled){border:1px solid #3058af;background-color:#060a15;background-size:100%;transition:background 0s;color:#fff}.scielo__theme--dark .btn-light,.scielo__theme--dark .btn-primary{background-color:#86acff;border:1px solid #86acff;color:#333}.scielo__theme--dark .btn-light:focus,.scielo__theme--dark .btn-primary:focus{background-color:#86acff;color:#333}.scielo__theme--dark .btn-light.active:not(:disabled):not(.disabled),.scielo__theme--dark .btn-primary.active:not(:disabled):not(.disabled){background-color:#7292d9;color:#333}.scielo__theme--dark .btn-light:hover:not(:disabled):not(.disabled),.scielo__theme--dark .btn-primary:hover:not(:disabled):not(.disabled){border:1px solid #b6cdff;background:#b6cdff radial-gradient(circle,transparent 1%,#b6cdff 1%) center/15000%;color:#333;text-decoration:none}.scielo__theme--dark .btn-light:active:not(:disabled):not(.disabled),.scielo__theme--dark .btn-primary:active:not(:disabled):not(.disabled){border:1px solid #b6cdff;background-color:#f3f7ff;background-size:100%;transition:background 0s;color:#333}.scielo__theme--light .btn-light,.scielo__theme--light .btn-primary{background-color:#3867ce;border-color:1px solid #3867ce;color:#fff}.scielo__theme--light .btn-light:focus,.scielo__theme--light .btn-primary:focus{background-color:#3867ce;color:#fff}.scielo__theme--light .btn-light.active:not(:disabled):not(.disabled),.scielo__theme--light .btn-primary.active:not(:disabled):not(.disabled){background-color:#567ed5;color:#fff}.scielo__theme--light .btn-light:hover:not(:disabled):not(.disabled),.scielo__theme--light .btn-primary:hover:not(:disabled):not(.disabled){border:1px solid #3058af;background:#3058af radial-gradient(circle,transparent 1%,#3058af 1%) center/15000%;color:#fff;text-decoration:none}.scielo__theme--light .btn-light:active:not(:disabled):not(.disabled),.scielo__theme--light .btn-primary:active:not(:disabled):not(.disabled){border:1px solid #3058af;background-color:#060a15;background-size:100%;transition:background 0s;color:#fff}.btn-info{background-color:#2195a9;border:1px solid #2195a9;color:#fff}.btn-info:focus{box-shadow:0 0 0 .125rem rgba(33,149,169,.25);outline:0}.btn-info:focus-visible{outline:3px solid #3867ce;outline-offset:2px}.btn-info:focus:active{box-shadow:0 0 0 .25rem rgba(33,149,169,.25)}.btn-info:focus{background-color:#2195a9;color:#fff}.btn-info:focus-visible{outline:3px solid #3867ce;outline-offset:2px}.btn-info.active:not(:disabled):not(.disabled){border:1px solid #1c7f90;background-color:#1c7f90;color:#fff}.show>.btn-info.dropdown-toggle{background-color:#1c7f90;color:#fff}.btn-info:hover:not(:disabled):not(.disabled){border:1px solid #1c7f90;background:#1c7f90 radial-gradient(circle,transparent 1%,#1c7f90 1%) center/15000%;color:#fff;text-decoration:none}.btn-info:active:not(:disabled):not(.disabled){border:1px solid #1c7f90;background-color:#030f11;background-size:100%;transition:background 0s;color:#fff}.scielo__theme--dark .btn-info{background-color:#2299ad;border:1px solid #2299ad;color:#333}.scielo__theme--dark .btn-info:focus{background-color:#2299ad;color:#333}.scielo__theme--dark .btn-info.active:not(:disabled):not(.disabled){background-color:#1d8293;color:#333}.scielo__theme--dark .btn-info:hover:not(:disabled):not(.disabled){border:1px solid #7ac2ce;background:#7ac2ce radial-gradient(circle,transparent 1%,#7ac2ce 1%) center/15000%;color:#333;text-decoration:none}.scielo__theme--dark .btn-info:active:not(:disabled):not(.disabled){border:1px solid #7ac2ce;background-color:#e9f5f7;background-size:100%;transition:background 0s;color:#333}.scielo__theme--light .btn-info{background-color:#2195a9;border-color:1px solid #2195a9;color:#fff}.scielo__theme--light .btn-info:focus{background-color:#2195a9;color:#fff}.scielo__theme--light .btn-info.active:not(:disabled):not(.disabled){background-color:#42a5b6;color:#fff}.scielo__theme--light .btn-info:hover:not(:disabled):not(.disabled){border:1px solid #1c7f90;background:#1c7f90 radial-gradient(circle,transparent 1%,#1c7f90 1%) center/15000%;color:#fff;text-decoration:none}.scielo__theme--light .btn-info:active:not(:disabled):not(.disabled){border:1px solid #1c7f90;background-color:#030f11;background-size:100%;transition:background 0s;color:#fff}.btn-dark{background-color:#fff;border:1px solid #ccc;color:#333}.btn-dark:focus{box-shadow:0 0 0 .125rem rgba(204,204,204,.25);outline:0}.btn-dark:focus-visible{outline:3px solid #3867ce;outline-offset:2px}.btn-dark:active{box-shadow:0 0 0 .25rem rgba(204,204,204,.25)}.btn-dark:focus{background-color:#fff;color:#333}.btn-dark:focus-visible{outline:3px solid #3867ce;outline-offset:2px}.btn-dark.active:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background-color:#d9d9d9;color:#333}.show>.btn-dark.dropdown-toggle{background-color:#d9d9d9;color:#333}.btn-dark:hover:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background:#d9d9d9 radial-gradient(circle,transparent 1%,#d9d9d9 1%) center/15000%;color:#333;text-decoration:none}.btn-dark:active:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background-color:#1a1a1a;background-size:100%;transition:background 0s;color:#333}.btn-dark:hover:not(:disabled):not(.disabled){border:1px solid #ccc;background:hoverBgColor radial-gradient(circle,transparent 1%,hoverBgColor 1%) center/15000%;color:#333}.btn-dark:active:not(:disabled):not(.disabled){border:1px solid #ccc;background-color:gray;background-size:100%;transition:background 0s;color:#333}.btn-dark:focus{border-color:#ccc}.scielo__theme--dark .btn-dark{background-color:#c4c4c4;border:1px solid rgba(255,255,255,.3);color:#333}.scielo__theme--dark .btn-dark:focus{background-color:#c4c4c4;color:#333}.scielo__theme--dark .btn-dark.active:not(:disabled):not(.disabled){background-color:#a7a7a7;color:#333}.scielo__theme--dark .btn-dark:hover:not(:disabled):not(.disabled){border:1px solid #dcdcdc;background:#dcdcdc radial-gradient(circle,transparent 1%,#dcdcdc 1%) center/15000%;color:#333;text-decoration:none}.scielo__theme--dark .btn-dark:active:not(:disabled):not(.disabled){border:1px solid #dcdcdc;background-color:#f9f9f9;background-size:100%;transition:background 0s;color:#333}.scielo__theme--dark .btn-dark:hover:not(:disabled):not(.disabled){border:1px solid rgba(255,255,255,.3);background:hoverBgColor radial-gradient(circle,transparent 1%,hoverBgColor 1%) center/15000%;color:#333}.scielo__theme--dark .btn-dark:active:not(:disabled):not(.disabled){border:1px solid rgba(255,255,255,.3);background-color:#f9f9f9;background-size:100%;transition:background 0s;color:#333}.scielo__theme--dark .btn-dark:focus{border-color:rgba(255,255,255,.3)}.scielo__theme--light .btn-dark{background-color:#fff;border-color:1px solid #ccc;color:#333}.scielo__theme--light .btn-dark:focus{background-color:#fff;color:#333}.scielo__theme--light .btn-dark.active:not(:disabled):not(.disabled){background-color:#fff;color:#333}.scielo__theme--light .btn-dark:hover:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background:#d9d9d9 radial-gradient(circle,transparent 1%,#d9d9d9 1%) center/15000%;color:#333;text-decoration:none}.scielo__theme--light .btn-dark:active:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background-color:#1a1a1a;background-size:100%;transition:background 0s;color:#333}.scielo__theme--light .btn-dark:hover:not(:disabled):not(.disabled){border:1px solid #ccc;background:hoverBgColor radial-gradient(circle,transparent 1%,hoverBgColor 1%) center/15000%;color:#333}.scielo__theme--light .btn-dark:active:not(:disabled):not(.disabled){border:1px solid #ccc;background-color:gray;background-size:100%;transition:background 0s;color:#333}.scielo__theme--light .btn-dark:focus{border-color:#ccc}.btn-success{background-color:#2c9d45;border:1px solid #2c9d45;color:#fff}.btn-success:focus{box-shadow:0 0 0 .125rem rgba(44,157,69,.25);outline:0}.btn-success:focus-visible{outline:3px solid #3867ce;outline-offset:2px}.btn-success:focus:active{box-shadow:0 0 0 .25rem rgba(44,157,69,.25)}.btn-success:focus{background-color:#2c9d45;color:#fff}.btn-success:focus-visible{outline:3px solid #3867ce;outline-offset:2px}.btn-success.active:not(:disabled):not(.disabled){border:1px solid #25853b;background-color:#25853b;color:#fff}.show>.btn-success.dropdown-toggle{background-color:#25853b;color:#fff}.btn-success:hover:not(:disabled):not(.disabled){border:1px solid #25853b;background:#25853b radial-gradient(circle,transparent 1%,#25853b 1%) center/15000%;color:#fff;text-decoration:none}.btn-success:active:not(:disabled):not(.disabled){border:1px solid #25853b;background-color:#041007;background-size:100%;transition:background 0s;color:#fff}.scielo__theme--dark .btn-success{background-color:#2c9d45;border:1px solid #2c9d45;color:#333}.scielo__theme--dark .btn-success:focus{background-color:#2c9d45;color:#333}.scielo__theme--dark .btn-success.active:not(:disabled):not(.disabled){background-color:#25853b;color:#333}.scielo__theme--dark .btn-success:hover:not(:disabled):not(.disabled){border:1px solid #80c48f;background:#80c48f radial-gradient(circle,transparent 1%,#80c48f 1%) center/15000%;color:#333;text-decoration:none}.scielo__theme--dark .btn-success:active:not(:disabled):not(.disabled){border:1px solid #80c48f;background-color:#eaf5ec;background-size:100%;transition:background 0s;color:#333}.scielo__theme--light .btn-success{background-color:#2c9d45;border-color:1px solid #2c9d45;color:#fff}.scielo__theme--light .btn-success:focus{background-color:#2c9d45;color:#fff}.scielo__theme--light .btn-success.active:not(:disabled):not(.disabled){background-color:#4cac61;color:#fff}.scielo__theme--light .btn-success:hover:not(:disabled):not(.disabled){border:1px solid #25853b;background:#25853b radial-gradient(circle,transparent 1%,#25853b 1%) center/15000%;color:#fff;text-decoration:none}.scielo__theme--light .btn-success:active:not(:disabled):not(.disabled){border:1px solid #25853b;background-color:#041007;background-size:100%;transition:background 0s;color:#fff}.btn-danger{background-color:#c63800;border:1px solid #c63800;color:#fff}.btn-danger:focus{box-shadow:0 0 0 .125rem rgba(198,56,0,.25);outline:0}.btn-danger:focus-visible{outline:3px solid #3867ce;outline-offset:2px}.btn-danger:focus:active{box-shadow:0 0 0 .25rem rgba(198,56,0,.25)}.btn-danger:focus{background-color:#c63800;color:#fff}.btn-danger:focus-visible{outline:3px solid #3867ce;outline-offset:2px}.btn-danger.active:not(:disabled):not(.disabled){border:1px solid #a83000;background-color:#a83000;color:#fff}.show>.btn-danger.dropdown-toggle{background-color:#a83000;color:#fff}.btn-danger:hover:not(:disabled):not(.disabled){border:1px solid #a83000;background:#a83000 radial-gradient(circle,transparent 1%,#a83000 1%) center/15000%;color:#fff;text-decoration:none}.btn-danger:active:not(:disabled):not(.disabled){border:1px solid #a83000;background-color:#140600;background-size:100%;transition:background 0s;color:#fff}.scielo__theme--dark .btn-danger{background-color:#ff7e4a;border:1px solid #ff7e4a;color:#333}.scielo__theme--dark .btn-danger:focus{background-color:#ff7e4a;color:#333}.scielo__theme--dark .btn-danger.active:not(:disabled):not(.disabled){background-color:#d96b3f;color:#333}.scielo__theme--dark .btn-danger:hover:not(:disabled):not(.disabled){border:1px solid #ffb292;background:#ffb292 radial-gradient(circle,transparent 1%,#ffb292 1%) center/15000%;color:#333;text-decoration:none}.scielo__theme--dark .btn-danger:active:not(:disabled):not(.disabled){border:1px solid #ffb292;background-color:#fff2ed;background-size:100%;transition:background 0s;color:#333}.scielo__theme--light .btn-danger{background-color:#c63800;border-color:1px solid #c63800;color:#fff}.scielo__theme--light .btn-danger:focus{background-color:#c63800;color:#fff}.scielo__theme--light .btn-danger.active:not(:disabled):not(.disabled){background-color:#cf5626;color:#fff}.scielo__theme--light .btn-danger:hover:not(:disabled):not(.disabled){border:1px solid #a83000;background:#a83000 radial-gradient(circle,transparent 1%,#a83000 1%) center/15000%;color:#fff;text-decoration:none}.scielo__theme--light .btn-danger:active:not(:disabled):not(.disabled){border:1px solid #a83000;background-color:#140600;background-size:100%;transition:background 0s;color:#fff}.btn-warning{background-color:#b67f00;border:1px solid #b67f00;color:#fff}.btn-warning:focus{box-shadow:0 0 0 .125rem rgba(182,127,0,.25);outline:0}.btn-warning:focus-visible{outline:3px solid #3867ce;outline-offset:2px}.btn-warning:focus:active{box-shadow:0 0 0 .25rem rgba(182,127,0,.25)}.btn-warning:focus{background-color:#b67f00;color:#fff}.btn-warning:focus-visible{outline:3px solid #3867ce;outline-offset:2px}.btn-warning.active:not(:disabled):not(.disabled){border:1px solid #9b6c00;background-color:#9b6c00;color:#fff}.show>.btn-warning.dropdown-toggle{background-color:#9b6c00;color:#fff}.btn-warning:hover:not(:disabled):not(.disabled){border:1px solid #9b6c00;background:#9b6c00 radial-gradient(circle,transparent 1%,#9b6c00 1%) center/15000%;color:#fff;text-decoration:none}.btn-warning:active:not(:disabled):not(.disabled){border:1px solid #9b6c00;background-color:#120d00;background-size:100%;transition:background 0s;color:#fff}.scielo__theme--dark .btn-warning{background-color:#b67f00;border:1px solid #b67f00;color:#333}.scielo__theme--dark .btn-warning:focus{background-color:#b67f00;color:#333}.scielo__theme--dark .btn-warning.active:not(:disabled):not(.disabled){background-color:#9b6c00;color:#333}.scielo__theme--dark .btn-warning:hover:not(:disabled):not(.disabled){border:1px solid #d3b266;background:#d3b266 radial-gradient(circle,transparent 1%,#d3b266 1%) center/15000%;color:#333;text-decoration:none}.scielo__theme--dark .btn-warning:active:not(:disabled):not(.disabled){border:1px solid #d3b266;background-color:#f8f2e6;background-size:100%;transition:background 0s;color:#333}.scielo__theme--light .btn-warning{background-color:#b67f00;border-color:1px solid #b67f00;color:#fff}.scielo__theme--light .btn-warning:focus{background-color:#b67f00;color:#fff}.scielo__theme--light .btn-warning.active:not(:disabled):not(.disabled){background-color:#c19226;color:#fff}.scielo__theme--light .btn-warning:hover:not(:disabled):not(.disabled){border:1px solid #9b6c00;background:#9b6c00 radial-gradient(circle,transparent 1%,#9b6c00 1%) center/15000%;color:#fff;text-decoration:none}.scielo__theme--light .btn-warning:active:not(:disabled):not(.disabled){border:1px solid #9b6c00;background-color:#120d00;background-size:100%;transition:background 0s;color:#fff}.btn.disabled,.btn:disabled{pointer-events:auto;cursor:not-allowed;background-color:#f7f6f4;border:1px solid #ccc;color:rgba(0,0,0,.396);opacity:1}.btn.disabled:focus,.btn:disabled:focus{background-color:#f7f6f4;color:rgba(0,0,0,.396)}.btn.disabled:focus-visible,.btn:disabled:focus-visible{outline:3px solid #3867ce;outline-offset:2px}.btn.disabled.active:not(:disabled):not(.disabled),.btn:disabled.active:not(:disabled):not(.disabled){border:1px solid #d2d1cf;background-color:#d2d1cf;color:rgba(0,0,0,.396)}.show>.btn.disabled.dropdown-toggle,.show>.btn:disabled.dropdown-toggle{background-color:#d2d1cf;color:rgba(0,0,0,.396)}.btn.disabled:hover:not(:disabled):not(.disabled),.btn:disabled:hover:not(:disabled):not(.disabled){border:1px solid #d2d1cf;background:#d2d1cf radial-gradient(circle,transparent 1%,#d2d1cf 1%) center/15000%;color:rgba(0,0,0,.396);text-decoration:none}.btn.disabled:active:not(:disabled):not(.disabled),.btn:disabled:active:not(:disabled):not(.disabled){border:1px solid #d2d1cf;background-color:#191918;background-size:100%;transition:background 0s;color:rgba(0,0,0,.396)}.scielo__theme--dark .btn.disabled,.scielo__theme--dark .btn:disabled{background-color:rgba(255,255,255,.2);border:1px solid rgba(255,255,255,.3);color:#c4c4c4}.scielo__theme--dark .btn.disabled:focus,.scielo__theme--dark .btn:disabled:focus{background-color:rgba(255,255,255,.2);color:#c4c4c4}.scielo__theme--dark .btn.disabled.active:not(:disabled):not(.disabled),.scielo__theme--dark .btn:disabled.active:not(:disabled):not(.disabled){background-color:rgba(99,99,99,.32);color:#c4c4c4}.scielo__theme--dark .btn.disabled:hover:not(:disabled):not(.disabled),.scielo__theme--dark .btn:disabled:hover:not(:disabled):not(.disabled){border:1px solid rgba(255,255,255,.52);background:rgba(255,255,255,.52) radial-gradient(circle,transparent 1%,rgba(255,255,255,.52) 1%) center/15000%;color:#c4c4c4;text-decoration:none}.scielo__theme--dark .btn.disabled:active:not(:disabled):not(.disabled),.scielo__theme--dark .btn:disabled:active:not(:disabled):not(.disabled){border:1px solid rgba(255,255,255,.52);background-color:rgba(255,255,255,.92);background-size:100%;transition:background 0s;color:#c4c4c4}.scielo__theme--light .btn.disabled,.scielo__theme--light .btn:disabled{background-color:#f7f6f4;border-color:1px solid #ccc;color:rgba(0,0,0,.396)}.scielo__theme--light .btn.disabled:focus,.scielo__theme--light .btn:disabled:focus{background-color:#f7f6f4;color:rgba(0,0,0,.396)}.scielo__theme--light .btn.disabled.active:not(:disabled):not(.disabled),.scielo__theme--light .btn:disabled.active:not(:disabled):not(.disabled){background-color:#f8f7f6;color:rgba(0,0,0,.396)}.scielo__theme--light .btn.disabled:hover:not(:disabled):not(.disabled),.scielo__theme--light .btn:disabled:hover:not(:disabled):not(.disabled){border:1px solid #d2d1cf;background:#d2d1cf radial-gradient(circle,transparent 1%,#d2d1cf 1%) center/15000%;color:rgba(0,0,0,.396);text-decoration:none}.scielo__theme--light .btn.disabled:active:not(:disabled):not(.disabled),.scielo__theme--light .btn:disabled:active:not(:disabled):not(.disabled){border:1px solid #d2d1cf;background-color:#191918;background-size:100%;transition:background 0s;color:rgba(0,0,0,.396)}.btn-link{padding-left:1.5rem;padding-right:1.5rem;background-color:transparent;border:1px solid transparent;color:#3867ce;text-decoration:none}.btn-link:focus{box-shadow:0 0 0 .125rem rgba(56,103,206,.25);outline:0}.btn-link:focus:active{box-shadow:0 0 0 .25rem rgba(56,103,206,.25)}.btn-link:focus{background-color:transparent;border-color:transparent;color:#3867ce}.btn-link:hover:not(:disabled):not(.disabled){border:1px solid #fff;background:#fff radial-gradient(circle,transparent 1%,#fff 1%) center/15000%;color:#3867ce;text-decoration:none}.btn-link:active:not(:disabled):not(.disabled){border:1px solid #fff;background-color:rgba(56,103,206,.1);background-size:100%;transition:background 0s;color:#3867ce}.scielo__theme--dark .btn-link{background-color:transparent;border-color:transparent;color:#86acff}.scielo__theme--dark .btn-link:focus{color:#86acff;background-color:transparent;border-color:transparent}.scielo__theme--dark .btn-link:hover:not(:disabled):not(.disabled){border:1px solid #333;background:#333 radial-gradient(circle,transparent 1%,#333 1%) center/15000%;color:#fff;text-decoration:none}.scielo__theme--dark .btn-link:active:not(:disabled):not(.disabled){border:1px solid #333;background-color:rgba(239,238,236,.5);background-size:100%;transition:background 0s;color:#fff}.scielo__theme--light .btn-link{background-color:transparent;color:#3867ce}.scielo__theme--light .btn-link:focus{background-color:transparent;border-color:transparent;color:#3867ce}.scielo__theme--light .btn-link:hover:not(:disabled):not(.disabled){border:1px solid #fff;background:#fff radial-gradient(circle,transparent 1%,#fff 1%) center/15000%;color:#3867ce;text-decoration:none}.scielo__theme--light .btn-link:active:not(:disabled):not(.disabled){border:1px solid #fff;background-color:rgba(56,103,206,.1);background-size:100%;transition:background 0s;color:#3867ce}.btn-group-lg>.btn-link.btn,.btn-link.btn-lg{padding-left:1.875rem;padding-right:1.875rem}.btn-group-sm>.btn-link.btn,.btn-link.btn-sm{padding-left:1.125rem;padding-right:1.125rem}.btn-link.disabled,.btn-link:disabled{background-color:transparent;border:1px solid transparent;color:rgba(0,0,0,.396);opacity:1}.btn-link.disabled:focus,.btn-link:disabled:focus{background-color:transparent;border-color:transparent;color:rgba(0,0,0,.396)}.btn-link.disabled:hover:not(:disabled):not(.disabled),.btn-link:disabled:hover:not(:disabled):not(.disabled){border:1px solid #fff;background:#fff radial-gradient(circle,transparent 1%,#fff 1%) center/15000%;color:rgba(0,0,0,.396);text-decoration:none}.btn-link.disabled:active:not(:disabled):not(.disabled),.btn-link:disabled:active:not(:disabled):not(.disabled){border:1px solid #fff;background-color:rgba(56,103,206,.1);background-size:100%;transition:background 0s;color:rgba(0,0,0,.396)}.scielo__theme--dark .btn-link.disabled,.scielo__theme--dark .btn-link:disabled{background-color:transparent;border-color:transparent;color:rgba(255,255,255,.2)}.scielo__theme--dark .btn-link.disabled:focus,.scielo__theme--dark .btn-link:disabled:focus{color:rgba(255,255,255,.2);background-color:transparent;border-color:transparent}.scielo__theme--dark .btn-link.disabled:hover:not(:disabled):not(.disabled),.scielo__theme--dark .btn-link:disabled:hover:not(:disabled):not(.disabled){border:1px solid #333;background:#333 radial-gradient(circle,transparent 1%,#333 1%) center/15000%;color:#fff;text-decoration:none}.scielo__theme--dark .btn-link.disabled:active:not(:disabled):not(.disabled),.scielo__theme--dark .btn-link:disabled:active:not(:disabled):not(.disabled){border:1px solid #333;background-color:rgba(239,238,236,.5);background-size:100%;transition:background 0s;color:#fff}.scielo__theme--light .btn-link.disabled,.scielo__theme--light .btn-link:disabled{background-color:transparent;color:rgba(0,0,0,.396);opacity:1}.scielo__theme--light .btn-link.disabled:focus,.scielo__theme--light .btn-link:disabled:focus{background-color:transparent;border-color:transparent;color:rgba(0,0,0,.396)}.scielo__theme--light .btn-link.disabled:hover:not(:disabled):not(.disabled),.scielo__theme--light .btn-link:disabled:hover:not(:disabled):not(.disabled){border:1px solid #fff;background:#fff radial-gradient(circle,transparent 1%,#fff 1%) center/15000%;color:rgba(0,0,0,.396);text-decoration:none}.scielo__theme--light .btn-link.disabled:active:not(:disabled):not(.disabled),.scielo__theme--light .btn-link:disabled:active:not(:disabled):not(.disabled){border:1px solid #fff;background-color:rgba(56,103,206,.1);background-size:100%;transition:background 0s;color:rgba(0,0,0,.396)}.btn-link:hover{background:0 0!important;border-color:transparent!important;text-decoration:underline!important}.btn-outline-light,.btn-outline-primary{background-color:transparent;border:1px solid #3867ce;color:#3867ce}.btn-outline-light:focus,.btn-outline-primary:focus{box-shadow:0 0 0 .125rem rgba(56,103,206,.25);outline:0}.btn-outline-light:focus:active,.btn-outline-primary:focus:active{box-shadow:0 0 0 .25rem rgba(56,103,206,.25)}.btn-outline-light:focus,.btn-outline-primary:focus{background-color:transparent;color:#3867ce}.btn-outline-light:focus,.btn-outline-light:hover,.btn-outline-primary:focus,.btn-outline-primary:hover{border-color:#3867ce}.btn-outline-light:hover:not(:disabled):not(.disabled),.btn-outline-primary:hover:not(:disabled):not(.disabled){border:1px solid #3058af;background:#3058af radial-gradient(circle,transparent 1%,#3058af 1%) center/15000%;color:#fff;text-decoration:none}.btn-outline-light:active:not(:disabled):not(.disabled),.btn-outline-primary:active:not(:disabled):not(.disabled){border:1px solid #3058af;background-color:#ebf0fa;background-size:100%;transition:background 0s;color:#fff}.scielo__theme--dark .btn-outline-light,.scielo__theme--dark .btn-outline-primary{background-color:transparent;border-color:#86acff;color:#86acff}.scielo__theme--dark .btn-outline-light:focus,.scielo__theme--dark .btn-outline-primary:focus{background-color:transparent;color:#86acff}.scielo__theme--dark .btn-outline-light:focus,.scielo__theme--dark .btn-outline-light:hover,.scielo__theme--dark .btn-outline-primary:focus,.scielo__theme--dark .btn-outline-primary:hover{border-color:#86acff}.scielo__theme--dark .btn-outline-light:hover:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-primary:hover:not(:disabled):not(.disabled){border:1px solid #b6cdff;background:#b6cdff radial-gradient(circle,transparent 1%,#b6cdff 1%) center/15000%;color:#333;text-decoration:none}.scielo__theme--dark .btn-outline-light:active:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-primary:active:not(:disabled):not(.disabled){border:1px solid #b6cdff;background-color:#f3f7ff;background-size:100%;transition:background 0s;color:#333}.scielo__theme--light .btn-outline-light,.scielo__theme--light .btn-outline-primary{background-color:transparent;border:1px solid #3867ce;color:#3867ce}.scielo__theme--light .btn-outline-light:focus,.scielo__theme--light .btn-outline-primary:focus{background-color:transparent;color:#3867ce}.scielo__theme--light .btn-outline-light:focus,.scielo__theme--light .btn-outline-light:hover,.scielo__theme--light .btn-outline-primary:focus,.scielo__theme--light .btn-outline-primary:hover{border-color:#3867ce}.scielo__theme--light .btn-outline-light:hover:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-primary:hover:not(:disabled):not(.disabled){border:1px solid #3058af;background:#3058af radial-gradient(circle,transparent 1%,#3058af 1%) center/15000%;color:#fff;text-decoration:none}.scielo__theme--light .btn-outline-light:active:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-primary:active:not(:disabled):not(.disabled){border:1px solid #3058af;background-color:#ebf0fa;background-size:100%;transition:background 0s;color:#fff}.btn-outline-dark,.btn-outline-secondary{background-color:transparent;border:1px solid 1px solid #ccc;color:#333}.btn-outline-dark:focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .125rem rgba(204,204,204,.25);outline:0}.btn-outline-dark:focus:active,.btn-outline-secondary:focus:active{box-shadow:0 0 0 .25rem rgba(204,204,204,.25)}.btn-outline-dark:focus,.btn-outline-secondary:focus{background-color:transparent;color:#333}.btn-outline-dark:focus,.btn-outline-dark:hover,.btn-outline-secondary:focus,.btn-outline-secondary:hover{border-color:1px solid #ccc}.btn-outline-dark:hover:not(:disabled):not(.disabled),.btn-outline-secondary:hover:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background:#d9d9d9 radial-gradient(circle,transparent 1%,#d9d9d9 1%) center/15000%;color:#fff;text-decoration:none}.btn-outline-dark:active:not(:disabled):not(.disabled),.btn-outline-secondary:active:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background-color:#fff;background-size:100%;transition:background 0s;color:#fff}.btn-outline-dark:hover:not(:disabled):not(.disabled),.btn-outline-secondary:hover:not(:disabled):not(.disabled){border:1px solid #ccc;background:hoverBgColor radial-gradient(circle,transparent 1%,hoverBgColor 1%) center/15000%;color:#333}.btn-outline-dark:active:not(:disabled):not(.disabled),.btn-outline-secondary:active:not(:disabled):not(.disabled){border:1px solid #ccc;background-color:gray;background-size:100%;transition:background 0s;color:#333}.btn-outline-dark:focus,.btn-outline-secondary:focus{border-color:#ccc}.btn-outline-dark.dropdown-toggle.show,.btn-outline-secondary.dropdown-toggle.show{border-color:#ccc}.scielo__theme--dark .btn-outline-dark,.scielo__theme--dark .btn-outline-secondary{background-color:transparent;border-color:1px solid rgba(255,255,255,.3);color:#c4c4c4}.scielo__theme--dark .btn-outline-dark:focus,.scielo__theme--dark .btn-outline-secondary:focus{background-color:transparent;color:#c4c4c4}.scielo__theme--dark .btn-outline-dark:focus,.scielo__theme--dark .btn-outline-dark:hover,.scielo__theme--dark .btn-outline-secondary:focus,.scielo__theme--dark .btn-outline-secondary:hover{border-color:1px solid rgba(255,255,255,.3)}.scielo__theme--dark .btn-outline-dark:hover:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-secondary:hover:not(:disabled):not(.disabled){border:1px solid #dcdcdc;background:#dcdcdc radial-gradient(circle,transparent 1%,#dcdcdc 1%) center/15000%;color:#333;text-decoration:none}.scielo__theme--dark .btn-outline-dark:active:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-secondary:active:not(:disabled):not(.disabled){border:1px solid #dcdcdc;background-color:#f9f9f9;background-size:100%;transition:background 0s;color:#333}.scielo__theme--dark .btn-outline-dark:hover:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-secondary:hover:not(:disabled):not(.disabled){border:1px solid rgba(255,255,255,.3);background:hoverBgColor radial-gradient(circle,transparent 1%,hoverBgColor 1%) center/15000%;color:#333}.scielo__theme--dark .btn-outline-dark:active:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-secondary:active:not(:disabled):not(.disabled){border:1px solid rgba(255,255,255,.3);background-color:#f9f9f9;background-size:100%;transition:background 0s;color:#333}.scielo__theme--dark .btn-outline-dark:focus,.scielo__theme--dark .btn-outline-secondary:focus{border-color:rgba(255,255,255,.3)}.scielo__theme--dark .btn-outline-dark.dropdown-toggle.show,.scielo__theme--dark .btn-outline-secondary.dropdown-toggle.show{background:0 0;color:#c4c4c4}.scielo__theme--dark .btn-outline-dark.dropdown-toggle.show:focus,.scielo__theme--dark .btn-outline-secondary.dropdown-toggle.show:focus{box-shadow:0 0 0 .125rem rgba(204,204,204,.25)}.scielo__theme--light .btn-outline-dark,.scielo__theme--light .btn-outline-secondary{background-color:transparent;border:1px solid 1px solid #ccc;color:#333}.scielo__theme--light .btn-outline-dark:focus,.scielo__theme--light .btn-outline-secondary:focus{background-color:transparent;color:#333}.scielo__theme--light .btn-outline-dark:focus,.scielo__theme--light .btn-outline-dark:hover,.scielo__theme--light .btn-outline-secondary:focus,.scielo__theme--light .btn-outline-secondary:hover{border-color:1px solid #ccc}.scielo__theme--light .btn-outline-dark:hover:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-secondary:hover:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background:#d9d9d9 radial-gradient(circle,transparent 1%,#d9d9d9 1%) center/15000%;color:#fff;text-decoration:none}.scielo__theme--light .btn-outline-dark:active:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-secondary:active:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background-color:#fff;background-size:100%;transition:background 0s;color:#fff}.scielo__theme--light .btn-outline-dark:hover:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-secondary:hover:not(:disabled):not(.disabled){border:1px solid #ccc;background:hoverBgColor radial-gradient(circle,transparent 1%,hoverBgColor 1%) center/15000%;color:#333}.scielo__theme--light .btn-outline-dark:active:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-secondary:active:not(:disabled):not(.disabled){border:1px solid #ccc;background-color:gray;background-size:100%;transition:background 0s;color:#333}.scielo__theme--light .btn-outline-dark:focus,.scielo__theme--light .btn-outline-secondary:focus{border-color:#ccc}.btn-outline-info{background-color:transparent;border:1px solid #2195a9;color:#2299ad}.btn-outline-info:focus{box-shadow:0 0 0 .125rem rgba(33,149,169,.25);outline:0}.btn-outline-info:focus:active{box-shadow:0 0 0 .25rem rgba(33,149,169,.25)}.btn-outline-info:focus{background-color:transparent;color:#2299ad}.btn-outline-info:focus,.btn-outline-info:hover{border-color:#2195a9}.btn-outline-info:hover:not(:disabled):not(.disabled){border:1px solid #1c7f90;background:#1c7f90 radial-gradient(circle,transparent 1%,#1c7f90 1%) center/15000%;color:#fff;text-decoration:none}.btn-outline-info:active:not(:disabled):not(.disabled){border:1px solid #1c7f90;background-color:#e9f4f6;background-size:100%;transition:background 0s;color:#fff}.scielo__theme--dark .btn-outline-info{background-color:transparent;border-color:#2299ad;color:#2299ad}.scielo__theme--dark .btn-outline-info:focus{background-color:transparent;color:#2299ad}.scielo__theme--dark .btn-outline-info:focus,.scielo__theme--dark .btn-outline-info:hover{border-color:#2299ad}.scielo__theme--dark .btn-outline-info:hover:not(:disabled):not(.disabled){border:1px solid #7ac2ce;background:#7ac2ce radial-gradient(circle,transparent 1%,#7ac2ce 1%) center/15000%;color:#333;text-decoration:none}.scielo__theme--dark .btn-outline-info:active:not(:disabled):not(.disabled){border:1px solid #7ac2ce;background-color:#e9f5f7;background-size:100%;transition:background 0s;color:#333}.scielo__theme--light .btn-outline-info{background-color:transparent;border:1px solid #2195a9;color:#2299ad}.scielo__theme--light .btn-outline-info:focus{background-color:transparent;color:#2299ad}.scielo__theme--light .btn-outline-info:focus,.scielo__theme--light .btn-outline-info:hover{border-color:#2195a9}.scielo__theme--light .btn-outline-info:hover:not(:disabled):not(.disabled){border:1px solid #1c7f90;background:#1c7f90 radial-gradient(circle,transparent 1%,#1c7f90 1%) center/15000%;color:#fff;text-decoration:none}.scielo__theme--light .btn-outline-info:active:not(:disabled):not(.disabled){border:1px solid #1c7f90;background-color:#e9f4f6;background-size:100%;transition:background 0s;color:#fff}.btn-outline-success{background-color:transparent;border:1px solid #2c9d45;color:#2c9d45}.btn-outline-success:focus{box-shadow:0 0 0 .125rem rgba(44,157,69,.25);outline:0}.btn-outline-success:focus:active{box-shadow:0 0 0 .25rem rgba(44,157,69,.25)}.btn-outline-success:focus{background-color:transparent;color:#2c9d45}.btn-outline-success:focus,.btn-outline-success:hover{border-color:#2c9d45}.btn-outline-success:hover:not(:disabled):not(.disabled){border:1px solid #25853b;background:#25853b radial-gradient(circle,transparent 1%,#25853b 1%) center/15000%;color:#fff;text-decoration:none}.btn-outline-success:active:not(:disabled):not(.disabled){border:1px solid #25853b;background-color:#eaf5ec;background-size:100%;transition:background 0s;color:#fff}.scielo__theme--dark .btn-outline-success{background-color:transparent;border-color:#2c9d45;color:#2c9d45}.scielo__theme--dark .btn-outline-success:focus{background-color:transparent;color:#2c9d45}.scielo__theme--dark .btn-outline-success:focus,.scielo__theme--dark .btn-outline-success:hover{border-color:#2c9d45}.scielo__theme--dark .btn-outline-success:hover:not(:disabled):not(.disabled){border:1px solid #80c48f;background:#80c48f radial-gradient(circle,transparent 1%,#80c48f 1%) center/15000%;color:#333;text-decoration:none}.scielo__theme--dark .btn-outline-success:active:not(:disabled):not(.disabled){border:1px solid #80c48f;background-color:#eaf5ec;background-size:100%;transition:background 0s;color:#333}.scielo__theme--light .btn-outline-success{background-color:transparent;border:1px solid #2c9d45;color:#2c9d45}.scielo__theme--light .btn-outline-success:focus{background-color:transparent;color:#2c9d45}.scielo__theme--light .btn-outline-success:focus,.scielo__theme--light .btn-outline-success:hover{border-color:#2c9d45}.scielo__theme--light .btn-outline-success:hover:not(:disabled):not(.disabled){border:1px solid #25853b;background:#25853b radial-gradient(circle,transparent 1%,#25853b 1%) center/15000%;color:#fff;text-decoration:none}.scielo__theme--light .btn-outline-success:active:not(:disabled):not(.disabled){border:1px solid #25853b;background-color:#eaf5ec;background-size:100%;transition:background 0s;color:#fff}.btn-outline-danger{background-color:transparent;border:1px solid #c63800;color:#c63800}.btn-outline-danger:focus{box-shadow:0 0 0 .125rem rgba(198,56,0,.25);outline:0}.btn-outline-danger:focus:active{box-shadow:0 0 0 .25rem rgba(198,56,0,.25)}.btn-outline-danger:focus{background-color:transparent;color:#c63800}.btn-outline-danger:focus,.btn-outline-danger:hover{border-color:#c63800}.btn-outline-danger:hover:not(:disabled):not(.disabled){border:1px solid #a83000;background:#a83000 radial-gradient(circle,transparent 1%,#a83000 1%) center/15000%;color:#fff;text-decoration:none}.btn-outline-danger:active:not(:disabled):not(.disabled){border:1px solid #a83000;background-color:#f9ebe6;background-size:100%;transition:background 0s;color:#fff}.scielo__theme--dark .btn-outline-danger{background-color:transparent;border-color:#ff7e4a;color:#ff7e4a}.scielo__theme--dark .btn-outline-danger:focus{background-color:transparent;color:#ff7e4a}.scielo__theme--dark .btn-outline-danger:focus,.scielo__theme--dark .btn-outline-danger:hover{border-color:#ff7e4a}.scielo__theme--dark .btn-outline-danger:hover:not(:disabled):not(.disabled){border:1px solid #ffb292;background:#ffb292 radial-gradient(circle,transparent 1%,#ffb292 1%) center/15000%;color:#333;text-decoration:none}.scielo__theme--dark .btn-outline-danger:active:not(:disabled):not(.disabled){border:1px solid #ffb292;background-color:#fff2ed;background-size:100%;transition:background 0s;color:#333}.scielo__theme--light .btn-outline-danger{background-color:transparent;border:1px solid #c63800;color:#c63800}.scielo__theme--light .btn-outline-danger:focus{background-color:transparent;color:#c63800}.scielo__theme--light .btn-outline-danger:focus,.scielo__theme--light .btn-outline-danger:hover{border-color:#c63800}.scielo__theme--light .btn-outline-danger:hover:not(:disabled):not(.disabled){border:1px solid #a83000;background:#a83000 radial-gradient(circle,transparent 1%,#a83000 1%) center/15000%;color:#fff;text-decoration:none}.scielo__theme--light .btn-outline-danger:active:not(:disabled):not(.disabled){border:1px solid #a83000;background-color:#f9ebe6;background-size:100%;transition:background 0s;color:#fff}.btn-outline-warning{background-color:transparent;border:1px solid #b67f00;color:#b67f00}.btn-outline-warning:focus{box-shadow:0 0 0 .125rem rgba(182,127,0,.25);outline:0}.btn-outline-warning:focus:active{box-shadow:0 0 0 .25rem rgba(182,127,0,.25)}.btn-outline-warning:focus{background-color:transparent;color:#b67f00}.btn-outline-warning:focus,.btn-outline-warning:hover{border-color:#b67f00}.btn-outline-warning:hover:not(:disabled):not(.disabled){border:1px solid #9b6c00;background:#9b6c00 radial-gradient(circle,transparent 1%,#9b6c00 1%) center/15000%;color:#fff;text-decoration:none}.btn-outline-warning:active:not(:disabled):not(.disabled){border:1px solid #9b6c00;background-color:#f8f2e6;background-size:100%;transition:background 0s;color:#fff}.scielo__theme--dark .btn-outline-warning{background-color:transparent;border-color:#b67f00;color:#b67f00}.scielo__theme--dark .btn-outline-warning:focus{background-color:transparent;color:#b67f00}.scielo__theme--dark .btn-outline-warning:focus,.scielo__theme--dark .btn-outline-warning:hover{border-color:#b67f00}.scielo__theme--dark .btn-outline-warning:hover:not(:disabled):not(.disabled){border:1px solid #d3b266;background:#d3b266 radial-gradient(circle,transparent 1%,#d3b266 1%) center/15000%;color:#333;text-decoration:none}.scielo__theme--dark .btn-outline-warning:active:not(:disabled):not(.disabled){border:1px solid #d3b266;background-color:#f8f2e6;background-size:100%;transition:background 0s;color:#333}.scielo__theme--light .btn-outline-warning{background-color:transparent;border:1px solid #b67f00;color:#b67f00}.scielo__theme--light .btn-outline-warning:focus{background-color:transparent;color:#b67f00}.scielo__theme--light .btn-outline-warning:focus,.scielo__theme--light .btn-outline-warning:hover{border-color:#b67f00}.scielo__theme--light .btn-outline-warning:hover:not(:disabled):not(.disabled){border:1px solid #9b6c00;background:#9b6c00 radial-gradient(circle,transparent 1%,#9b6c00 1%) center/15000%;color:#fff;text-decoration:none}.scielo__theme--light .btn-outline-warning:active:not(:disabled):not(.disabled){border:1px solid #9b6c00;background-color:#f8f2e6;background-size:100%;transition:background 0s;color:#fff}.btn-outline-danger.disabled,.btn-outline-danger:disabled,.btn-outline-dark.disabled,.btn-outline-dark:disabled,.btn-outline-info.disabled,.btn-outline-info:disabled,.btn-outline-light.disabled,.btn-outline-light:disabled,.btn-outline-primary.disabled,.btn-outline-primary:disabled,.btn-outline-secondary.disabled,.btn-outline-secondary:disabled,.btn-outline-success.disabled,.btn-outline-success:disabled,.btn-outline-warning.disabled,.btn-outline-warning:disabled{background-color:transparent;border:1px solid #f7f6f4;color:rgba(0,0,0,.396);opacity:1}.btn-outline-danger.disabled:focus,.btn-outline-danger:disabled:focus,.btn-outline-dark.disabled:focus,.btn-outline-dark:disabled:focus,.btn-outline-info.disabled:focus,.btn-outline-info:disabled:focus,.btn-outline-light.disabled:focus,.btn-outline-light:disabled:focus,.btn-outline-primary.disabled:focus,.btn-outline-primary:disabled:focus,.btn-outline-secondary.disabled:focus,.btn-outline-secondary:disabled:focus,.btn-outline-success.disabled:focus,.btn-outline-success:disabled:focus,.btn-outline-warning.disabled:focus,.btn-outline-warning:disabled:focus{background-color:transparent;color:rgba(0,0,0,.396)}.btn-outline-danger.disabled:focus,.btn-outline-danger.disabled:hover,.btn-outline-danger:disabled:focus,.btn-outline-danger:disabled:hover,.btn-outline-dark.disabled:focus,.btn-outline-dark.disabled:hover,.btn-outline-dark:disabled:focus,.btn-outline-dark:disabled:hover,.btn-outline-info.disabled:focus,.btn-outline-info.disabled:hover,.btn-outline-info:disabled:focus,.btn-outline-info:disabled:hover,.btn-outline-light.disabled:focus,.btn-outline-light.disabled:hover,.btn-outline-light:disabled:focus,.btn-outline-light:disabled:hover,.btn-outline-primary.disabled:focus,.btn-outline-primary.disabled:hover,.btn-outline-primary:disabled:focus,.btn-outline-primary:disabled:hover,.btn-outline-secondary.disabled:focus,.btn-outline-secondary.disabled:hover,.btn-outline-secondary:disabled:focus,.btn-outline-secondary:disabled:hover,.btn-outline-success.disabled:focus,.btn-outline-success.disabled:hover,.btn-outline-success:disabled:focus,.btn-outline-success:disabled:hover,.btn-outline-warning.disabled:focus,.btn-outline-warning.disabled:hover,.btn-outline-warning:disabled:focus,.btn-outline-warning:disabled:hover{border-color:#f7f6f4}.btn-outline-danger.disabled:hover:not(:disabled):not(.disabled),.btn-outline-danger:disabled:hover:not(:disabled):not(.disabled),.btn-outline-dark.disabled:hover:not(:disabled):not(.disabled),.btn-outline-dark:disabled:hover:not(:disabled):not(.disabled),.btn-outline-info.disabled:hover:not(:disabled):not(.disabled),.btn-outline-info:disabled:hover:not(:disabled):not(.disabled),.btn-outline-light.disabled:hover:not(:disabled):not(.disabled),.btn-outline-light:disabled:hover:not(:disabled):not(.disabled),.btn-outline-primary.disabled:hover:not(:disabled):not(.disabled),.btn-outline-primary:disabled:hover:not(:disabled):not(.disabled),.btn-outline-secondary.disabled:hover:not(:disabled):not(.disabled),.btn-outline-secondary:disabled:hover:not(:disabled):not(.disabled),.btn-outline-success.disabled:hover:not(:disabled):not(.disabled),.btn-outline-success:disabled:hover:not(:disabled):not(.disabled),.btn-outline-warning.disabled:hover:not(:disabled):not(.disabled),.btn-outline-warning:disabled:hover:not(:disabled):not(.disabled){border:1px solid #3058af;background:#3058af radial-gradient(circle,transparent 1%,#3058af 1%) center/15000%;color:#fff;text-decoration:none}.btn-outline-danger.disabled:active:not(:disabled):not(.disabled),.btn-outline-danger:disabled:active:not(:disabled):not(.disabled),.btn-outline-dark.disabled:active:not(:disabled):not(.disabled),.btn-outline-dark:disabled:active:not(:disabled):not(.disabled),.btn-outline-info.disabled:active:not(:disabled):not(.disabled),.btn-outline-info:disabled:active:not(:disabled):not(.disabled),.btn-outline-light.disabled:active:not(:disabled):not(.disabled),.btn-outline-light:disabled:active:not(:disabled):not(.disabled),.btn-outline-primary.disabled:active:not(:disabled):not(.disabled),.btn-outline-primary:disabled:active:not(:disabled):not(.disabled),.btn-outline-secondary.disabled:active:not(:disabled):not(.disabled),.btn-outline-secondary:disabled:active:not(:disabled):not(.disabled),.btn-outline-success.disabled:active:not(:disabled):not(.disabled),.btn-outline-success:disabled:active:not(:disabled):not(.disabled),.btn-outline-warning.disabled:active:not(:disabled):not(.disabled),.btn-outline-warning:disabled:active:not(:disabled):not(.disabled){border:1px solid #3058af;background-color:#ebf0fa;background-size:100%;transition:background 0s;color:#fff}.scielo__theme--dark .btn-outline-danger.disabled,.scielo__theme--dark .btn-outline-danger:disabled,.scielo__theme--dark .btn-outline-dark.disabled,.scielo__theme--dark .btn-outline-dark:disabled,.scielo__theme--dark .btn-outline-info.disabled,.scielo__theme--dark .btn-outline-info:disabled,.scielo__theme--dark .btn-outline-light.disabled,.scielo__theme--dark .btn-outline-light:disabled,.scielo__theme--dark .btn-outline-primary.disabled,.scielo__theme--dark .btn-outline-primary:disabled,.scielo__theme--dark .btn-outline-secondary.disabled,.scielo__theme--dark .btn-outline-secondary:disabled,.scielo__theme--dark .btn-outline-success.disabled,.scielo__theme--dark .btn-outline-success:disabled,.scielo__theme--dark .btn-outline-warning.disabled,.scielo__theme--dark .btn-outline-warning:disabled{background-color:transparent;border-color:rgba(255,255,255,.2);color:#c4c4c4}.scielo__theme--dark .btn-outline-danger.disabled:focus,.scielo__theme--dark .btn-outline-danger:disabled:focus,.scielo__theme--dark .btn-outline-dark.disabled:focus,.scielo__theme--dark .btn-outline-dark:disabled:focus,.scielo__theme--dark .btn-outline-info.disabled:focus,.scielo__theme--dark .btn-outline-info:disabled:focus,.scielo__theme--dark .btn-outline-light.disabled:focus,.scielo__theme--dark .btn-outline-light:disabled:focus,.scielo__theme--dark .btn-outline-primary.disabled:focus,.scielo__theme--dark .btn-outline-primary:disabled:focus,.scielo__theme--dark .btn-outline-secondary.disabled:focus,.scielo__theme--dark .btn-outline-secondary:disabled:focus,.scielo__theme--dark .btn-outline-success.disabled:focus,.scielo__theme--dark .btn-outline-success:disabled:focus,.scielo__theme--dark .btn-outline-warning.disabled:focus,.scielo__theme--dark .btn-outline-warning:disabled:focus{background-color:transparent;color:#c4c4c4}.scielo__theme--dark .btn-outline-danger.disabled:focus,.scielo__theme--dark .btn-outline-danger.disabled:hover,.scielo__theme--dark .btn-outline-danger:disabled:focus,.scielo__theme--dark .btn-outline-danger:disabled:hover,.scielo__theme--dark .btn-outline-dark.disabled:focus,.scielo__theme--dark .btn-outline-dark.disabled:hover,.scielo__theme--dark .btn-outline-dark:disabled:focus,.scielo__theme--dark .btn-outline-dark:disabled:hover,.scielo__theme--dark .btn-outline-info.disabled:focus,.scielo__theme--dark .btn-outline-info.disabled:hover,.scielo__theme--dark .btn-outline-info:disabled:focus,.scielo__theme--dark .btn-outline-info:disabled:hover,.scielo__theme--dark .btn-outline-light.disabled:focus,.scielo__theme--dark .btn-outline-light.disabled:hover,.scielo__theme--dark .btn-outline-light:disabled:focus,.scielo__theme--dark .btn-outline-light:disabled:hover,.scielo__theme--dark .btn-outline-primary.disabled:focus,.scielo__theme--dark .btn-outline-primary.disabled:hover,.scielo__theme--dark .btn-outline-primary:disabled:focus,.scielo__theme--dark .btn-outline-primary:disabled:hover,.scielo__theme--dark .btn-outline-secondary.disabled:focus,.scielo__theme--dark .btn-outline-secondary.disabled:hover,.scielo__theme--dark .btn-outline-secondary:disabled:focus,.scielo__theme--dark .btn-outline-secondary:disabled:hover,.scielo__theme--dark .btn-outline-success.disabled:focus,.scielo__theme--dark .btn-outline-success.disabled:hover,.scielo__theme--dark .btn-outline-success:disabled:focus,.scielo__theme--dark .btn-outline-success:disabled:hover,.scielo__theme--dark .btn-outline-warning.disabled:focus,.scielo__theme--dark .btn-outline-warning.disabled:hover,.scielo__theme--dark .btn-outline-warning:disabled:focus,.scielo__theme--dark .btn-outline-warning:disabled:hover{border-color:rgba(255,255,255,.2)}.scielo__theme--dark .btn-outline-danger.disabled:hover:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-danger:disabled:hover:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-dark.disabled:hover:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-dark:disabled:hover:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-info.disabled:hover:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-info:disabled:hover:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-light.disabled:hover:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-light:disabled:hover:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-primary.disabled:hover:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-primary:disabled:hover:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-secondary.disabled:hover:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-secondary:disabled:hover:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-success.disabled:hover:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-success:disabled:hover:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-warning.disabled:hover:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-warning:disabled:hover:not(:disabled):not(.disabled){border:1px solid #b6cdff;background:#b6cdff radial-gradient(circle,transparent 1%,#b6cdff 1%) center/15000%;color:#333;text-decoration:none}.scielo__theme--dark .btn-outline-danger.disabled:active:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-danger:disabled:active:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-dark.disabled:active:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-dark:disabled:active:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-info.disabled:active:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-info:disabled:active:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-light.disabled:active:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-light:disabled:active:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-primary.disabled:active:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-primary:disabled:active:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-secondary.disabled:active:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-secondary:disabled:active:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-success.disabled:active:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-success:disabled:active:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-warning.disabled:active:not(:disabled):not(.disabled),.scielo__theme--dark .btn-outline-warning:disabled:active:not(:disabled):not(.disabled){border:1px solid #b6cdff;background-color:#f3f7ff;background-size:100%;transition:background 0s;color:#333}.scielo__theme--light .btn-outline-danger.disabled,.scielo__theme--light .btn-outline-danger:disabled,.scielo__theme--light .btn-outline-dark.disabled,.scielo__theme--light .btn-outline-dark:disabled,.scielo__theme--light .btn-outline-info.disabled,.scielo__theme--light .btn-outline-info:disabled,.scielo__theme--light .btn-outline-light.disabled,.scielo__theme--light .btn-outline-light:disabled,.scielo__theme--light .btn-outline-primary.disabled,.scielo__theme--light .btn-outline-primary:disabled,.scielo__theme--light .btn-outline-secondary.disabled,.scielo__theme--light .btn-outline-secondary:disabled,.scielo__theme--light .btn-outline-success.disabled,.scielo__theme--light .btn-outline-success:disabled,.scielo__theme--light .btn-outline-warning.disabled,.scielo__theme--light .btn-outline-warning:disabled{background-color:transparent;border:1px solid #f7f6f4;color:rgba(0,0,0,.396);opacity:1}.scielo__theme--light .btn-outline-danger.disabled:focus,.scielo__theme--light .btn-outline-danger:disabled:focus,.scielo__theme--light .btn-outline-dark.disabled:focus,.scielo__theme--light .btn-outline-dark:disabled:focus,.scielo__theme--light .btn-outline-info.disabled:focus,.scielo__theme--light .btn-outline-info:disabled:focus,.scielo__theme--light .btn-outline-light.disabled:focus,.scielo__theme--light .btn-outline-light:disabled:focus,.scielo__theme--light .btn-outline-primary.disabled:focus,.scielo__theme--light .btn-outline-primary:disabled:focus,.scielo__theme--light .btn-outline-secondary.disabled:focus,.scielo__theme--light .btn-outline-secondary:disabled:focus,.scielo__theme--light .btn-outline-success.disabled:focus,.scielo__theme--light .btn-outline-success:disabled:focus,.scielo__theme--light .btn-outline-warning.disabled:focus,.scielo__theme--light .btn-outline-warning:disabled:focus{background-color:transparent;color:rgba(0,0,0,.396)}.scielo__theme--light .btn-outline-danger.disabled:focus,.scielo__theme--light .btn-outline-danger.disabled:hover,.scielo__theme--light .btn-outline-danger:disabled:focus,.scielo__theme--light .btn-outline-danger:disabled:hover,.scielo__theme--light .btn-outline-dark.disabled:focus,.scielo__theme--light .btn-outline-dark.disabled:hover,.scielo__theme--light .btn-outline-dark:disabled:focus,.scielo__theme--light .btn-outline-dark:disabled:hover,.scielo__theme--light .btn-outline-info.disabled:focus,.scielo__theme--light .btn-outline-info.disabled:hover,.scielo__theme--light .btn-outline-info:disabled:focus,.scielo__theme--light .btn-outline-info:disabled:hover,.scielo__theme--light .btn-outline-light.disabled:focus,.scielo__theme--light .btn-outline-light.disabled:hover,.scielo__theme--light .btn-outline-light:disabled:focus,.scielo__theme--light .btn-outline-light:disabled:hover,.scielo__theme--light .btn-outline-primary.disabled:focus,.scielo__theme--light .btn-outline-primary.disabled:hover,.scielo__theme--light .btn-outline-primary:disabled:focus,.scielo__theme--light .btn-outline-primary:disabled:hover,.scielo__theme--light .btn-outline-secondary.disabled:focus,.scielo__theme--light .btn-outline-secondary.disabled:hover,.scielo__theme--light .btn-outline-secondary:disabled:focus,.scielo__theme--light .btn-outline-secondary:disabled:hover,.scielo__theme--light .btn-outline-success.disabled:focus,.scielo__theme--light .btn-outline-success.disabled:hover,.scielo__theme--light .btn-outline-success:disabled:focus,.scielo__theme--light .btn-outline-success:disabled:hover,.scielo__theme--light .btn-outline-warning.disabled:focus,.scielo__theme--light .btn-outline-warning.disabled:hover,.scielo__theme--light .btn-outline-warning:disabled:focus,.scielo__theme--light .btn-outline-warning:disabled:hover{border-color:#f7f6f4}.scielo__theme--light .btn-outline-danger.disabled:hover:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-danger:disabled:hover:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-dark.disabled:hover:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-dark:disabled:hover:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-info.disabled:hover:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-info:disabled:hover:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-light.disabled:hover:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-light:disabled:hover:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-primary.disabled:hover:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-primary:disabled:hover:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-secondary.disabled:hover:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-secondary:disabled:hover:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-success.disabled:hover:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-success:disabled:hover:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-warning.disabled:hover:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-warning:disabled:hover:not(:disabled):not(.disabled){border:1px solid #3058af;background:#3058af radial-gradient(circle,transparent 1%,#3058af 1%) center/15000%;color:#fff;text-decoration:none}.scielo__theme--light .btn-outline-danger.disabled:active:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-danger:disabled:active:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-dark.disabled:active:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-dark:disabled:active:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-info.disabled:active:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-info:disabled:active:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-light.disabled:active:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-light:disabled:active:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-primary.disabled:active:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-primary:disabled:active:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-secondary.disabled:active:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-secondary:disabled:active:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-success.disabled:active:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-success:disabled:active:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-warning.disabled:active:not(:disabled):not(.disabled),.scielo__theme--light .btn-outline-warning:disabled:active:not(:disabled):not(.disabled){border:1px solid #3058af;background-color:#ebf0fa;background-size:100%;transition:background 0s;color:#fff}.btn[class*=scielo__btn-with-icon--left]{padding-left:2rem}.btn[class*=scielo__btn-with-icon--left] [class^=material-icons]{position:absolute;top:50%;transform:translateY(-50%);width:1.25rem;height:1.25rem;font-size:1.25rem;line-height:1.25rem}.btn[class*=scielo__btn-with-icon--left] [class^=material-icons]:before{vertical-align:top}.btn[class*=scielo__btn-with-icon--left] [class^=material-icons]{left:.5rem}.btn[class*=scielo__btn-with-icon--right]{padding-right:2rem}.btn[class*=scielo__btn-with-icon--right] [class^=material-icons]{position:absolute;top:50%;transform:translateY(-50%);width:1.25rem;height:1.25rem;font-size:1.25rem;line-height:1.25rem}.btn[class*=scielo__btn-with-icon--right] [class^=material-icons]:before{vertical-align:top}.btn[class*=scielo__btn-with-icon--right] [class^=material-icons]{right:.5rem}.btn[class*=scielo__btn-with-icon--only]{padding:0;width:2.5rem}.btn[class*=scielo__btn-with-icon--only] [class^=material-icons]{position:absolute;top:50%;transform:translateY(-50%);width:1.25rem;height:1.25rem;font-size:1.25rem;line-height:1.25rem}.btn[class*=scielo__btn-with-icon--only] [class^=material-icons]:before{vertical-align:top}.btn[class*=scielo__btn-with-icon--only] [class^=material-icons]{top:50%;left:50%;transform:translate(-50%,-50%)}.btn.dropdown-toggle[class*=scielo__btn-with-icon--only]{width:3rem;display:flex;justify-content:center;align-items:center;padding-left:2rem;padding-right:1.5rem}.btn.dropdown-toggle[class*=scielo__btn-with-icon--only]:after{right:0;position:static;transform:none;margin:0}.btn.dropdown-toggle[class*=scielo__btn-with-icon--only] [class^=material-icons]{position:static;transform:none}.btn.dropdown-toggle:after{position:absolute;top:50%;transform:translateY(-50%);font-family:'Material Icons Outlined';content:"arrow_drop_down";color:inherit;border:0;line-height:1.5rem!important;text-align:center;right:1rem;width:1.25rem;height:1.25rem;font-size:1.25rem;line-height:1.25rem;transition:.3s all ease-out}.btn.dropdown-toggle[class*=scielo__btn-with-icon--left]{padding-right:1.5rem}.btn.dropdown-toggle[class*=scielo__btn-with-icon--left].btn-link{padding-left:2.625rem;padding-right:2.625rem}.btn.dropdown-toggle[class*=scielo__btn-with-icon--left]:after{right:.3rem}.btn-group-lg>.btn,.btn-group.btn-group-lg>.btn,.btn-lg{padding:.75rem 1.2rem;border-radius:.25rem;line-height:1.5rem;height:3rem;font-size:1.25rem}.btn-group-lg>.btn[class*=scielo__btn-with-icon--left],.btn-lg[class*=scielo__btn-with-icon--left]{padding-left:2.5rem}.btn-group-lg>.btn[class*=scielo__btn-with-icon--left] [class^=material-icons],.btn-lg[class*=scielo__btn-with-icon--left] [class^=material-icons]{position:absolute;top:50%;transform:translateY(-50%);width:1.5rem;height:1.5rem;font-size:1.5rem;line-height:1.5rem}.btn-group-lg>.btn[class*=scielo__btn-with-icon--left] [class^=material-icons]:before,.btn-lg[class*=scielo__btn-with-icon--left] [class^=material-icons]:before{vertical-align:top}.btn-group-lg>.btn[class*=scielo__btn-with-icon--left] [class^=material-icons],.btn-lg[class*=scielo__btn-with-icon--left] [class^=material-icons]{left:.625rem}.btn-group-lg>.btn[class*=scielo__btn-with-icon--right],.btn-lg[class*=scielo__btn-with-icon--right]{padding-right:2.5rem}.btn-group-lg>.btn[class*=scielo__btn-with-icon--right] [class^=material-icons],.btn-lg[class*=scielo__btn-with-icon--right] [class^=material-icons]{position:absolute;top:50%;transform:translateY(-50%);width:1.5rem;height:1.5rem;font-size:1.5rem;line-height:1.5rem}.btn-group-lg>.btn[class*=scielo__btn-with-icon--right] [class^=material-icons]:before,.btn-lg[class*=scielo__btn-with-icon--right] [class^=material-icons]:before{vertical-align:top}.btn-group-lg>.btn[class*=scielo__btn-with-icon--right] [class^=material-icons],.btn-lg[class*=scielo__btn-with-icon--right] [class^=material-icons]{right:.625rem}.btn-group-lg>.btn[class*=scielo__btn-with-icon--only],.btn-lg[class*=scielo__btn-with-icon--only]{padding:0;width:3rem}.btn-group-lg>.btn[class*=scielo__btn-with-icon--only] [class^=material-icons],.btn-lg[class*=scielo__btn-with-icon--only] [class^=material-icons]{position:absolute;top:50%;transform:translateY(-50%);width:1.5rem;height:1.5rem;font-size:1.5rem;line-height:1.5rem}.btn-group-lg>.btn[class*=scielo__btn-with-icon--only] [class^=material-icons]:before,.btn-lg[class*=scielo__btn-with-icon--only] [class^=material-icons]:before{vertical-align:top}.btn-group-lg>.btn[class*=scielo__btn-with-icon--only] [class^=material-icons],.btn-lg[class*=scielo__btn-with-icon--only] [class^=material-icons]{top:50%;left:50%;transform:translate(-50%,-50%)}.btn-group-lg>.dropdown-toggle.btn[class*=scielo__btn-with-icon--only],.btn-lg.dropdown-toggle[class*=scielo__btn-with-icon--only]{width:3rem;padding-left:2.5rem;padding-right:2.5rem;display:flex;justify-content:center;align-items:center}.btn-group-lg>.dropdown-toggle.btn:after,.btn-lg.dropdown-toggle:after{right:1.25rem;width:1.5rem;height:1.5rem;font-size:1.5rem;line-height:1.5rem}.btn-group-sm>.btn,.btn-group.btn-group-sm>.btn,.btn-sm{padding:.5rem .8rem;border-radius:.25rem;line-height:1rem;height:2rem}.dropdown>.btn{padding-right:2.5rem}.dropdown.show .btn{border-top-left-radius:1.5rem;border-top-right-radius:1.5rem;border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.dropdown.show .btn:after{transform:rotate(180deg) translateY(50%)}.dropdown .dropdown-menu{background:#fff;border-color:#ccc}.scielo__theme--dark .dropdown .dropdown-menu{background:#333;border-color:rgba(255,255,255,.3)}.scielo__theme--light .dropdown .dropdown-menu{background:#fff;border-color:#ccc}.dropdown .dropdown-menu>a{color:#333}.dropdown .dropdown-menu>a:hover{background:#f7f6f4}.scielo__theme--dark .dropdown .dropdown-menu>a{color:#c4c4c4}.scielo__theme--dark .dropdown .dropdown-menu>a:hover{background:#414141}.scielo__theme--light .dropdown .dropdown-menu>a{color:#333}.scielo__theme--light .dropdown .dropdown-menu>a:hover{background:#f7f6f4}.copyLink{position:relative;cursor:pointer}.copyLink:after{font-family:'Material Icons Outlined';content:"check";position:absolute;background:#2c9d45;top:100%;left:0;bottom:0;text-align:center;width:100%;color:#fff;font-size:20px;display:block;padding-top:.5rem;text-align:center;transition:all .3s ease-out,text-indent .3s ease-out}.scielo__theme--dark .copyLink:after{background:#2c9d45;color:#333}.scielo__theme--light .copyLink:after{background:#2c9d45;color:#fff}.copyLink.copyFeedback:after{top:0;visibility:visible}.floatingBtnError{position:fixed;right:calc(0px + var(--bs-gutter-x,1.5rem));top:35%;transform:rotate(-90deg);display:none;transform-origin:right center;margin:0}@media (min-width:1024px){.floatingBtnError{display:block}}.fixed-top .dropdown-item{color:#3867ce}.btn-group>.btn{font-weight:400!important;font-size:1rem;letter-spacing:.1px!important;white-space:nowrap}.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0;margin-left:0}.btn-group>.btn:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0;margin-right:-1px}.btn-group>.btn:not(:first-child):not(.scielo__btn-with-icon--left):not(.scielo__btn-with-icon--only):not(.arrow-only){padding-left:1.5rem}.btn-group>.btn:not(:last-child):not(.scielo__btn-with-icon--right):not(.scielo__btn-with-icon--only){padding-right:1.5rem}.btn-group>.btn-group>.btn{border-radius:0}.btn-group>.btn-group>.btn.dropdown-toggle{padding-right:3rem!important}.btn-group>.btn-group:first-child>.btn.dropdown-toggle{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.btn-group>.btn-group:last-child>.btn.dropdown-toggle{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:0;padding-left:1.5rem}.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0;margin-right:0;padding-right:1.5rem}.btn-group.btn-group-sm>.btn:not(:first-child):not(.scielo__btn-with-icon--left):not(.scielo__btn-with-icon--only):not(.arrow-only){padding-left:1.125rem}.btn-group.btn-group-sm>.btn:not(:last-child):not(.scielo__btn-with-icon--right):not(.scielo__btn-with-icon--only){padding-right:1.125rem}.btn-group.btn-group-lg>.btn:not(:first-child):not(.scielo__btn-with-icon--left):not(.scielo__btn-with-icon--only):not(.arrow-only){padding-left:1.875rem}.btn-group.btn-group-lg>.btn:not(:last-child):not(.scielo__btn-with-icon--right):not(.scielo__btn-with-icon--only){padding-right:1.875rem}.btn-group-vertical>.btn{margin-bottom:0}.btn-group-vertical>.btn:first-child{border-top-left-radius:.1875rem;border-top-right-radius:.1875rem}.btn-group-vertical>.btn:last-child{border-bottom-left-radius:.1875rem;border-bottom-right-radius:.1875rem}.btn-group-vertical>.btn-group>.btn{padding-left:3rem!important;padding-right:3rem!important}.btn-group-vertical>.btn-group:first-child>.btn{border-top-left-radius:.1875rem;border-top-right-radius:.1875rem}.btn-group-vertical>.btn-group:last-child>.btn{border-bottom-left-radius:.1875rem;border-bottom-right-radius:.1875rem}.scielo__floatingMenuCtt{position:fixed;bottom:30px;width:auto;height:auto;margin:0}.scielo__floatingMenuCtt .material-icons-outlined{vertical-align:baseline}.scielo__floatingMenuCtt>a{padding-top:6px}.scielo__floatingMenu{transition:all .5s;box-sizing:border-box;z-index:1001;padding-left:0;white-space:nowrap;list-style:none;opacity:1;bottom:auto;opacity:1;margin:0;display:inline-block}.scielo__floatingMenu .fm-wrap{padding:0;margin:0}@media (min-width:576px){.scielo__floatingMenu .fm-wrap{padding:25px 25px 25px 0;margin:-25px -25px -25px 0}}.scielo__floatingMenu .fm-button-child,.scielo__floatingMenu .fm-button-main{display:inline-block;position:relative;padding:0;color:#fff;cursor:pointer;outline:0;background-color:#3867ce;border:none;border-radius:50%;box-shadow:0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.28);-webkit-user-drag:none}.scielo__theme--dark .scielo__floatingMenu .fm-button-child,.scielo__theme--dark .scielo__floatingMenu .fm-button-main{background:#86acff;color:#333}.scielo__theme--light .scielo__floatingMenu .fm-button-child,.scielo__theme--light .scielo__floatingMenu .fm-button-main{background-color:#3867ce;color:#fff}.scielo__floatingMenu .fm-button-main{width:56px;height:56px;z-index:20;padding-top:17px;padding-left:16px}.scielo__floatingMenu .fm-button-main .glyphFloatMenu{position:absolute;width:53px;height:56px;font-size:32px;line-height:56px;text-align:center}.scielo__floatingMenu .fm-button-main .material-icons-outlined-menu-close,.scielo__floatingMenu .fm-button-main .sci-ico-floatingMenuClose{opacity:0}.scielo__floatingMenu .fm-button-child{width:40px;height:40px;line-height:40px;text-align:center;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-o-transition:all .3s ease-out,text-indent .3s ease-out;-ms-transition:all .3s ease-out,text-indent .3s ease-out;-moz-transition:all .3s ease-out,text-indent .3s ease-out;-webkit-transition:all .3s ease-out,text-indent .3s ease-out;transition:all .3s ease-out,text-indent .3s ease-out;margin-top:1px;padding-top:6px}.scielo__floatingMenu .fm-button-child .glyphFloatMenu{font-size:24px}.scielo__floatingMenu .fm-button-child:hover{background-color:#3058af}.scielo__theme--dark .scielo__floatingMenu .fm-button-child:hover{background-color:#b6cdff;color:#333}.scielo__theme--light .scielo__floatingMenu .fm-button-child:hover{background-color:#3058af;color:#fff}.scielo__floatingMenu .fm-list{position:absolute;bottom:42px;width:56px;min-height:56px;margin:0}@media (min-width:576px){.scielo__floatingMenu .fm-list{margin-left:8px}}.scielo__floatingMenu .fm-list li{box-sizing:border-box;position:absolute;top:30px;left:8px;display:block;padding:9px 0 2px 0;margin:0;width:50px;height:auto}@media (min-width:576px){.scielo__floatingMenu .fm-list li{top:41px;left:6px}}@media (max-width:575.98px){.scielo__floatingMenu .fm-list li a:after{content:attr(data-mobile-tooltip);color:#fff;background:#333;position:absolute;margin-left:16px;display:inline-block;width:auto;height:auto;text-align:left;padding:5px;line-height:100%;border-radius:4px;font-size:.75rem;margin-top:3px}.scielo__theme--dark .scielo__floatingMenu .fm-list li a:after{background:#fff;color:#333}.scielo__theme--light .scielo__floatingMenu .fm-list li a:after{background:#333;color:#fff}.scielo__floatingMenu .fm-list li a:before{content:'';border-right:4px solid #333;border-left:4px solid transparent;border-top:4px solid transparent;border-bottom:4px solid transparent;margin-left:13px;margin-top:10px;position:absolute;margin-left:32px}.scielo__theme--dark .scielo__floatingMenu .fm-list li a:before{border-right:4px solid #fff}.scielo__theme--light .scielo__floatingMenu .fm-list li a:before{border-right:4px solid #333}}.scielo__floatingMenu:hover .fm-button-main{background-color:#fff;padding-top:17px;padding-left:16px}.scielo__floatingMenu:hover .material-icons-outlined-menu-default,.scielo__floatingMenu:hover .sci-ico-floatingMenuDefault{opacity:0;display:none}.scielo__floatingMenu:hover .material-icons-outlined-menu-close,.scielo__floatingMenu:hover .sci-ico-floatingMenuClose{opacity:1;color:#3867ce}.scielo__floatingMenu.fm-slidein .fm-list li{display:block;opacity:0;transition:all .5s}.scielo__floatingMenu.fm-slidein[data-fm-toogle=hover]:hover .fm-list li{opacity:1}.scielo__floatingMenu.fm-slidein[data-fm-toogle=hover]:hover .fm-list li:nth-child(1){-webkit-transform:translateX(50px);transform:translateX(50px)}@media (max-width:575.98px){.scielo__floatingMenu.fm-slidein[data-fm-toogle=hover]:hover .fm-list li:nth-child(1){-webkit-transform:translateY(-50px);transform:translateY(-50px)}}.scielo__floatingMenu.fm-slidein[data-fm-toogle=hover]:hover .fm-list li:nth-child(2){-webkit-transform:translateX(100px);transform:translateX(100px)}@media (max-width:575.98px){.scielo__floatingMenu.fm-slidein[data-fm-toogle=hover]:hover .fm-list li:nth-child(2){-webkit-transform:translateY(-100px);transform:translateY(-100px)}}.scielo__floatingMenu.fm-slidein[data-fm-toogle=hover]:hover .fm-list li:nth-child(3){-webkit-transform:translateX(150px);transform:translateX(150px)}@media (max-width:575.98px){.scielo__floatingMenu.fm-slidein[data-fm-toogle=hover]:hover .fm-list li:nth-child(3){-webkit-transform:translateY(-150px);transform:translateY(-150px)}}.scielo__floatingMenu.fm-slidein[data-fm-toogle=hover]:hover .fm-list li:nth-child(4){-webkit-transform:translateX(200px);transform:translateX(200px)}@media (max-width:575.98px){.scielo__floatingMenu.fm-slidein[data-fm-toogle=hover]:hover .fm-list li:nth-child(4){-webkit-transform:translateY(-200px);transform:translateY(-200px)}}.scielo__floatingMenu.fm-slidein[data-fm-toogle=hover]:hover .fm-list li:nth-child(5){-webkit-transform:translateX(250px);transform:translateX(250px)}@media (max-width:575.98px){.scielo__floatingMenu.fm-slidein[data-fm-toogle=hover]:hover .fm-list li:nth-child(5){-webkit-transform:translateY(-250px);transform:translateY(-250px)}}.scielo__floatingMenu.fm-slidein[data-fm-toogle=hover]:hover .fm-list li:nth-child(6){-webkit-transform:translateX(300px);transform:translateX(300px)}@media (max-width:575.98px){.scielo__floatingMenu.fm-slidein[data-fm-toogle=hover]:hover .fm-list li:nth-child(6){-webkit-transform:translateY(-300px);transform:translateY(-300px)}}.scielo__floatingMenu.fm-slidein[data-fm-toogle=hover]:hover .fm-list li:nth-child(7){-webkit-transform:translateX(350px);transform:translateX(350px)}@media (max-width:575.98px){.scielo__floatingMenu.fm-slidein[data-fm-toogle=hover]:hover .fm-list li:nth-child(7){-webkit-transform:translateY(-350px);transform:translateY(-350px)}}.scielo__floatingMenuItem{opacity:1;color:#fff;background-color:#3867ce;border-radius:50%;display:inline-block;width:40px;height:40px;line-height:40px;text-align:center;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-o-transition:all .3s ease-out,text-indent .3s ease-out;-ms-transition:all .3s ease-out,text-indent .3s ease-out;-moz-transition:all .3s ease-out,text-indent .3s ease-out;-webkit-transition:all .3s ease-out,text-indent .3s ease-out;transition:all .3s ease-out,text-indent .3s ease-out;box-shadow:0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.28);margin-right:4px}.scielo__theme--dark .scielo__floatingMenuItem{background:#86acff;color:#333}.scielo__theme--light .scielo__floatingMenuItem{background:#3867ce;color:#fff}.scielo__floatingMenuItem .glyphFloatMenu{font-size:24px}.scielo__floatingMenuItem:hover{background-color:#3058af;color:#fff}.scielo__theme--dark .scielo__floatingMenuItem:hover{background-color:#b6cdff;color:#333}.scielo__theme--light .scielo__floatingMenuItem:hover{background-color:#3058af;color:#fff}.scielo__floatingMenuCttJs{position:fixed;bottom:30px;width:auto;height:auto;margin:0}.scielo__floatingMenuCttJs .material-icons-outlined{vertical-align:baseline}.scielo__floatingMenuCttJs>a{padding-top:6px}.scielo__floatingMenuJs{transition:all .5s;box-sizing:border-box;z-index:1001;padding-left:0;white-space:nowrap;list-style:none;opacity:1;bottom:auto;opacity:1;margin:0;display:inline-block}.scielo__floatingMenuJs .fm-wrap{padding:0;margin:0}@media (min-width:576px){.scielo__floatingMenuJs .fm-wrap{padding:25px 25px 25px 0;margin:-25px -25px -25px 0}}.scielo__floatingMenuJs .fm-button-child,.scielo__floatingMenuJs .fm-button-close,.scielo__floatingMenuJs .fm-button-main{display:inline-block;position:relative;padding:0;color:#fff;cursor:pointer;outline:0;background-color:#3867ce;border:none;border-radius:50%;box-shadow:0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.28);-webkit-user-drag:none}.scielo__theme--dark .scielo__floatingMenuJs .fm-button-child,.scielo__theme--dark .scielo__floatingMenuJs .fm-button-close,.scielo__theme--dark .scielo__floatingMenuJs .fm-button-main{background:#86acff;color:#333}.scielo__theme--light .scielo__floatingMenuJs .fm-button-child,.scielo__theme--light .scielo__floatingMenuJs .fm-button-close,.scielo__theme--light .scielo__floatingMenuJs .fm-button-main{background-color:#3867ce;color:#fff}.scielo__floatingMenuJs .fm-button-close,.scielo__floatingMenuJs .fm-button-main{width:56px;height:56px;z-index:20;padding-top:17px;padding-left:16px}.scielo__floatingMenuJs .fm-button-close .glyphFloatMenu,.scielo__floatingMenuJs .fm-button-main .glyphFloatMenu{position:absolute;width:53px;height:56px;font-size:32px;line-height:56px;text-align:center}.scielo__floatingMenuJs .fm-button-close{background:#fff;color:#3867ce}.scielo__floatingMenuJs .fm-button-child{width:40px;height:40px;line-height:40px;text-align:center;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-o-transition:all .3s ease-out,text-indent .3s ease-out;-ms-transition:all .3s ease-out,text-indent .3s ease-out;-moz-transition:all .3s ease-out,text-indent .3s ease-out;-webkit-transition:all .3s ease-out,text-indent .3s ease-out;transition:all .3s ease-out,text-indent .3s ease-out;margin-top:1px;padding-top:6px}.scielo__floatingMenuJs .fm-button-child .glyphFloatMenu{font-size:24px}.scielo__floatingMenuJs .fm-button-child:hover{background-color:#3058af}.scielo__theme--dark .scielo__floatingMenuJs .fm-button-child:hover{background-color:#b6cdff;color:#333}.scielo__theme--light .scielo__floatingMenuJs .fm-button-child:hover{background-color:#3058af;color:#fff}.scielo__floatingMenuJs .fm-list{position:absolute;bottom:42px;width:56px;min-height:56px;margin:0}@media (min-width:576px){.scielo__floatingMenuJs .fm-list{margin-left:8px}}.scielo__floatingMenuJs .fm-list li{box-sizing:border-box;position:absolute;top:30px;left:8px;padding:9px 0 2px 0;margin:0;width:50px;height:auto;list-style:none}@media (min-width:576px){.scielo__floatingMenuJs .fm-list li{top:41px;left:6px}}@media (max-width:575.98px){.scielo__floatingMenuJs .fm-list li a{display:none}.scielo__floatingMenuJs .fm-list li a:after{content:attr(data-mobile-tooltip);color:#fff;background:#333;position:absolute;margin-left:16px;display:inline-block;width:auto;height:auto;text-align:left;padding:5px;line-height:100%;border-radius:4px;font-size:.75rem;margin-top:3px}.scielo__theme--dark .scielo__floatingMenuJs .fm-list li a:after{background:#fff;color:#333}.scielo__theme--light .scielo__floatingMenuJs .fm-list li a:after{background:#333;color:#fff}.scielo__floatingMenuJs .fm-list li a:before{content:'';border-right:4px solid #333;border-left:4px solid transparent;border-top:4px solid transparent;border-bottom:4px solid transparent;margin-left:13px;margin-top:10px;position:absolute;margin-left:32px}.scielo__theme--dark .scielo__floatingMenuJs .fm-list li a:before{border-right:4px solid #fff}.scielo__theme--light .scielo__floatingMenuJs .fm-list li a:before{border-right:4px solid #333}}.scielo__floatingMenuCttJs2{position:fixed;bottom:30px;width:auto;height:auto;margin:0}.scielo__floatingMenuCttJs2 .material-icons-outlined{vertical-align:baseline}.scielo__floatingMenuCttJs2>a{padding-top:6px}.scielo__floatingMenuJs2{transition:all .5s;box-sizing:border-box;z-index:1001;padding-left:0;white-space:nowrap;list-style:none;opacity:1;bottom:auto;opacity:1;margin:0;display:inline-block}.scielo__floatingMenuJs2 .fm-wrap{padding:0;margin:0}@media (min-width:576px){.scielo__floatingMenuJs2 .fm-wrap{padding:25px 25px 25px 0;margin:-25px -25px -25px 0}}.scielo__floatingMenuJs2 .fm-button-child,.scielo__floatingMenuJs2 .fm-button-close,.scielo__floatingMenuJs2 .fm-button-main{display:inline-block;position:relative;padding:0;color:#fff;cursor:pointer;outline:0;background-color:#3867ce;border:none;border-radius:50%;box-shadow:0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.28);-webkit-user-drag:none}.scielo__theme--dark .scielo__floatingMenuJs2 .fm-button-child,.scielo__theme--dark .scielo__floatingMenuJs2 .fm-button-close,.scielo__theme--dark .scielo__floatingMenuJs2 .fm-button-main{background:#86acff;color:#333}.scielo__theme--light .scielo__floatingMenuJs2 .fm-button-child,.scielo__theme--light .scielo__floatingMenuJs2 .fm-button-close,.scielo__theme--light .scielo__floatingMenuJs2 .fm-button-main{background-color:#3867ce;color:#fff}.scielo__floatingMenuJs2 .fm-button-close,.scielo__floatingMenuJs2 .fm-button-main{width:56px;height:56px;z-index:20;padding-top:17px;padding-left:16px}.scielo__floatingMenuJs2 .fm-button-close .glyphFloatMenu,.scielo__floatingMenuJs2 .fm-button-main .glyphFloatMenu{position:absolute;width:53px;height:56px;font-size:32px;line-height:56px;text-align:center}.scielo__floatingMenuJs2 .fm-button-close{background:#fff;color:#3867ce;display:none;z-index:999}.scielo__floatingMenuJs2 .fm-button-child{width:40px;height:40px;line-height:40px;text-align:center;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-o-transition:all .3s ease-out,text-indent .3s ease-out;-ms-transition:all .3s ease-out,text-indent .3s ease-out;-moz-transition:all .3s ease-out,text-indent .3s ease-out;-webkit-transition:all .3s ease-out,text-indent .3s ease-out;transition:all .3s ease-out,text-indent .3s ease-out;margin-top:1px;padding-top:6px}.scielo__floatingMenuJs2 .fm-button-child .glyphFloatMenu{font-size:24px}.scielo__floatingMenuJs2 .fm-button-child:hover{background-color:#3058af}.scielo__theme--dark .scielo__floatingMenuJs2 .fm-button-child:hover{background-color:#b6cdff;color:#333}.scielo__theme--light .scielo__floatingMenuJs2 .fm-button-child:hover{background-color:#3058af;color:#fff}.scielo__floatingMenuJs2 .fm-list-desktop,.scielo__floatingMenuJs2 .fm-list-mobile{position:absolute;bottom:42px;width:56px;min-height:56px;margin:0}.scielo__floatingMenuJs2 .fm-list-desktop li,.scielo__floatingMenuJs2 .fm-list-mobile li{position:absolute;box-sizing:border-box;padding:9px 0 2px 0;margin:0;width:50px;height:auto;list-style:none}.scielo__floatingMenuJs2 .fm-list-desktop li a,.scielo__floatingMenuJs2 .fm-list-mobile li a{display:none}.fm-list-mobile{padding:8px;margin-bottom:7px!important;margin-left:2px!important}.fm-list-mobile li{top:39px;left:6px}.fm-list-mobile li a:after{content:attr(data-mobile-tooltip);color:#fff;background:#333;position:absolute;margin-left:16px;display:inline-block;width:auto;height:auto;text-align:left;padding:5px;line-height:100%;border-radius:4px;font-size:.75rem;margin-top:3px}.scielo__theme--dark .fm-list-mobile li a:after{background:#fff;color:#333}.scielo__theme--light .fm-list-mobile li a:after{background:#333;color:#fff}.fm-list-mobile li a:before{content:'';border-right:4px solid #333;border-left:4px solid transparent;border-top:4px solid transparent;border-bottom:4px solid transparent;margin-left:13px;margin-top:10px;position:absolute;margin-left:32px}.scielo__theme--dark .fm-list-mobile li a:before{border-right:4px solid #fff}.scielo__theme--light .fm-list-mobile li a:before{border-right:4px solid #333}.fm-list-desktop{margin-left:15px!important}.fm-list-desktop li{display:inline;top:38px;left:6px;position:absolute;box-sizing:border-box;padding:2px 2px!important;margin:0;width:40px!important;height:auto;list-style:none;margin-top:10px!important;outline:0 solid red;left:0!important}.fm-list-desktop li a::after{content:'';display:none}.fm-list-desktop li a::before{content:'';display:none}.scielo__floatingMenuCttJs3{position:fixed;bottom:30px;z-index:5!important;width:auto;height:auto;margin:0}.scielo__floatingMenuCttJs3 .material-icons-outlined{vertical-align:baseline}.scielo__floatingMenuCttJs3>a{padding-top:6px}.scielo__floatingMenuJs3{transition:all .5s;box-sizing:border-box;z-index:1001;padding-left:0;white-space:nowrap;list-style:none;opacity:1;bottom:auto;opacity:1;margin:0;display:inline-block}.scielo__floatingMenuJs3 .fm-wrap{padding:0;margin:0}@media (min-width:576px){.scielo__floatingMenuJs3 .fm-wrap{padding:25px 25px 25px 0;margin:-25px -25px -25px 0}}.scielo__floatingMenuJs3 .fm-button-child,.scielo__floatingMenuJs3 .fm-button-close,.scielo__floatingMenuJs3 .fm-button-main{display:inline-block;position:relative;padding:0;color:#fff;cursor:pointer;outline:0;background-color:#3867ce;border:none;border-radius:50%;box-shadow:0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.28);-webkit-user-drag:none}.scielo__theme--dark .scielo__floatingMenuJs3 .fm-button-child,.scielo__theme--dark .scielo__floatingMenuJs3 .fm-button-close,.scielo__theme--dark .scielo__floatingMenuJs3 .fm-button-main{background:#86acff;color:#333}.scielo__theme--light .scielo__floatingMenuJs3 .fm-button-child,.scielo__theme--light .scielo__floatingMenuJs3 .fm-button-close,.scielo__theme--light .scielo__floatingMenuJs3 .fm-button-main{background-color:#3867ce;color:#fff}.scielo__floatingMenuJs3 .fm-button-close,.scielo__floatingMenuJs3 .fm-button-main{width:56px;height:56px;z-index:20;padding-top:17px;padding-left:16px}.scielo__floatingMenuJs3 .fm-button-close .glyphFloatMenu,.scielo__floatingMenuJs3 .fm-button-main .glyphFloatMenu{position:absolute;width:53px;height:56px;font-size:32px;line-height:56px;text-align:center}.scielo__floatingMenuJs3 .fm-button-close{background:#fff;color:#3867ce;display:none;z-index:999}.scielo__floatingMenuJs3 .fm-button-child{width:40px;height:40px;line-height:40px;text-align:center;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;-moz-animation-duration:.3s;-ms-animation-duration:.3s;-o-animation-duration:.3s;animation-duration:.3s;-o-transition:all .3s ease-out,text-indent .3s ease-out;-ms-transition:all .3s ease-out,text-indent .3s ease-out;-moz-transition:all .3s ease-out,text-indent .3s ease-out;-webkit-transition:all .3s ease-out,text-indent .3s ease-out;transition:all .3s ease-out,text-indent .3s ease-out;margin-top:1px;padding-top:6px}.scielo__floatingMenuJs3 .fm-button-child .glyphFloatMenu{font-size:24px}.scielo__floatingMenuJs3 .fm-button-child:hover{background-color:#3058af}.scielo__theme--dark .scielo__floatingMenuJs3 .fm-button-child:hover{background-color:#b6cdff;color:#333}.scielo__theme--light .scielo__floatingMenuJs3 .fm-button-child:hover{background-color:#3058af;color:#fff}.scielo__floatingMenuJs3 .fm-list-desktop,.scielo__floatingMenuJs3 .fm-list-mobile{position:absolute;bottom:42px;width:56px;min-height:56px;margin:0}.scielo__floatingMenuJs3 .fm-list-desktop li,.scielo__floatingMenuJs3 .fm-list-mobile li{position:absolute;box-sizing:border-box;padding:9px 0 2px 0;margin:0;width:50px;height:auto;list-style:none}.scielo__floatingMenuJs3 .fm-list-desktop li a,.scielo__floatingMenuJs3 .fm-list-mobile li a{display:none}.fm-list-mobile{padding:8px;margin-bottom:7px!important;margin-left:2px!important}.fm-list-mobile li{top:39px;left:6px}.fm-list-mobile li a:after{content:attr(data-mobile-tooltip);color:#fff;background:#333;position:absolute;margin-left:16px;display:inline-block;width:auto;height:auto;text-align:left;padding:5px;line-height:100%;border-radius:4px;font-size:.75rem;margin-top:3px}.scielo__theme--dark .fm-list-mobile li a:after{background:#fff;color:#333}.scielo__theme--light .fm-list-mobile li a:after{background:#333;color:#fff}.fm-list-mobile li a:before{content:'';border-right:4px solid #333;border-left:4px solid transparent;border-top:4px solid transparent;border-bottom:4px solid transparent;margin-left:13px;margin-top:10px;position:absolute;margin-left:32px}.scielo__theme--dark .fm-list-mobile li a:before{border-right:4px solid #fff}.scielo__theme--light .fm-list-mobile li a:before{border-right:4px solid #333}.fm-list-desktop{margin-left:15px!important}.fm-list-desktop li{display:inline;top:38px;left:6px;position:absolute;box-sizing:border-box;padding:2px 2px!important;margin:0;width:40px!important;height:auto;list-style:none;margin-top:10px!important;outline:0 solid red;left:0!important}.fm-list-desktop li a::after{content:'';display:none}.fm-list-desktop li a::before{content:'';display:none}@media (hover:none){.scielo__floatingMenuItem{display:none!important}.fm-list-mobile{display:block!important}}/*! nouislider - 14.1.1 - 12/15/2019 */.noUi-target,.noUi-target *{-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;-ms-touch-action:none;touch-action:none;-ms-user-select:none;-moz-user-select:none;user-select:none;-moz-box-sizing:border-box;box-sizing:border-box}.noUi-target{position:relative}.noUi-base,.noUi-connects{width:100%;height:100%;position:relative;z-index:1}.noUi-connects{overflow:hidden;z-index:0}.noUi-connect,.noUi-origin{will-change:transform;position:absolute;z-index:1;top:0;right:0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;-webkit-transform-style:preserve-3d;transform-origin:0 0;transform-style:flat}.noUi-connect{height:100%;width:100%}.noUi-origin{height:10%;width:10%}.noUi-txt-dir-rtl.noUi-horizontal .noUi-origin{left:0;right:auto}.noUi-vertical .noUi-origin{width:0}.noUi-horizontal .noUi-origin{height:0}.noUi-handle{-webkit-backface-visibility:hidden;backface-visibility:hidden;position:absolute}.noUi-touch-area{height:100%;width:100%}.noUi-state-tap .noUi-connect,.noUi-state-tap .noUi-origin{-webkit-transition:transform .3s;transition:transform .3s}.noUi-state-drag *{cursor:inherit!important}.noUi-horizontal{height:18px}.noUi-horizontal .noUi-handle{width:34px;height:28px;right:-17px;top:-6px}.noUi-vertical{width:18px}.noUi-vertical .noUi-handle{width:28px;height:34px;right:-6px;top:-17px}.noUi-txt-dir-rtl.noUi-horizontal .noUi-handle{left:-17px;right:auto}.noUi-target{background:#fafafa;border-radius:4px;border:1px solid #d3d3d3;box-shadow:inset 0 1px 1px #f0f0f0,0 3px 6px -5px #bbb}.noUi-connects{border-radius:3px}.noUi-connect{background:#3fb8af}.noUi-draggable{cursor:ew-resize}.noUi-vertical .noUi-draggable{cursor:ns-resize}.noUi-handle{border:1px solid #d9d9d9;border-radius:3px;background:#fff;cursor:default;box-shadow:inset 0 0 1px #fff,inset 0 1px 7px #ebebeb,0 3px 6px -3px #bbb}.noUi-active{box-shadow:inset 0 0 1px #fff,inset 0 1px 7px #ddd,0 3px 6px -3px #bbb}.noUi-handle:after,.noUi-handle:before{content:"";display:block;position:absolute;height:14px;width:1px;background:#e8e7e6;left:14px;top:6px}.noUi-handle:after{left:17px}.noUi-vertical .noUi-handle:after,.noUi-vertical .noUi-handle:before{width:14px;height:1px;left:6px;top:14px}.noUi-vertical .noUi-handle:after{top:17px}[disabled] .noUi-connect{background:#b8b8b8}[disabled] .noUi-handle,[disabled].noUi-handle,[disabled].noUi-target{cursor:not-allowed}.noUi-pips,.noUi-pips *{-moz-box-sizing:border-box;box-sizing:border-box}.noUi-pips{position:absolute;color:#999}.noUi-value{position:absolute;white-space:nowrap;text-align:center}.noUi-value-sub{color:#ccc;font-size:10px}.noUi-marker{position:absolute;background:#ccc}.noUi-marker-sub{background:#aaa}.noUi-marker-large{background:#aaa}.noUi-pips-horizontal{padding:10px 0;height:80px;top:100%;left:0;width:100%}.noUi-value-horizontal{-webkit-transform:translate(-50%,50%);transform:translate(-50%,50%)}.noUi-rtl .noUi-value-horizontal{-webkit-transform:translate(50%,50%);transform:translate(50%,50%)}.noUi-marker-horizontal.noUi-marker{margin-left:-1px;width:2px;height:5px}.noUi-marker-horizontal.noUi-marker-sub{height:10px}.noUi-marker-horizontal.noUi-marker-large{height:15px}.noUi-pips-vertical{padding:0 10px;height:100%;top:0;left:100%}.noUi-value-vertical{-webkit-transform:translate(0,-50%);transform:translate(0,-50%);padding-left:25px}.noUi-rtl .noUi-value-vertical{-webkit-transform:translate(0,50%);transform:translate(0,50%)}.noUi-marker-vertical.noUi-marker{width:5px;height:2px;margin-top:-1px}.noUi-marker-vertical.noUi-marker-sub{width:10px}.noUi-marker-vertical.noUi-marker-large{width:15px}.noUi-tooltip{display:block;position:absolute;border:1px solid #d9d9d9;border-radius:3px;background:#fff;color:#000;padding:5px;text-align:center;white-space:nowrap}.noUi-horizontal .noUi-tooltip{-webkit-transform:translate(-50%,0);transform:translate(-50%,0);left:50%;bottom:120%}.noUi-vertical .noUi-tooltip{-webkit-transform:translate(0,-50%);transform:translate(0,-50%);top:50%;right:120%}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(56,103,206,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(56,103,206,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none;background-color:#3867ce}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{transition:none}}.scielo__theme--dark .form-range::-webkit-slider-thumb{background-color:#86acff}.scielo__theme--light .form-range::-webkit-slider-thumb{background-color:#3867ce}.form-range::-webkit-slider-thumb:active{background-color:#3867ce}.scielo__theme--dark .form-range::-webkit-slider-thumb:active{background-color:#86acff}.scielo__theme--light .form-range::-webkit-slider-thumb:active{background-color:#3867ce}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;border-color:transparent;border-radius:1rem;background-color:#ccc}.scielo__theme--dark .form-range::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.3)}.scielo__theme--light .form-range::-webkit-slider-runnable-track{background-color:#ccc}.form-range::-moz-range-thumb{width:1rem;height:1rem;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none;background-color:#3867ce}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{transition:none}}.scielo__theme--dark .form-range::-moz-range-thumb{background-color:#86acff}.scielo__theme--light .form-range::-moz-range-thumb{background-color:#3867ce}.form-range::-moz-range-thumb:active{background-color:#3867ce}.scielo__theme--dark .form-range::-moz-range-thumb:active{background-color:#86acff}.scielo__theme--light .form-range::-moz-range-thumb:active{background-color:#3867ce}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:rgba(0,0,0,.3);border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#ccc}.scielo__theme--dark .form-range:disabled::-webkit-slider-thumb{background-color:#717171}.scielo__theme--light .form-range:disabled::-webkit-slider-thumb{background-color:#ccc}.form-range:disabled::-moz-range-thumb{background-color:#ccc}.scielo__theme--dark .form-range:disabled::-moz-range-thumb{background-color:#717171}.scielo__theme--light .form-range:disabled::-moz-range-thumb{background-color:#ccc}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:rgba(0,0,0,.7);text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;text-decoration:none;background-color:#f7f6f4}.scielo__theme--dark .list-group-item-action:focus,.scielo__theme--dark .list-group-item-action:hover{background-color:#414141}.scielo__theme--light .list-group-item-action:focus,.scielo__theme--light .list-group-item-action:hover{background-color:#f7f6f4}.list-group-item-action:active{color:#393939;background-color:#efeeec}.list-group-item{position:relative;display:block;padding:.5rem 1rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:rgba(0,0,0,.6);pointer-events:none;background-color:#fff}.list-group-item:hover{background-color:#f7f6f4;text-decoration:none}.scielo__theme--dark .list-group-item:hover{background-color:#414141}.scielo__theme--light .list-group-item:hover{background-color:#f7f6f4}.list-group-item.active{z-index:2;color:#fff;background-color:#3867ce;border-color:#3867ce}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#223e7c;background-color:#d7e1f5}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#223e7c;background-color:#c2cbdd}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#223e7c;border-color:#223e7c}.list-group-item-secondary{color:#666;background-color:#fff}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#666;background-color:#e6e6e6}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#666;border-color:#666}.list-group-item-success{color:#1a5e29;background-color:#d5ebda}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#1a5e29;background-color:#c0d4c4}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#1a5e29;border-color:#1a5e29}.list-group-item-info{color:#145965;background-color:#d3eaee}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#145965;background-color:#bed3d6}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#145965;border-color:#145965}.list-group-item-warning{color:#6d4c00;background-color:#f0e5cc}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#6d4c00;background-color:#d8ceb8}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#6d4c00;border-color:#6d4c00}.list-group-item-danger{color:#720;background-color:#f4d7cc}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#720;background-color:#dcc2b8}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#720;border-color:#720}.list-group-item-light{color:#636262;background-color:#fdfdfd}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636262;background-color:#e4e4e4}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636262;border-color:#636262}.list-group-item-dark{color:#222;background-color:#d7d7d7}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#222;background-color:#c2c2c2}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#222;border-color:#222}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;background-clip:padding-box;border:1px solid rgba(0,0,0,.4);appearance:none;background-color:#fff;color:#393939;border-color:#ccc;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.scielo__theme--light .form-control{background-color:#fff;color:#333;border-color:#ccc}.scielo__theme--dark .form-control{background-color:#333;color:#c4c4c4;border-color:rgba(255,255,255,.3)}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{outline:0;background-color:#fff;color:#393939;border-color:rgba(56,103,206,.6);box-shadow:0 0 0 .25rem rgba(56,103,206,.25)}.scielo__theme--light .form-control:focus{background-color:#fff;color:#333;border-color:rgba(56,103,206,.6)}.scielo__theme--dark .form-control:focus{background-color:#333;color:#c4c4c4;border-color:rgba(134,172,255,.6)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::placeholder{color:rgba(0,0,0,.6);opacity:1}.scielo__theme--dark .form-control::placeholder{color:#adadad}.scielo__theme--light .form-control::placeholder{color:#6c6b6b}.form-control:disabled,.form-control[readonly]{opacity:1;pointer-events:auto;cursor:not-allowed;background-color:#efeeec;border-color:rgba(0,0,0,.396);color:rgba(0,0,0,.396)}.scielo__theme--dark .form-control:disabled,.scielo__theme--dark .form-control[readonly]{background-color:#414141;border-color:rgba(255,255,255,.2);color:rgba(255,255,255,.2)}.scielo__theme--light .form-control:disabled,.scielo__theme--light .form-control[readonly]{background-color:#efeeec;border-color:rgba(0,0,0,.396);color:rgba(0,0,0,.396)}.form-control:disabled::placeholder,.form-control[readonly]::placeholder{color:rgba(0,0,0,.396)}.scielo__theme--dark .form-control:disabled::placeholder,.scielo__theme--dark .form-control[readonly]::placeholder{color:rgba(255,255,255,.2)}.scielo__theme--light .form-control:disabled::placeholder,.scielo__theme--light .form-control[readonly]::placeholder{color:rgba(0,0,0,.396)}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:#393939;background-color:#efeeec;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;height:48px;background-color:#efeeec;color:#333;border-color:#ccc}@media (prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.scielo__theme--light .form-control::file-selector-button{background-color:#efeeec;color:#333;border-color:#ccc}.scielo__theme--dark .form-control::file-selector-button{background-color:#414141;color:#c4c4c4;border-color:rgba(255,255,255,.3)}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#e3e2e0}.scielo__theme--dark .form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#3b3b3b}.scielo__theme--light .form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#e3e2e0}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:#393939;background-color:#efeeec;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:all .8s}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#d9d9d9}.scielo__theme--dark .form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dcdcdc;color:#333}.scielo__theme--light .form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#d9d9d9;color:#333}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0;color:#6c6b6b;outline:0}.scielo__theme--dark .form-control-plaintext{color:#adadad}.scielo__theme--light .form-control-plaintext{color:#6c6b6b}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.12 .5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:5rem;height:5rem}.scielo__search-articles textarea.form-control{min-height:calc(1.5em + .75rem + 2px);height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{max-width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 1rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid rgba(0,0,0,.4);border-radius:.25rem;appearance:none;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='%23414141' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-color:#fff;color:#393939;border-color:#ccc}.scielo__theme--light .form-select{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='%23414141' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-color:#fff;color:#333;border-color:#ccc}.scielo__theme--dark .form-select{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='%23C4C4C4' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-color:#333;color:#c4c4c4;border-color:rgba(255,255,255,.3)}.form-select:focus{outline:0;box-shadow:0 0 0 .25rem rgba(56,103,206,.25);border-color:rgba(56,103,206,.6)}.scielo__theme--dark .form-select:focus{border-color:rgba(134,172,255,.6)}.scielo__theme--light .form-select:focus{border-color:rgba(56,103,206,.6)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{pointer-events:auto;cursor:not-allowed;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='rgba%280, 0, 0, 0.396%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-color:#efeeec;border-color:rgba(0,0,0,.396);color:rgba(0,0,0,.396)}.scielo__theme--dark .form-select:disabled{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='rgba%28255, 255, 255, 0.2%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-color:#414141;border-color:rgba(255,255,255,.2);color:rgba(255,255,255,.2)}.scielo__theme--light .form-select:disabled{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='rgba%280, 0, 0, 0.396%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-color:#efeeec;border-color:rgba(0,0,0,.396);color:rgba(0,0,0,.396)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #393939}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-repeat:no-repeat;background-position:center;background-size:contain;appearance:none;color-adjust:exact;transition:background-color .15s ease-in-out,background-position .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;border-color:#ccc;background-color:#fff}@media (prefers-reduced-motion:reduce){.form-check-input{transition:none}}.scielo__theme--dark .form-check-input{border-color:rgba(255,255,255,.3);background-color:#333}.scielo__theme--light .form-check-input{border-color:#ccc;background-color:#fff}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{outline:0;box-shadow:0 0 0 .25rem rgba(56,103,206,.25);border-color:#ccc}.scielo__theme--dark .form-check-input:focus{border-color:rgba(255,255,255,.3)}.scielo__theme--light .form-check-input:focus{border-color:#ccc}.form-check-input:checked{background-color:#3867ce;border-color:#3867ce}.scielo__theme--dark .form-check-input:checked{background-color:#86acff;border-color:#86acff}.scielo__theme--light .form-check-input:checked{background-color:#3867ce;border-color:#3867ce}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.scielo__theme--dark .form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.scielo__theme--light .form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.scielo__theme--dark .form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23333'/%3e%3c/svg%3e")}.scielo__theme--light .form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#3867ce;border-color:#3867ce;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.scielo__theme--dark .form-check-input[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.scielo__theme--light .form-check-input[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23ccc'/%3e%3c/svg%3e");background-color:#fff;border-color:#ccc}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.scielo__theme--dark .form-switch .form-check-input{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.3%29'/%3e%3c/svg%3e");background-color:#333;border-color:rgba(255,255,255,.3)}.scielo__theme--light .form-switch .form-check-input{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23ccc'/%3e%3c/svg%3e");background-color:#fff;border-color:#ccc}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23ccc'/%3e%3c/svg%3e")}.scielo__theme--dark .form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.3%29'/%3e%3c/svg%3e")}.scielo__theme--light .form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23ccc'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-color:#3867ce;border-color:#3867ce;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.scielo__theme--dark .form-switch .form-check-input:checked{background-color:#86acff;border-color:#86acff}.scielo__theme--light .form-switch .form-check-input:checked{background-color:#3867ce;border-color:#3867ce}.scielo__theme--dark .form-switch .form-check-input:checked{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23333'/%3e%3c/svg%3e")}.scielo__theme--light .form-switch .form-check-input:checked{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.scielo__form-file{position:relative;height:3rem;overflow:hidden}.scielo__form-file input{-webkit-appearance:none;appearance:none;position:absolute;transform:translateY(-500%);top:0;width:auto}.scielo__form-file:after{content:b3__ico--char(attach_file);position:absolute;top:50%;right:.75rem;transform:translateY(-50%);font-family:b3-icons;color:#fff;font-size:1.5rem;pointer-events:none}.scielo__theme--light .scielo__form-file:after{color:#fff}.scielo__theme--dark .scielo__form-file:after{color:#eee}.scielo__form-file label{height:3rem;left:0;width:100%;top:0;transform:translateY(0);padding:0 3rem 0 .75rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;border-bottom:1px solid rgba(56,103,206,.25);line-height:3rem;pointer-events:all}.scielo__form-file.has-placeholder:not(.small)>label,.scielo__form-file.has-value:not(.small)>label,.scielo__form-file.is-focused:not(.small)>label{font-weight:400;font-size:1rem;line-height:1.2em;line-height:3rem;top:0;color:#333}.scielo__theme--dark .scielo__form-file.has-placeholder:not(.small)>label,.scielo__theme--dark .scielo__form-file.has-value:not(.small)>label,.scielo__theme--dark .scielo__form-file.is-focused:not(.small)>label{color:#c4c4c4}.scielo__theme--light .scielo__form-file.has-placeholder:not(.small)>label,.scielo__theme--light .scielo__form-file.has-value:not(.small)>label,.scielo__theme--light .scielo__form-file.is-focused:not(.small)>label{color:#333}.input-group{border-radius:3px;flex-flow:row nowrap;height:3rem}.input-group.is-search{border-radius:3rem}.input-group-text{border-radius:3px;font-weight:400;font-size:1rem;line-height:1.2em;padding-top:0;padding-bottom:0;color:#333;background-color:#efeeec;border-color:#ccc;color:#333}.scielo__theme--dark .input-group-text{color:#c4c4c4}.scielo__theme--light .input-group-text{color:#333}.scielo__theme--dark .input-group-text{background-color:#414141;border-color:rgba(255,255,255,.3);color:#c4c4c4}.scielo__theme--light .input-group-text{background-color:#efeeec;border-color:#ccc;color:#333}.input-group-text span[class^=b3__ico--]{font-size:1.5rem}.input-group-text .scielo__form-checkbox~label,.input-group-text .scielo__form-radio~label{margin-left:0;margin-right:0}.input-group .scielo__form-control input,.input-group .scielo__form-control label,.input-group .scielo__form-control select,.input-group .scielo__form-control textarea,.input-group .scielo__form-file input,.input-group .scielo__form-file label,.input-group .scielo__form-file select,.input-group .scielo__form-file textarea,.input-group .scielo__form-select input,.input-group .scielo__form-select label,.input-group .scielo__form-select select,.input-group .scielo__form-select textarea{border-bottom:none}.input-group .scielo__form-control:first-child,.input-group .scielo__form-file:first-child,.input-group .scielo__form-select:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.input-group .scielo__form-control:last-child,.input-group .scielo__form-file:last-child,.input-group .scielo__form-select:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.input-group .scielo__form-control,.input-group .scielo__form-file,.input-group .scielo__form-select{flex:1 1 auto}.input-group .btn{margin-bottom:0;padding:.75rem 1.2rem;border-radius:.25rem;line-height:1.5rem;height:3rem;padding-left:1.5rem;padding-right:1.5rem}.input-group .btn.dropdown-toggle:not(.dropdown-toggle-split){padding-right:2.5rem}.input-group .btn.dropdown-toggle:after{right:.9375rem;width:1.25rem;height:1.25rem;font-size:1.25rem;line-height:1.25rem}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.12 .5rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:1.75rem}.picker{font-size:16px;text-align:left;line-height:1.2;color:#000;position:absolute;z-index:10000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:0}.picker__input{cursor:default}.picker__input.picker__input--active{border-color:#0089ec}.picker__holder{width:100%;overflow-y:auto;-webkit-overflow-scrolling:touch}/*! + * Default mobile-first, responsive styling for pickadate.js + * Demo: http://amsul.github.io/pickadate.js + */.picker__frame,.picker__holder{top:0;bottom:0;left:0;right:0;-ms-transform:translateY(100%);transform:translateY(100%)}.picker__holder{position:fixed;transition:background .15s ease-out,transform 0s .15s;-webkit-backface-visibility:hidden}.picker__frame{position:absolute;margin:0 auto;min-width:256px;max-width:666px;width:100%;-moz-opacity:0;opacity:0;transition:all .15s ease-out}@media (min-height:33.875em){.picker__frame{overflow:visible;top:auto;bottom:-100%;max-height:80%}}@media (min-height:40.125em){.picker__frame{margin-bottom:7.5%}}.picker__wrap{display:table;width:100%;height:100%}@media (min-height:33.875em){.picker__wrap{display:block}}.picker__box{background:#fff;display:table-cell;vertical-align:middle}@media (min-height:26.5em){.picker__box{font-size:1.25em}}@media (min-height:33.875em){.picker__box{display:block;font-size:1.33em;border:1px solid #777;border-top-color:#898989;border-bottom-width:0;border-radius:5px 5px 0 0;box-shadow:0 12px 36px 16px rgba(0,0,0,.24)}}@media (min-height:40.125em){.picker__box{font-size:1.5em;border-bottom-width:1px;border-radius:5px}}.picker--opened .picker__holder{-ms-transform:translateY(0);transform:translateY(0);background:0 0;zoom:1;background:rgba(0,0,0,.32);transition:background .15s ease-out}.picker--opened .picker__frame{-ms-transform:translateY(0);transform:translateY(0);-moz-opacity:1;opacity:1}@media (min-height:33.875em){.picker--opened .picker__frame{top:auto;bottom:0}}.picker__box{padding:0 1em}.picker__header{text-align:center;position:relative;margin-top:.75em}.picker__month,.picker__year{font-weight:500;display:inline-block;margin-left:.25em;margin-right:.25em}.picker__year{color:#999;font-size:.8em;font-style:italic}.picker__select--month,.picker__select--year{border:1px solid #b7b7b7;height:2em;padding:.5em;margin-left:.25em;margin-right:.25em}@media (min-width:24.5em){.picker__select--month,.picker__select--year{margin-top:-.5em}}.picker__select--month{width:35%}.picker__select--year{width:22.5%}.picker__select--month:focus,.picker__select--year:focus{border-color:#0089ec}.picker__nav--next,.picker__nav--prev{position:absolute;padding:.5em 1.25em;width:1em;height:1em;box-sizing:content-box;top:-.25em}@media (min-width:24.5em){.picker__nav--next,.picker__nav--prev{top:-.33em}}.picker__nav--prev{left:-1em;padding-right:1.25em}@media (min-width:24.5em){.picker__nav--prev{padding-right:1.5em}}.picker__nav--next{right:-1em;padding-left:1.25em}@media (min-width:24.5em){.picker__nav--next{padding-left:1.5em}}.picker__nav--next:before,.picker__nav--prev:before{content:" ";border-top:.5em solid transparent;border-bottom:.5em solid transparent;border-right:.75em solid #000;width:0;height:0;display:block;margin:0 auto}.picker__nav--next:before{border-right:0;border-left:.75em solid #000}.picker__nav--next:hover,.picker__nav--prev:hover{cursor:pointer;color:#000;background:#b1dcfb}.picker__nav--disabled,.picker__nav--disabled:before,.picker__nav--disabled:before:hover,.picker__nav--disabled:hover{cursor:default;background:0 0;border-right-color:#f5f5f5;border-left-color:#f5f5f5}.picker__table{text-align:center;border-collapse:collapse;border-spacing:0;table-layout:fixed;font-size:inherit;width:100%;margin-top:.75em;margin-bottom:.5em}@media (min-height:33.875em){.picker__table{margin-bottom:.75em}}.picker__table td{margin:0;padding:0}.picker__weekday{width:14.285714286%;font-size:.75em;padding-bottom:.25em;color:#999;font-weight:500}@media (min-height:33.875em){.picker__weekday{padding-bottom:.5em}}.picker__day{padding:.3125em 0;font-weight:200;border:1px solid transparent}.picker__day--today{position:relative}.picker__day--today:before{content:" ";position:absolute;top:2px;right:2px;width:0;height:0;border-top:.5em solid #0059bc;border-left:.5em solid transparent}.picker__day--disabled:before{border-top-color:#aaa}.picker__day--outfocus{color:#ddd}.picker__day--infocus:hover,.picker__day--outfocus:hover{cursor:pointer;color:#000;background:#b1dcfb}.picker__day--highlighted{border-color:#0089ec}.picker--focused .picker__day--highlighted,.picker__day--highlighted:hover{cursor:pointer;color:#000;background:#b1dcfb}.picker--focused .picker__day--selected,.picker__day--selected,.picker__day--selected:hover{background:#0089ec;color:#fff}.picker--focused .picker__day--disabled,.picker__day--disabled,.picker__day--disabled:hover{background:#f5f5f5;border-color:#f5f5f5;color:#ddd;cursor:default}.picker__day--highlighted.picker__day--disabled,.picker__day--highlighted.picker__day--disabled:hover{background:#bbb}.picker__footer{text-align:center}.picker__button--clear,.picker__button--close,.picker__button--today{border:1px solid #fff;background:#fff;font-size:.8em;padding:.66em 0;font-weight:700;width:33%;display:inline-block;vertical-align:bottom}.picker__button--clear:hover,.picker__button--close:hover,.picker__button--today:hover{cursor:pointer;color:#000;background:#b1dcfb;border-bottom-color:#b1dcfb}.picker__button--clear:focus,.picker__button--close:focus,.picker__button--today:focus{background:#b1dcfb;border-color:#0089ec;outline:0}.picker__button--clear:before,.picker__button--close:before,.picker__button--today:before{position:relative;display:inline-block;height:0}.picker__button--clear:before,.picker__button--today:before{content:" ";margin-right:.45em}.picker__button--today:before{top:-.05em;width:0;border-top:.66em solid #0059bc;border-left:.66em solid transparent}.picker__button--clear:before{top:-.25em;width:.66em;border-top:3px solid #e20}.picker__button--close:before{content:"\D7";top:-.1em;vertical-align:top;font-size:1.1em;margin-right:.35em;color:#777}.picker__button--today[disabled],.picker__button--today[disabled]:hover{background:#f5f5f5;border-color:#f5f5f5;color:#ddd;cursor:default}.picker__button--today[disabled]:before{border-top-color:#aaa}.picker--opened .picker__holder{background:rgba(0,0,0,.8)}.picker__box{padding:.625rem 1.0625rem;border:0;box-shadow:none;border-radius:6px}.picker__nav--next,.picker__nav--prev{color:#fff}.picker__nav--next:before,.picker__nav--prev:before{font-family:b3-icons;position:absolute;border:0;font-size:1.5rem}.picker__nav--next:hover,.picker__nav--prev:hover{background:0 0}.picker__nav--next:hover:before,.picker__nav--prev:hover:before{color:rgba(56,103,206,.25)}.picker__nav--prev:before{content:b3__ico--char(keyboard_arrow_left)}.picker__nav--next:before{content:b3__ico--char(keyboard_arrow_right)}.picker__weekday{width:auto;color:#333;font-weight:400;font-size:1rem;line-height:1.2em}.picker__header{margin-top:0;padding-top:.3125rem}.picker__header,.picker__year{font-size:1.03125rem;letter-spacing:0}.picker__year{color:#333;font-style:normal}.picker__day,.picker__day--infocus,.picker__day--outfocus,.picker__day--today{padding:0;margin:0 auto;border-radius:99px;width:1.875rem;height:1.875rem;text-align:center;line-height:1.75rem;font-size:.84375rem;color:#3867ce;font-weight:400;background:0 0;border:2px solid transparent}.picker__day--today:before{display:none}.picker__day--infocus:hover,.picker__day--outfocus:hover{color:#3867ce;background:rgba(0,176,230,.08);border-color:rgba(0,176,230,0)}.picker__day--outfocus{color:rgba(0,0,0,.396)}.picker--focused .picker__day--highlighted,.picker__day--highlighted:hover{color:#333;border-color:rgba(56,103,206,.25);background:0 0}.picker__button--clear,.picker__button--close,.picker__button--today{padding:0;text-transform:uppercase;border:0;font-weight:400!important;font-size:1rem;letter-spacing:.1px!important;white-space:nowrap}.picker__button--clear:before,.picker__button--close:before,.picker__button--today:before{display:none}.picker__button--clear:hover,.picker__button--close:hover,.picker__button--today:hover{background:0 0;border:none;font-weight:400!important;font-size:1rem;letter-spacing:.1px!important;white-space:nowrap}.picker__button--clear{color:#00314c}.picker__button--clear:hover{color:#333}.picker__button--close{color:#c63800}.picker__button--close:hover{color:#ff7e4a}.picker__button--today{color:#3867ce}.picker__button--today:hover{color:rgba(56,103,206,.25)}.scielo__menu{position:relative;display:inline-block;width:40px;height:20px;margin:5px 0;margin-left:8px;z-index:100;outline:0;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;-moz-animation-duration:.2s;-ms-animation-duration:.2s;-o-animation-duration:.2s;animation-duration:.2s;-o-transition:all .2s ease-out,text-indent .2s ease-out;-ms-transition:all .2s ease-out,text-indent .2s ease-out;-moz-transition:all .2s ease-out,text-indent .2s ease-out;-webkit-transition:all .2s ease-out,text-indent .2s ease-out;transition:all .2s ease-out,text-indent .2s ease-out}.scielo__menu:active,.scielo__menu:focus{outline:0}.scielo__menu .material-icons-outlined{color:#333}.scielo__theme--dark .scielo__menu .material-icons-outlined{color:#c4c4c4}.scielo__theme--light .scielo__menu .material-icons-outlined{color:#333}.scielo__menu.opened{margin-left:270px}.scielo__mainMenu{position:absolute;top:-1000px;z-index:99;width:300px;background:#fff;border:1px solid #ccc;border-top:0;border-radius:4px;border-top-left-radius:0;border-top-right-radius:0;padding:35px 20px 0 20px;padding:0;box-shadow:0 0 7px rgba(0,0,0,.1);font-size:.85em}.scielo__theme--dark .scielo__mainMenu{background:#333;border-color:rgba(255,255,255,.3)}.scielo__theme--light .scielo__mainMenu{background:#fff;border-color:#ccc}.scielo__mainMenu .logo-svg{background:url(../img/logo-scielo-no-label.svg);background-position:center center;background-repeat:no-repeat;display:block;width:100px;height:100px}.scielo__theme--dark .scielo__mainMenu .logo-svg{background-image:url(../img/logo-scielo-no-label-negative.svg)}.scielo__theme--light .scielo__mainMenu .logo-svg{background-image:url(../img/logo-scielo-no-label.svg)}.scielo__mainMenu ul{margin:0;padding:0}.scielo__mainMenu li{list-style:none;border-bottom:1px dotted #6c6b6b;padding-bottom:7px}.scielo__theme--dark .scielo__mainMenu li{border-color:rgba(255,255,255,.3)}.scielo__theme--light .scielo__mainMenu li{border-color:#ccc}.scielo__mainMenu li:last-child{border-bottom:0}.scielo__mainMenu li a,.scielo__mainMenu li strong{display:block;color:#00314c;text-decoration:none}.scielo__theme--dark .scielo__mainMenu li a,.scielo__theme--dark .scielo__mainMenu li strong{color:#eee}.scielo__theme--light .scielo__mainMenu li a,.scielo__theme--light .scielo__mainMenu li strong{color:#00314c}.scielo__mainMenu li a:hover,.scielo__mainMenu li strong:hover{color:#3867ce}.scielo__theme--dark .scielo__mainMenu li a:hover,.scielo__theme--dark .scielo__mainMenu li strong:hover{color:#86acff}.scielo__theme--light .scielo__mainMenu li a:hover,.scielo__theme--light .scielo__mainMenu li strong:hover{color:#3867ce}.scielo__mainMenu li a{padding:.4rem 1rem}.scielo__mainMenu li a:hover{background-color:#f7f6f4}.scielo__mainMenu li li{background:0 0;padding-bottom:0;border-bottom:0}.scielo-ico-menu{display:inline-block}.scielo-ico-menu-opened{display:none}.scielo__accessibleMenu{position:absolute;z-index:9;top:20px}.scielo__accessibleMenu summary{cursor:pointer;font-size:1.2rem;background:#fff;color:#333;padding:2px 4px;border-radius:5px;display:flex;align-items:center;gap:10px;width:110px;min-height:32px;justify-content:center;transition:background .3s ease-in-out;border:1px solid #ccc}@media (max-width:767.98px){.scielo__accessibleMenu summary{width:70px}.scielo__accessibleMenu summary span:not(.menu-icon){display:none}}.scielo__accessibleMenu summary span{font-size:1rem}.scielo__accessibleMenu summary .menu-icon{display:inline-block;width:16px;height:2px;background:#333;position:relative;transition:transform .3s ease-in-out}.scielo__accessibleMenu summary .menu-icon::after,.scielo__accessibleMenu summary .menu-icon::before{content:"";width:16px;height:2px;background:#333;position:absolute;left:0;transition:transform .3s ease-in-out}.scielo__accessibleMenu summary .menu-icon::before{top:-6px}.scielo__accessibleMenu summary .menu-icon::after{top:6px}@media (max-width:767.98px){.scielo__accessibleMenu[open]{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:1000;overflow:hidden}.scielo__accessibleMenu[open] summary{position:fixed;top:0;left:0;width:100%;border-radius:0;padding:12px 0}}@media (max-width:767.98px) and (max-width:767.98px){.scielo__accessibleMenu[open] summary span:not(.menu-icon){display:inline-block}}@media (max-width:767.98px){.scielo__accessibleMenu[open] nav{position:absolute;top:47px;left:0;width:100%;height:calc(100vh - 47px);overflow-y:auto;padding:1rem;border-radius:0}}.scielo__accessibleMenu[open] summary{background-color:#f7f6f4}.scielo__accessibleMenu[open] .menu-icon{background:0 0}.scielo__accessibleMenu[open] .menu-icon::before{transform:rotate(45deg);top:0}.scielo__accessibleMenu[open] .menu-icon::after{transform:rotate(-45deg);top:0}.scielo__accessibleMenu[open] nav{opacity:1;max-height:750px}.scielo__accessibleMenu nav{background:#fff;padding:.5rem 0;margin-top:2px;width:280px;border-radius:5px;border:1px solid #ccc;opacity:0;max-height:0;overflow:hidden;transition:opacity .3s ease-in-out,max-height .3s ease-in-out;box-shadow:0 0 7px rgba(0,0,0,.1)}.scielo__accessibleMenu nav ul{list-style:none;padding:0;margin:0}.scielo__accessibleMenu nav ul li{margin:5px 0}.scielo__accessibleMenu nav ul li.logo{text-align:center;padding-top:1rem}.scielo__accessibleMenu nav ul li a{text-decoration:none;padding:.25rem 1rem;display:block;color:#00314c}.scielo__accessibleMenu nav ul li a:focus-visible,.scielo__accessibleMenu nav ul li a:hover{background-color:#f7f6f4;color:#3867ce}.scielo__accessibleMenu nav ul li a:focus-visible strong,.scielo__accessibleMenu nav ul li a:hover strong{color:#3867ce}.scielo__accessibleMenu nav ul li a strong{color:#00314c}ul.scielo__menu-contexto,ul.scielo__menu-contexto ul{list-style:none}ul.scielo__menu-contexto ul{margin-bottom:1rem}ul.scielo__menu-contexto .nav-link{padding:0;color:#6c6b6b}.sticky-top{top:80px}.bd-example .h4,.bd-example .h5,.bd-example h4,.bd-example h5{margin-top:3rem;scroll-margin-top:5.625rem}.bd-example hr{margin-top:3rem}.bd-example ul{margin-bottom:3rem}.scielo__menu-responsivo{position:relative;display:inline-block;width:40px;height:20px;margin:5px 0;margin-left:8px;z-index:100;outline:0;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;-moz-animation-duration:.2s;-ms-animation-duration:.2s;-o-animation-duration:.2s;animation-duration:.2s;-o-transition:all .2s ease-out,text-indent .2s ease-out;-ms-transition:all .2s ease-out,text-indent .2s ease-out;-moz-transition:all .2s ease-out,text-indent .2s ease-out;-webkit-transition:all .2s ease-out,text-indent .2s ease-out;transition:all .2s ease-out,text-indent .2s ease-out}.scielo__menu-responsivo:active,.scielo__menu-responsivo:focus{outline:0}.scielo__menu-responsivo .material-icons-outlined{color:#333}.scielo__theme--dark .scielo__menu-responsivo .material-icons-outlined{color:#c4c4c4}.scielo__theme--light .scielo__menu-responsivo .material-icons-outlined{color:#333}.scielo__menu-responsivo.opened{margin-left:270px}.scielo__mainMenu-responsivo,.touch-side-swipe{position:absolute;top:-1000px;z-index:99;width:300px;background:#fff;border:1px solid #ccc;border-top:0;border-radius:4px;border-top-left-radius:0;border-top-right-radius:0;padding:2rem 20px 0 20px;box-shadow:0 0 7px rgba(0,0,0,.1)}.scielo__theme--dark .scielo__mainMenu-responsivo,.scielo__theme--dark .touch-side-swipe{background:#333;border-color:rgba(255,255,255,.3)}.scielo__theme--light .scielo__mainMenu-responsivo,.scielo__theme--light .touch-side-swipe{background:#fff;border-color:#ccc}.scielo__mainMenu-responsivo .logo-svg,.touch-side-swipe .logo-svg{background:url(../img/logo-scielo-no-label.svg);background-position:center center;background-repeat:no-repeat;display:block;width:100px;height:100px}.scielo__theme--dark .scielo__mainMenu-responsivo .logo-svg,.scielo__theme--dark .touch-side-swipe .logo-svg{background-image:url(../img/logo-scielo-no-label-negative.svg)}.scielo__theme--light .scielo__mainMenu-responsivo .logo-svg,.scielo__theme--light .touch-side-swipe .logo-svg{background-image:url(../img/logo-scielo-no-label.svg)}.scielo__mainMenu-responsivo ul,.touch-side-swipe ul{margin:0;padding:0}.scielo__mainMenu-responsivo li,.touch-side-swipe li{list-style:none;border-bottom:1px dotted #6c6b6b;padding-bottom:7px}.scielo__theme--dark .scielo__mainMenu-responsivo li,.scielo__theme--dark .touch-side-swipe li{border-color:rgba(255,255,255,.3)}.scielo__theme--light .scielo__mainMenu-responsivo li,.scielo__theme--light .touch-side-swipe li{border-color:#ccc}.scielo__mainMenu-responsivo li:last-child,.touch-side-swipe li:last-child{border-bottom:0}.scielo__mainMenu-responsivo li a,.scielo__mainMenu-responsivo li strong,.touch-side-swipe li a,.touch-side-swipe li strong{display:block;color:#00314c;text-decoration:none}.scielo__theme--dark .scielo__mainMenu-responsivo li a,.scielo__theme--dark .scielo__mainMenu-responsivo li strong,.scielo__theme--dark .touch-side-swipe li a,.scielo__theme--dark .touch-side-swipe li strong{color:#eee}.scielo__theme--light .scielo__mainMenu-responsivo li a,.scielo__theme--light .scielo__mainMenu-responsivo li strong,.scielo__theme--light .touch-side-swipe li a,.scielo__theme--light .touch-side-swipe li strong{color:#00314c}.scielo__mainMenu-responsivo li a:hover,.scielo__mainMenu-responsivo li strong:hover,.touch-side-swipe li a:hover,.touch-side-swipe li strong:hover{color:#3867ce}.scielo__theme--dark .scielo__mainMenu-responsivo li a:hover,.scielo__theme--dark .scielo__mainMenu-responsivo li strong:hover,.scielo__theme--dark .touch-side-swipe li a:hover,.scielo__theme--dark .touch-side-swipe li strong:hover{color:#86acff}.scielo__theme--light .scielo__mainMenu-responsivo li a:hover,.scielo__theme--light .scielo__mainMenu-responsivo li strong:hover,.scielo__theme--light .touch-side-swipe li a:hover,.scielo__theme--light .touch-side-swipe li strong:hover{color:#3867ce}.scielo__mainMenu-responsivo li a,.touch-side-swipe li a{padding:.4rem 1rem}.scielo__mainMenu-responsivo li a:hover,.touch-side-swipe li a:hover{background-color:#f7f6f4}.scielo__mainMenu-responsivo li li,.touch-side-swipe li li{background:0 0;padding-bottom:0;border-bottom:0}.scielo-ico-menu{display:inline-block}.scielo-ico-menu-opened{display:none}.touch-side-swipe{display:none;height:100%;width:100%;top:0;left:0}.tss .touch-side-swipe{display:block;overflow-y:overlay}.tss{z-index:9999;position:fixed;top:0;left:0;height:100%;will-change:transform;transition-property:transform;transition-timing-function:ease}.tss-wrap{height:100%;width:100%;position:absolute;top:0;left:0}.tss-label{z-index:99999;position:absolute;top:5px;right:-44px;width:44px;height:44px;display:block;cursor:pointer}.tss-label_pic{position:relative;display:inline-block;vertical-align:middle;font-style:normal;text-align:left;text-indent:-9999px;direction:ltr;box-sizing:border-box;transition:transform .2s ease}.tss-label_pic:after,.tss-label_pic:before{content:'';pointer-events:none;transition:transform .2s ease}.tss--close .tss-label_pic{color:#000;width:30px;height:4px;box-shadow:inset 0 0 0 32px,0 -8px,0 8px;margin:15px 7px}.tss--close .tss-label_pic:after{position:absolute;transform:translateY(4px);color:#fff;width:30px;height:3px;box-shadow:inset 0 0 0 32px,0 -8px,0 8px;top:0;left:0}.tss--open .tss-label_pic{color:#fff;padding:0;width:40px;height:40px;margin:2px;transform:rotate(45deg)}.tss--open .tss-label_pic:before{width:40px;height:2px}.tss--open .tss-label_pic:after{width:2px;height:40px}.tss--open .tss-label_pic:after,.tss--open .tss-label_pic:before{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);box-shadow:inset 0 0 0 32px}.tss-bg{background:#000;position:fixed;width:100%;height:100%;top:0;left:0;opacity:0;will-change:opacity;transition-property:opacity;transition-timing-function:ease}.touch-side-swipe{background:#fff}header{background:#fff}.page-item{background:0 0;border-color:rgba(0,0,0,.3)}.page-item.active .page-link{background:0 0;border-color:#3867ce;background-color:#3867ce;color:#fff;font-weight:400}.scielo__theme--dark .page-item.active .page-link{background-color:#86acff;border-color:#86acff;color:#eee}.scielo__theme--light .page-item.active .page-link{border-color:#3867ce;background-color:#3867ce;color:#fff}.page-item.disabled .page-link{background:0 0;color:rgba(0,0,0,.396);border-color:rgba(0,0,0,.396);cursor:not-allowed}.scielo__theme--dark .page-item.disabled .page-link{color:rgba(255,255,255,.2);border-color:rgba(255,255,255,.2)}.scielo__theme--light .page-item.disabled .page-link{color:rgba(0,0,0,.396);border-color:rgba(0,0,0,.396)}.page-item .material-icons,.page-item .material-icons-outlined{font-size:1rem;line-height:1.2em}.page-link{background:0 0;font-weight:400;font-size:1rem;line-height:1.2em;height:2rem;text-align:center;border-color:#ccc;transition:all .2s;color:#3867ce;font-weight:400}.scielo__theme--dark .page-link{color:#86acff;border-color:rgba(255,255,255,.3);font-weight:400}.scielo__theme--light .page-link{color:#3867ce;border-color:#ccc;font-weight:400}.page-link:hover{background:#f7f6f4;color:#3867ce;border-color:#ccc}.scielo__theme--dark .page-link:hover{background:#414141;color:#86acff;border-color:rgba(255,255,255,.3)}.scielo__theme--light .page-link:hover{background:#f7f6f4;color:#3867ce;border-color:#ccc}.scielo__ico:before{content:'';position:absolute;font-size:1.5rem;line-height:1.5rem}.scielo__ico--first_page:before{font-family:'Material Icons Outlined';content:"first_page";color:inherit}.scielo__ico--last_page:before{font-family:'Material Icons Outlined';content:"last_page";color:inherit}.scielo__ico--navigate_before:before{font-family:'Material Icons Outlined';content:"navigate_before";color:inherit}.scielo__ico--navigate_next:before{font-family:'Material Icons Outlined';content:"navigate_next";color:inherit}.breadcrumb{background:#efeeec;padding:1.125rem;border-radius:.25rem}.scielo__theme--dark .breadcrumb{background:#414141}.scielo__theme--light .breadcrumb{background:#efeeec}.breadcrumb li a{font-weight:400!important}.breadcrumb li.breadcrumb-item+.breadcrumb-item:before{color:rgba(0,0,0,.396)}.scielo__theme--dark .breadcrumb li.breadcrumb-item+.breadcrumb-item:before{color:rgba(255,255,255,.2)}.scielo__theme--light .breadcrumb li.breadcrumb-item+.breadcrumb-item:before{color:rgba(0,0,0,.396)}.breadcrumb li.active{color:#6c6b6b}.scielo__theme--dark .breadcrumb li.active{color:#adadad}.scielo__theme--light .breadcrumb li.active{color:#6c6b6b}.dropdown-divider{border-color:#ccc}.scielo__theme--dark .dropdown-divider{border-color:rgba(255,255,255,.3)}.scielo__theme--light .dropdown-divider{border-color:#ccc}.dropdown-menu{background:#fff;border-color:#ccc}.scielo__theme--dark .dropdown-menu{background:#333;border-color:rgba(255,255,255,.3)}.scielo__theme--light .dropdown-menu{background:#fff;border-color:#ccc}.dropdown-item{white-space:normal;color:#333}.dropdown-item:hover{color:#333;background:#f7f6f4}.scielo__theme--dark .dropdown-item{white-space:normal;color:#c4c4c4}.scielo__theme--dark .dropdown-item:hover{color:#c4c4c4;background:#414141}.scielo__theme--light .dropdown-item{white-space:normal;color:#333}.scielo__theme--light .dropdown-item:hover{color:#333;background:#f7f6f4}footer{border-top:0!important;margin:0;padding-top:.75rem;padding-bottom:3rem}footer section{border-top:1px dashed #ccc}.scielo__theme--dark footer section{border-color:rgba(255,255,255,.3)}.scielo__theme--light footer section{border-color:#ccc}footer section:first-child{border-top:0}footer .col{padding:15px 0}footer p{margin:0}footer .address-scielo{background-color:#f7f6f4}.scielo__theme--dark footer .address-scielo{background-color:#393939}.scielo__theme--light footer .address-scielo{background-color:#f7f6f4}footer .address-scielo .col{border:0}@media (max-width:575.98px){footer .address-scielo .col{padding-left:8px;padding-right:8px}footer .address-scielo .col:first-child{padding-bottom:0}footer .address-scielo .col:last-child{padding-top:0}}footer .partners{padding:16px 0}footer .partners a{margin:10px}@media (max-width:575.98px){footer .partners img{margin:8px 0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#333;text-align:left;background-color:transparent;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.scielo__theme--dark .accordion-button{color:#c4c4c4}.scielo__theme--light .accordion-button{color:#333}.accordion-button:not(.collapsed){color:#333;background-color:transparent;box-shadow:none;border-bottom:3px solid #3867ce}.scielo__theme--dark .accordion-button:not(.collapsed){color:#c4c4c4;background-color:transparent;border-bottom:3px solid #86acff}.scielo__theme--light .accordion-button:not(.collapsed){color:#333;background-color:transparent;border-bottom:3px solid #3867ce}.accordion-button:not(.collapsed)::after{background-image:none;transform:rotate(90deg);color:#3867ce}.scielo__theme--dark .accordion-button:not(.collapsed)::after{color:#86acff}.scielo__theme--light .accordion-button:not(.collapsed)::after{color:#3867ce}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;font-family:'Material Icons Outlined';content:"arrow_forward_ios";background-image:none;background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out;text-align:center;line-height:1.25rem}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#3867ce;outline:0;box-shadow:none}.accordion-header{margin-bottom:0}.accordion-item{margin-bottom:-1px;background-color:transparent;border:1px solid #ccc}.scielo__theme--dark .accordion-item{border:1px solid rgba(255,255,255,.3)}.scielo__theme--light .accordion-item{border:1px solid #ccc}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.accordion-item:last-of-type{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem;background:#f7f6f4;color:#333}.scielo__theme--dark .accordion-body{color:#c4c4c4;background:#414141}.scielo__theme--light .accordion-body{color:#333;background:#f7f6f4}.accordion-flush{border:1px solid #ccc;border-radius:.25rem}.scielo__theme--dark .accordion-flush{border:1px solid rgba(255,255,255,.3)}.scielo__theme--light .accordion-flush{border:1px solid #ccc}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.alert{padding:.75rem 3.75rem .75rem 1.5rem;border-radius:.1875rem;border:2px solid #86acff;background:#fff;color:#00314c}.scielo__theme--dark .alert{background:#333;color:#eee}.scielo__theme--light .alert{background:#fff;color:#00314c}.alert hr{border-top-color:#efeeec}.scielo__theme--dark .alert hr{border-top-color:#414141}.scielo__theme--light .alert hr{border-top-color:#efeeec}.alert-danger,.alert-info,.alert-success,.alert-warning{padding-left:3.75rem;position:relative}.alert-danger:before,.alert-info:before,.alert-success:before,.alert-warning:before{content:'';position:absolute;top:.75rem;left:1.5rem;font-family:'Material Icons Outlined';font-size:1.5rem;line-height:1.5rem}.alert-primary{color:#fff;background:#3867ce;border-color:#3867ce}.alert-primary .alert-heading,.alert-primary .alert-link{color:#fff!important}.alert-primary a{color:#fff;text-decoration:underline}.scielo__theme--dark .alert-primary{color:#333;background:#86acff;border-color:#86acff}.scielo__theme--dark .alert-primary .alert-heading,.scielo__theme--dark .alert-primary .alert-link{color:#333!important}.scielo__theme--light .alert-primary{color:#fff;background:#3867ce;border-color:#3867ce}.scielo__theme--light .alert-primary .alert-heading,.scielo__theme--light .alert-primary .alert-link{color:#fff!important}.alert-secondary{color:#fff;background:#fff;border-color:#fff;color:#333;background:#fff;border-color:rgba(0,0,0,.3)}.alert-secondary .alert-heading,.alert-secondary .alert-link{color:#fff!important}.alert-secondary a{color:#fff;text-decoration:underline}.scielo__theme--dark .alert-secondary{color:#333;background:#c4c4c4;border-color:#c4c4c4}.scielo__theme--dark .alert-secondary .alert-heading,.scielo__theme--dark .alert-secondary .alert-link{color:#333!important}.scielo__theme--light .alert-secondary{color:#fff;background:#fff;border-color:#fff}.scielo__theme--light .alert-secondary .alert-heading,.scielo__theme--light .alert-secondary .alert-link{color:#fff!important}.alert-secondary .alert-heading,.alert-secondary .alert-link{color:#333!important}.scielo__theme--dark .alert-secondary{color:#c4c4c4;background:0 0;border-color:#c4c4c4}.scielo__theme--dark .alert-secondary .alert-heading,.scielo__theme--dark .alert-secondary .alert-link{color:#c4c4c4!important}.scielo__theme--light .alert-secondary{color:#333;background:#fff;border-color:rgba(0,0,0,.3)}.scielo__theme--light .alert-secondary .alert-heading,.scielo__theme--light .alert-secondary .alert-link{color:#333!important}.alert-info{color:#fff;background:#2195a9;border-color:#2195a9}.alert-info:before{content:"info";color:inherit}.alert-info .alert-heading,.alert-info .alert-link{color:#fff!important}.alert-info a{color:#fff;text-decoration:underline}.scielo__theme--dark .alert-info{color:#333;background:#2299ad;border-color:#2299ad}.scielo__theme--dark .alert-info .alert-heading,.scielo__theme--dark .alert-info .alert-link{color:#333!important}.scielo__theme--light .alert-info{color:#fff;background:#2195a9;border-color:#2195a9}.scielo__theme--light .alert-info .alert-heading,.scielo__theme--light .alert-info .alert-link{color:#fff!important}.alert-dark{color:#fff;background:#3867ce;border-color:#3867ce}.alert-dark .alert-heading,.alert-dark .alert-link{color:#fff!important}.alert-dark a{color:#fff;text-decoration:underline}.scielo__theme--dark .alert-dark{color:#333;background:#86acff;border-color:#86acff}.scielo__theme--dark .alert-dark .alert-heading,.scielo__theme--dark .alert-dark .alert-link{color:#333!important}.scielo__theme--light .alert-dark{color:#fff;background:#3867ce;border-color:#3867ce}.scielo__theme--light .alert-dark .alert-heading,.scielo__theme--light .alert-dark .alert-link{color:#fff!important}.alert-success{color:#fff;background:#2c9d45;border-color:#2c9d45}.alert-success:before{content:"check_circle";color:inherit}.alert-success .alert-heading,.alert-success .alert-link{color:#fff!important}.alert-success a{color:#fff;text-decoration:underline}.scielo__theme--dark .alert-success{color:#333;background:#2c9d45;border-color:#2c9d45}.scielo__theme--dark .alert-success .alert-heading,.scielo__theme--dark .alert-success .alert-link{color:#333!important}.scielo__theme--light .alert-success{color:#fff;background:#2c9d45;border-color:#2c9d45}.scielo__theme--light .alert-success .alert-heading,.scielo__theme--light .alert-success .alert-link{color:#fff!important}.alert-danger{color:#fff;background:#c63800;border-color:#c63800}.alert-danger:before{content:"report_problem";color:inherit}.alert-danger .alert-heading,.alert-danger .alert-link{color:#fff!important}.alert-danger a{color:#fff;text-decoration:underline}.scielo__theme--dark .alert-danger{color:#333;background:#ff7e4a;border-color:#ff7e4a}.scielo__theme--dark .alert-danger .alert-heading,.scielo__theme--dark .alert-danger .alert-link{color:#333!important}.scielo__theme--light .alert-danger{color:#fff;background:#c63800;border-color:#c63800}.scielo__theme--light .alert-danger .alert-heading,.scielo__theme--light .alert-danger .alert-link{color:#fff!important}.alert-warning{color:#fff;background:#b67f00;border-color:#b67f00}.alert-warning:before{content:"report_problem";color:inherit}.alert-warning .alert-heading,.alert-warning .alert-link{color:#fff!important}.alert-warning a{color:#fff;text-decoration:underline}.scielo__theme--dark .alert-warning{color:#333;background:#b67f00;border-color:#b67f00}.scielo__theme--dark .alert-warning .alert-heading,.scielo__theme--dark .alert-warning .alert-link{color:#333!important}.scielo__theme--light .alert-warning{color:#fff;background:#b67f00;border-color:#b67f00}.scielo__theme--light .alert-warning .alert-heading,.scielo__theme--light .alert-warning .alert-link{color:#fff!important}.alert-link{color:#3867ce!important}.scielo__theme--dark .alert-link{color:#86acff!important}.scielo__theme--light .alert-link{color:#3867ce!important}.alert-dismissible{padding-right:3.75rem}.alert-dismissible .close{padding:.5625rem .75rem;font-size:1.5rem;line-height:1.5rem;color:inherit;top:0;right:0;opacity:.5;position:absolute;right:0;border:0;background:0 0}.alert-dismissible .close:before{font-family:'Material Icons Outlined';content:"close";color:inherit}.alert-dismissible .close:hover{opacity:1}.alert.text-center{border-radius:0}.alert.text-center:before{position:static;display:block}@media (min-width:992px){.alert.text-center:before{display:inline-block;vertical-align:bottom}}.card{position:relative;display:flex;flex-direction:column;min-width:0;height:auto;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid #ccc;border-radius:.25rem}.card:has(.card-footer){padding-bottom:4rem}.scielo__theme--dark .card{border:1px solid rgba(255,255,255,.3);background-color:#333}.scielo__theme--light .card{border:1px solid #ccc;background-color:#fff}.journalContent .card{min-height:220px}.card .list-group-item{background-color:#fff;border-color:#ccc}.scielo__theme--dark .card .list-group-item{border-color:rgba(255,255,255,.3);background-color:#333}.scielo__theme--light .card .list-group-item{border-color:#ccc;background-color:#fff}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem;color:#333}.scielo__theme--dark .card-body{color:#c4c4c4}.scielo__theme--light .card-body{color:#333}.card-body .btn{position:absolute;bottom:16px}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0;font-weight:700;text-transform:uppercase;color:#6c6b6b;font-size:.75rem}.scielo__theme--dark .card-subtitle{color:#adadad}.scielo__theme--light .card-subtitle{color:#6c6b6b}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:1rem;position:absolute;left:0;bottom:0;right:0;background-color:transparent;border:0}.card-header-tabs{margin-right:-.5rem;margin-bottom:-.5rem;margin-left:-.5rem;border-bottom:0}.card-header-pills{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{width:100%;height:9.3rem;object-fit:cover}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-group>.card{margin-bottom:.5rem}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card .stretched-link:hover .text-primary{text-decoration:underline;color:#2d52a5!important}.card .stretched-link:hover .btn-secondary{background:#d9d9d9 radial-gradient(circle,transparent 1%,#d9d9d9 1%) center/15000%}.card .stretched-link:hover .card-img-top{transition:all .8s;filter:brightness(.83)}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1060;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.5rem;outline:0}.scielo__theme--dark .modal-content{border:1px solid rgba(255,255,255,.3);background-color:#333}.scielo__theme--light .modal-content{border:1px solid #ccc;background-color:#fff}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-top-left-radius:calc(.5rem - 1px);border-top-right-radius:calc(.5rem - 1px);border-bottom:1px solid #ccc}.scielo__theme--dark .modal-header{border-bottom:1px solid rgba(255,255,255,.3)}.scielo__theme--light .modal-header{border-bottom:1px solid #ccc}.modal-header .btn-close{padding:.5rem .5rem;margin:-2px -.5rem -.5rem auto;background-image:none;font-weight:700;font-size:1.3125rem;line-height:1.25em;letter-spacing:0;text-align:center;position:relative}.modal-header .btn-close:before{font-family:'Material Icons Outlined';content:"close";color:#333;line-height:1.8;position:absolute;top:0;left:0;text-align:center;width:100%}.scielo__theme--dark .modal-header .btn-close:before{color:#c4c4c4}.scielo__theme--light .modal-header .btn-close:before{color:#333}.modal-title{margin-bottom:0;line-height:1.5}.modal-title [class*=" material-icons"],.modal-title [class^=material-icons]{vertical-align:bottom}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-bottom-right-radius:calc(.5rem - 1px);border-bottom-left-radius:calc(.5rem - 1px);border-top:1px solid #ccc}.scielo__theme--dark .modal-footer{border-top:1px solid rgba(255,255,255,.3)}.scielo__theme--light .modal-footer{border-top:1px solid #ccc}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.table{--scielo-table-bg:transparent;--scielo-table-striped-color:#393939;--scielo-table-striped-bg:rgba(0, 0, 0, 0.05);--scielo-table-active-color:#393939;--scielo-table-active-bg:rgba(0, 0, 0, 0.1);--scielo-table-hover-color:#393939;--scielo-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#333;vertical-align:top;border-color:#ccc}.scielo__theme--dark .table{color:#c4c4c4;border-color:rgba(255,255,255,.3)}.scielo__theme--light .table{color:#333;border-color:#ccc}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--scielo-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--scielo-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>thead th{border-bottom:2px solid #ccc}.scielo__theme--dark .table>thead th{border-bottom:2px solid rgba(255,255,255,.3)}.scielo__theme--light .table>thead th{border-bottom:2px solid #ccc}.table>:not(:last-child)>:last-child>*{border-bottom-color:#ccc}.scielo__theme--dark .table>:not(:last-child)>:last-child>*{border-bottom-color:rgba(255,255,255,.3)}.scielo__theme--light .table>:not(:last-child)>:last-child>*{border-bottom-color:#ccc}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-striped>tbody>tr:nth-of-type(odd){--scielo-table-accent-bg:var(--scielo-table-striped-bg);color:#333}.scielo__theme--dark .table-striped>tbody>tr:nth-of-type(odd){color:#c4c4c4}.scielo__theme--light .table-striped>tbody>tr:nth-of-type(odd){color:#333}.table-active{--scielo-table-accent-bg:var(--scielo-table-active-bg);color:#333}.scielo__theme--dark .table-active{color:#c4c4c4}.scielo__theme--light .table-active{color:#333}.table-hover>tbody>tr:hover{--scielo-table-accent-bg:var(--scielo-table-hover-bg);color:#333}.scielo__theme--dark .table-hover>tbody>tr:hover{color:#c4c4c4}.scielo__theme--light .table-hover>tbody>tr:hover{color:#333}.table-primary{--scielo-table-bg:rgba(56, 103, 206, 0.7);--scielo-table-striped-bg:rgba(51, 94, 188, 0.715);--scielo-table-striped-color:#fff;--scielo-table-active-bg:rgba(46, 85, 171, 0.73);--scielo-table-active-color:#fff;--scielo-table-hover-bg:rgba(49, 90, 179, 0.7225);--scielo-table-hover-color:#fff;color:#000}.table-secondary{--scielo-table-bg:rgba(255, 255, 255, 0.5);--scielo-table-striped-bg:rgba(220, 220, 220, 0.525);--scielo-table-striped-color:#000;--scielo-table-active-bg:rgba(191, 191, 191, 0.55);--scielo-table-active-color:#000;--scielo-table-hover-bg:rgba(205, 205, 205, 0.5375);--scielo-table-hover-color:#000;color:#000}.table-success{--scielo-table-bg:rgba(44, 157, 69, 0.7);--scielo-table-striped-bg:rgba(40, 143, 63, 0.715);--scielo-table-striped-color:#000;--scielo-table-active-bg:rgba(36, 130, 57, 0.73);--scielo-table-active-color:#fff;--scielo-table-hover-bg:rgba(38, 136, 60, 0.7225);--scielo-table-hover-color:#000;color:#000}.table-info{--scielo-table-bg:rgba(33, 149, 169, 0.7);--scielo-table-striped-bg:rgba(30, 136, 154, 0.715);--scielo-table-striped-color:#000;--scielo-table-active-bg:rgba(27, 124, 140, 0.73);--scielo-table-active-color:#fff;--scielo-table-hover-bg:rgba(29, 130, 147, 0.7225);--scielo-table-hover-color:#fff;color:#000}.table-warning{--scielo-table-bg:rgba(182, 127, 0, 0.7);--scielo-table-striped-bg:rgba(166, 116, 0, 0.715);--scielo-table-striped-color:#000;--scielo-table-active-bg:rgba(151, 105, 0, 0.73);--scielo-table-active-color:#fff;--scielo-table-hover-bg:rgba(158, 110, 0, 0.7225);--scielo-table-hover-color:#000;color:#000}.table-danger{--scielo-table-bg:rgba(198, 56, 0, 0.7);--scielo-table-striped-bg:rgba(180, 51, 0, 0.715);--scielo-table-striped-color:#fff;--scielo-table-active-bg:rgba(164, 46, 0, 0.73);--scielo-table-active-color:#fff;--scielo-table-hover-bg:rgba(172, 49, 0, 0.7225);--scielo-table-hover-color:#fff;color:#000}.table-light{--scielo-table-bg:#F7F6F4;--scielo-table-striped-bg:#ebeae8;--scielo-table-striped-color:#000;--scielo-table-active-bg:#dedddc;--scielo-table-active-color:#000;--scielo-table-hover-bg:#e4e4e2;--scielo-table-hover-color:#000;color:#000}.table-dark{--scielo-table-bg:#393939;--scielo-table-striped-bg:#434343;--scielo-table-striped-color:#fff;--scielo-table-active-bg:#4d4d4d;--scielo-table-active-color:#fff;--scielo-table-hover-bg:#484848;--scielo-table-hover-color:#fff;color:#fff}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.table table{min-width:100%}.nav:not(.flex-column).nav-tabs{border:none;background:0 0;margin-bottom:.75rem;border-bottom:1px solid #ccc}.scielo__theme--dark .nav:not(.flex-column).nav-tabs{border-color:rgba(255,255,255,.3)}.scielo__theme--light .nav:not(.flex-column).nav-tabs{border-color:#ccc}@media screen and (max-width:575px){.nav:not(.flex-column).nav-tabs{display:block;white-space:nowrap;overflow-x:auto;overflow-y:hidden}.nav:not(.flex-column).nav-tabs>li{float:none;display:inline-block}}.nav:not(.flex-column).nav-tabs .nav-link{font-weight:400!important;font-size:1rem;letter-spacing:.1px!important;white-space:nowrap;line-height:1.875rem;color:#333;border-radius:0;border-top-left-radius:.1875rem;border-top-right-radius:.1875rem;border-width:0;padding:.5625rem 1.5rem;position:relative;transition:.2s all}.nav:not(.flex-column).nav-tabs .nav-link:before{content:'';position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:0;border-bottom:3px solid rgba(56,103,206,.25);transition:.2s all}.scielo__theme--dark .nav:not(.flex-column).nav-tabs .nav-link{color:#c4c4c4}.scielo__theme--light .nav:not(.flex-column).nav-tabs .nav-link{color:#333}.nav:not(.flex-column).nav-tabs .nav-link.active{border:none;background:0 0;color:#00314c}.scielo__theme--dark .nav:not(.flex-column).nav-tabs .nav-link.active{color:#eee}.scielo__theme--light .nav:not(.flex-column).nav-tabs .nav-link.active{color:#00314c}.nav:not(.flex-column).nav-tabs .nav-link.active:before{left:50%;width:100%;border-color:#3867ce}.scielo__theme--dark .nav:not(.flex-column).nav-tabs .nav-link.active:before{border-color:#86acff}.scielo__theme--light .nav:not(.flex-column).nav-tabs .nav-link.active:before{border-color:#3867ce}.nav:not(.flex-column).nav-tabs .nav-link.disabled{color:rgba(0,0,0,.396);cursor:not-allowed}.scielo__theme--dark .nav:not(.flex-column).nav-tabs .nav-link.disabled{color:rgba(255,255,255,.2)}.scielo__theme--light .nav:not(.flex-column).nav-tabs .nav-link.disabled{color:rgba(0,0,0,.396)}.nav:not(.flex-column).nav-tabs .nav-link.dropdown-toggle{position:relative;padding-right:2.25rem!important}.nav:not(.flex-column).nav-tabs .nav-link.dropdown-toggle:after{position:absolute;top:50%;transform:translateY(-50%);font-family:'Material Icons Outlined';content:"arrow_drop_down";color:inherit;border:0;line-height:1.5rem!important;text-align:center;right:1rem;width:1.25rem;height:1.25rem;font-size:1.25rem;line-height:1.25rem;border:none!important;margin-top:0!important;width:1.5rem!important;height:1.5rem!important;transform:translateY(-50%)}.nav:not(.flex-column).nav-tabs .nav-link:not(.disabled):focus,.nav:not(.flex-column).nav-tabs .nav-link:not(.disabled):hover{background:#f7f6f4;color:#00314c}.scielo__theme--dark .nav:not(.flex-column).nav-tabs .nav-link:not(.disabled):focus,.scielo__theme--dark .nav:not(.flex-column).nav-tabs .nav-link:not(.disabled):hover{background:#414141;color:#eee}.scielo__theme--light .nav:not(.flex-column).nav-tabs .nav-link:not(.disabled):focus,.scielo__theme--light .nav:not(.flex-column).nav-tabs .nav-link:not(.disabled):hover{background:#f7f6f4;color:#00314c}.nav:not(.flex-column).nav-tabs .dropdown-menu{background:#fff;border:1px solid #ccc;border-radius:3px}.nav:not(.flex-column).nav-tabs .dropdown-menu>a{position:relative;font-weight:700;font-size:1;line-height:1.2em;letter-spacing:0;padding:.75rem 1.5rem .75rem;line-height:1.5rem;transition:all .5s;border-radius:.1875rem;background:0 0;color:#fff;font-weight:400;font-size:1rem;line-height:1.2em;color:#333!important}.scielo__theme--dark .nav:not(.flex-column).nav-tabs .dropdown-menu>a{color:#eee}.scielo__theme--light .nav:not(.flex-column).nav-tabs .dropdown-menu>a{color:#fff}.nav:not(.flex-column).nav-tabs .dropdown-menu>a:hover:hover{background:#f7f6f4;color:#333}.scielo__theme--dark .nav:not(.flex-column).nav-tabs .dropdown-menu>a:hover:hover{background:#414141;color:#c4c4c4}.scielo__theme--light .nav:not(.flex-column).nav-tabs .dropdown-menu>a:hover:hover{background:#f7f6f4;color:#333}.scielo__theme--dark .nav:not(.flex-column).nav-tabs .dropdown-menu>a{color:#c4c4c4!important}.scielo__theme--light .nav:not(.flex-column).nav-tabs .dropdown-menu>a{color:#333!important}.scielo__theme--dark .nav:not(.flex-column).nav-tabs .dropdown-menu{background:#333;border:1px solid rgba(255,255,255,.3)}.scielo__theme--light .nav:not(.flex-column).nav-tabs .dropdown-menu{background:#fff;border:1px solid #ccc}.nav:not(.flex-column).nav-tabs .dropdown-menu .dropdown-divider{border-color:#ccc}.scielo__theme--dark .nav:not(.flex-column).nav-tabs .dropdown-menu .dropdown-divider{border-color:rgba(255,255,255,.3)}.scielo__theme--light .nav:not(.flex-column).nav-tabs .dropdown-menu .dropdown-divider{border-color:#ccc}.nav.nav-pills .nav-link{font-weight:400!important;font-size:1rem;letter-spacing:.1px!important;white-space:nowrap;line-height:1.875rem;color:#333;border-radius:.1875rem;border-width:0;padding:.5625rem 1.5rem;position:relative;transition:.2s all}.scielo__theme--dark .nav.nav-pills .nav-link{color:#c4c4c4}.scielo__theme--light .nav.nav-pills .nav-link{color:#333}.nav.nav-pills .nav-link.active{border:none;background:#3867ce;color:#fff}.scielo__theme--dark .nav.nav-pills .nav-link.active{background:#86acff;color:#333}.scielo__theme--light .nav.nav-pills .nav-link.active{background:#3867ce;color:#fff}.nav.nav-pills .nav-link.disabled{color:rgba(0,0,0,.396);cursor:not-allowed}.scielo__theme--dark .nav.nav-pills .nav-link.disabled{color:rgba(255,255,255,.2)}.scielo__theme--light .nav.nav-pills .nav-link.disabled{color:rgba(0,0,0,.396)}.nav.nav-pills .nav-link:not(.disabled):focus:not(.active),.nav.nav-pills .nav-link:not(.disabled):hover:not(.active){background:#f7f6f4;color:#00314c}.scielo__theme--dark .nav.nav-pills .nav-link:not(.disabled):focus:not(.active),.scielo__theme--dark .nav.nav-pills .nav-link:not(.disabled):hover:not(.active){background:#414141;color:#eee}.scielo__theme--light .nav.nav-pills .nav-link:not(.disabled):focus:not(.active),.scielo__theme--light .nav.nav-pills .nav-link:not(.disabled):hover:not(.active){background:#f7f6f4;color:#00314c}.nav.flex-column.nav-pills .nav-link{font-weight:400!important;font-size:1rem;letter-spacing:.1px!important;white-space:nowrap;background:0 0;line-height:1.875rem;color:#333;border-radius:.1875rem;border-left:3px solid transparent;border-top-left-radius:0;border-bottom-left-radius:0;padding:.5625rem 1.5rem}.scielo__theme--dark .nav.flex-column.nav-pills .nav-link{color:#c4c4c4}.scielo__theme--light .nav.flex-column.nav-pills .nav-link{color:#333}.nav.flex-column.nav-pills .nav-link.active{background:0 0;border-color:#3867ce;color:#00314c}.scielo__theme--dark .nav.flex-column.nav-pills .nav-link.active{border-color:#86acff;color:#eee}.scielo__theme--light .nav.flex-column.nav-pills .nav-link.active{border-color:#3867ce;color:#00314c}.nav.flex-column.nav-pills .nav-link.disabled{color:rgba(0,0,0,.396);cursor:not-allowed}.scielo__theme--dark .nav.flex-column.nav-pills .nav-link.disabled{color:rgba(255,255,255,.2)}.scielo__theme--light .nav.flex-column.nav-pills .nav-link.disabled{color:rgba(0,0,0,.396)}.nav.flex-column.nav-pills .nav-link:not(.disabled):focus,.nav.flex-column.nav-pills .nav-link:not(.disabled):hover{background:#f7f6f4;color:#00314c}.scielo__theme--dark .nav.flex-column.nav-pills .nav-link:not(.disabled):focus,.scielo__theme--dark .nav.flex-column.nav-pills .nav-link:not(.disabled):hover{background:#414141;color:#eee}.scielo__theme--light .nav.flex-column.nav-pills .nav-link:not(.disabled):focus,.scielo__theme--light .nav.flex-column.nav-pills .nav-link:not(.disabled):hover{background:#f7f6f4;color:#00314c}.tab-pane{padding:.75rem 0}.slick-slider{position:relative;display:block;box-sizing:border-box;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list{position:relative;overflow:hidden;display:block;margin:0;padding:0}.slick-list:focus{outline:0}.slick-list.dragging{cursor:pointer;cursor:hand}.slick-slider .slick-list,.slick-slider .slick-track{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slick-track{position:relative;left:0;top:0;display:flex}.slick-track:after,.slick-track:before{content:"";display:table}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{float:left;min-height:1px;margin:0 10px;display:none}[dir=rtl] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none}.slick-next,.slick-prev{position:relative;display:inline-block;padding:.625rem 1rem;border-radius:.25rem;line-height:1.25rem;height:2.5rem;font-weight:400!important;font-size:1rem;letter-spacing:.1px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background-position:center;transition:all .8s;margin:0 0 1rem;background-color:#fff;border:1px solid #ccc;color:#333;position:absolute;display:block;height:40px;width:30px;line-height:0;font-size:0;cursor:pointer;top:50%;-webkit-transform:translate(0,-50%);-ms-transform:translate(0,-50%);transform:translate(0,-50%);padding:0}.slick-next:focus,.slick-prev:focus{box-shadow:0 0 0 .125rem rgba(56,103,206,.25);outline:0}.slick-next:focus:active,.slick-prev:focus:active{box-shadow:0 0 0 .25rem rgba(56,103,206,.25)}.slick-next:focus,.slick-prev:focus{box-shadow:0 0 0 .125rem rgba(204,204,204,.25);outline:0}.slick-next:focus-visible,.slick-prev:focus-visible{outline:3px solid #3867ce;outline-offset:2px}.slick-next:active,.slick-prev:active{box-shadow:0 0 0 .25rem rgba(204,204,204,.25)}.slick-next:focus,.slick-prev:focus{background-color:#fff;color:#333}.slick-next:focus-visible,.slick-prev:focus-visible{outline:3px solid #3867ce;outline-offset:2px}.slick-next.active:not(:disabled):not(.disabled),.slick-prev.active:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background-color:#d9d9d9;color:#333}.show>.slick-next.dropdown-toggle,.show>.slick-prev.dropdown-toggle{background-color:#d9d9d9;color:#333}.slick-next:hover:not(:disabled):not(.disabled),.slick-prev:hover:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background:#d9d9d9 radial-gradient(circle,transparent 1%,#d9d9d9 1%) center/15000%;color:#333;text-decoration:none}.slick-next:active:not(:disabled):not(.disabled),.slick-prev:active:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background-color:#1a1a1a;background-size:100%;transition:background 0s;color:#333}.slick-next:hover:not(:disabled):not(.disabled),.slick-prev:hover:not(:disabled):not(.disabled){border:1px solid #ccc;background:hoverBgColor radial-gradient(circle,transparent 1%,hoverBgColor 1%) center/15000%;color:#333}.slick-next:active:not(:disabled):not(.disabled),.slick-prev:active:not(:disabled):not(.disabled){border:1px solid #ccc;background-color:gray;background-size:100%;transition:background 0s;color:#333}.slick-next:focus,.slick-prev:focus{border-color:#ccc}.scielo__theme--dark .slick-next,.scielo__theme--dark .slick-prev{background-color:#c4c4c4;border:1px solid rgba(255,255,255,.3);color:#333}.scielo__theme--dark .slick-next:focus,.scielo__theme--dark .slick-prev:focus{background-color:#c4c4c4;color:#333}.scielo__theme--dark .slick-next.active:not(:disabled):not(.disabled),.scielo__theme--dark .slick-prev.active:not(:disabled):not(.disabled){background-color:#a7a7a7;color:#333}.scielo__theme--dark .slick-next:hover:not(:disabled):not(.disabled),.scielo__theme--dark .slick-prev:hover:not(:disabled):not(.disabled){border:1px solid #dcdcdc;background:#dcdcdc radial-gradient(circle,transparent 1%,#dcdcdc 1%) center/15000%;color:#333;text-decoration:none}.scielo__theme--dark .slick-next:active:not(:disabled):not(.disabled),.scielo__theme--dark .slick-prev:active:not(:disabled):not(.disabled){border:1px solid #dcdcdc;background-color:#f9f9f9;background-size:100%;transition:background 0s;color:#333}.scielo__theme--dark .slick-next:hover:not(:disabled):not(.disabled),.scielo__theme--dark .slick-prev:hover:not(:disabled):not(.disabled){border:1px solid rgba(255,255,255,.3);background:hoverBgColor radial-gradient(circle,transparent 1%,hoverBgColor 1%) center/15000%;color:#333}.scielo__theme--dark .slick-next:active:not(:disabled):not(.disabled),.scielo__theme--dark .slick-prev:active:not(:disabled):not(.disabled){border:1px solid rgba(255,255,255,.3);background-color:#f9f9f9;background-size:100%;transition:background 0s;color:#333}.scielo__theme--dark .slick-next:focus,.scielo__theme--dark .slick-prev:focus{border-color:rgba(255,255,255,.3)}.scielo__theme--light .slick-next,.scielo__theme--light .slick-prev{background-color:#fff;border-color:1px solid #ccc;color:#333}.scielo__theme--light .slick-next:focus,.scielo__theme--light .slick-prev:focus{background-color:#fff;color:#333}.scielo__theme--light .slick-next.active:not(:disabled):not(.disabled),.scielo__theme--light .slick-prev.active:not(:disabled):not(.disabled){background-color:#fff;color:#333}.scielo__theme--light .slick-next:hover:not(:disabled):not(.disabled),.scielo__theme--light .slick-prev:hover:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background:#d9d9d9 radial-gradient(circle,transparent 1%,#d9d9d9 1%) center/15000%;color:#333;text-decoration:none}.scielo__theme--light .slick-next:active:not(:disabled):not(.disabled),.scielo__theme--light .slick-prev:active:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background-color:#1a1a1a;background-size:100%;transition:background 0s;color:#333}.scielo__theme--light .slick-next:hover:not(:disabled):not(.disabled),.scielo__theme--light .slick-prev:hover:not(:disabled):not(.disabled){border:1px solid #ccc;background:hoverBgColor radial-gradient(circle,transparent 1%,hoverBgColor 1%) center/15000%;color:#333}.scielo__theme--light .slick-next:active:not(:disabled):not(.disabled),.scielo__theme--light .slick-prev:active:not(:disabled):not(.disabled){border:1px solid #ccc;background-color:gray;background-size:100%;transition:background 0s;color:#333}.scielo__theme--light .slick-next:focus,.scielo__theme--light .slick-prev:focus{border-color:#ccc}.slick-next:focus,.slick-next:hover,.slick-prev:focus,.slick-prev:hover{outline:0}.slick-next:focus:before,.slick-next:hover:before,.slick-prev:focus:before,.slick-prev:hover:before{opacity:1}.slick-next.slick-disabled:before,.slick-prev.slick-disabled:before{opacity:.25}.slick-next:before,.slick-prev:before{font-family:"Material Icons Outlined";font-size:20px;line-height:1;opacity:.75;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.slick-prev{left:-25px}@media (max-width:575.98px){.slick-prev{left:0;z-index:1}}[dir=rtl] .slick-prev{left:auto;right:-25px}.slick-prev:before{content:"navigate_before"}[dir=rtl] .slick-prev:before{content:"navigate_next"}.slick-next{right:-25px}@media (max-width:575.98px){.slick-next{right:0;z-index:1}}[dir=rtl] .slick-next{left:-25px;right:auto}.slick-next:before{content:"navigate_next"}[dir=rtl] .slick-next:before{content:"navigate_before"}.slick-dotted.slick-slider{margin-bottom:30px}.slick-dots{position:absolute;bottom:-32px;list-style:none;display:block;text-align:center;padding:0;margin:0;width:100%}@media (max-width:575.98px){.slick-dots{display:flex}}.slick-dots li{position:relative;display:inline-block;height:16px;width:16px;margin:0 5px;padding:0;cursor:pointer}@media (max-width:575.98px){.slick-dots li{flex:1;height:4px}}.slick-dots li button{background:0 0;border:2px solid #6c6b6b;border-radius:100px;display:block;height:16px;width:16px;outline:0;line-height:0;font-size:0;color:transparent;padding:0;cursor:pointer}@media (max-width:575.98px){.slick-dots li button{background:rgba(108,107,107,.2);border:0;width:100%;height:4px;border-radius:0}}.scielo__theme--dark .slick-dots li button{background:rgba(173,173,173,.2)}.scielo__theme--light .slick-dots li button{background:rgba(108,107,107,.2)}.slick-dots li button:focus,.slick-dots li button:hover{outline:0}.slick-dots li button:focus:before,.slick-dots li button:hover:before{opacity:1}.slick-dots li.slick-active button{background:#6c6b6b}.scielo__theme--dark .slick-dots li.slick-active button{background:#adadad}.scielo__theme--light .slick-dots li.slick-active button{background:#6c6b6b}.scielo__language{text-align:right}@media (min-width:576px){.scielo__language{position:static;display:inline-block;float:right}}.scielo__levelMenu{background:#f7f6f4;padding:1.125rem}.scielo__theme--dark .scielo__levelMenu{background:#393939}.scielo__theme--light .scielo__levelMenu{background:#f7f6f4}.scielo__levelMenu>.container{margin:0!important}.scielo__levelMenu>.container [class^=col]{text-align:center;border-right:1px dashed #ccc;line-height:3.75rem}.scielo__theme--dark .scielo__levelMenu>.container [class^=col]{border-color:rgba(255,255,255,.3)}.scielo__theme--light .scielo__levelMenu>.container [class^=col]{border-color:#ccc}.scielo__levelMenu>.container [class^=col]:last-of-type{border:0}@media (max-width:575.98px){.scielo__levelMenu>.container [class^=col]{border:0}.scielo__levelMenu>.container [class^=col]:first-of-type{border-right:1px dashed #ccc}.scielo__theme--dark .scielo__levelMenu>.container [class^=col]:first-of-type{border-color:rgba(255,255,255,.3)}.scielo__theme--light .scielo__levelMenu>.container [class^=col]:first-of-type{border-color:#ccc}.scielo__levelMenu>.container [class^=col]:last-of-type{margin-top:1rem}}.scielo__levelMenu a{text-decoration:none;font-weight:700}.journal .levelMenu{margin-top:1.5rem}@media (max-width:575.98px){.journal .levelMenu{margin-top:145px}}section.scielo__search-articles{background:#f7f6f4;padding:1.125rem}.scielo__theme--dark section.scielo__search-articles{background:#393939}.scielo__theme--light section.scielo__search-articles{background:#f7f6f4}@media (max-width:991.98px){section.scielo__search-articles .input-group{flex-flow:column;height:auto;background:0 0}section.scielo__search-articles .input-group .form-control,section.scielo__search-articles .input-group .form-select{width:100%;margin:0 0 .5rem!important;border-radius:.25rem!important}section.scielo__search-articles .input-group .form-control:last-child,section.scielo__search-articles .input-group .form-select:last-child{margin:0}}section.scielo__search-articles .input-group .input-group-append .form-select{min-width:180px}section.scielo__search-articles .input-group .input-group-preppend .form-select{min-width:120px}.scielo__contribGroup{color:#403d39;margin:15px 10%;font-size:1.1em;text-align:center;opacity:1}.scielo__contribGroup a.btn-fechar{display:inline-block;border-radius:100%;cursor:pointer;width:30px;height:30px;font-size:86%;padding:5px 0;text-align:center;margin-top:10px;font-family:'Material Icons Outlined';content:"close"}.scielo__contribGroup a.btn-fechar:hover{background:#3867ce;color:#fff}.scielo__contribGroup .sci-ico-emailOutlined{font-size:20px;vertical-align:baseline}.scielo__contribGroup .dropdown{display:inline-block;padding:0}.scielo__contribGroup .dropdown .dropdown-toggle{background:0 0;border:1px solid transparent;padding:.625rem;height:auto;outline:0;margin-bottom:0;color:#3867ce}.scielo__contribGroup .dropdown .dropdown-toggle:hover{border:1px solid transparent;color:#254895;background:0 0!important}.scielo__theme--dark .scielo__contribGroup .dropdown .dropdown-toggle{border:1px solid transparent;color:#86acff}.scielo__theme--dark .scielo__contribGroup .dropdown .dropdown-toggle:hover{border:1px solid transparent;color:#d3e0ff}.scielo__theme--light .scielo__contribGroup .dropdown .dropdown-toggle{border:1px solid transparent;color:#3867ce}.scielo__theme--light .scielo__contribGroup .dropdown .dropdown-toggle:hover{border:1px solid transparent;color:#254895}.scielo__contribGroup .dropdown .dropdown-toggle:focus{box-shadow:none;background:0 0;border:1px solid #ccc}.scielo__theme--dark .scielo__contribGroup .dropdown .dropdown-toggle:focus{box-shadow:none;background:0 0;border:1px solid rgba(255,255,255,.3)}.scielo__theme--light .scielo__contribGroup .dropdown .dropdown-toggle:focus{box-shadow:none;background:0 0;border:1px solid #ccc}@media (max-width:575.98px){.scielo__contribGroup .dropdown .dropdown-toggle{max-width:300px!important;white-space:inherit;height:auto}}.scielo__contribGroup .dropdown .dropdown-toggle:after{display:none}.scielo__contribGroup .dropdown .dropdown-menu{padding:10px 20px;text-align:left;border-radius:4px}.scielo__contribGroup .dropdown .dropdown-menu.show{color:#333;padding-left:.75rem}.scielo__theme--dark .scielo__contribGroup .dropdown .dropdown-menu.show{color:#c4c4c4}.scielo__theme--light .scielo__contribGroup .dropdown .dropdown-menu.show{color:#333}.scielo__contribGroup .dropdown .dropdown-menu strong{display:inline-block;margin:20px 0 8px 0;font-size:11px;color:#00314c;text-transform:uppercase}.scielo__contribGroup .dropdown a{cursor:pointer}.scielo__contribGroup .dropdown a span{display:inline-block;padding:5px 0}.scielo__contribGroup .dropdown.open{background:#3867ce;border-radius:4px}.scielo__contribGroup .dropdown.open a{color:#fff}.scielo__contribGroup .outlineFadeLink{background-color:#fff;border:1px solid #ccc;color:#333;margin:0 0 0 .625rem}.scielo__contribGroup .outlineFadeLink:focus{box-shadow:0 0 0 .125rem rgba(204,204,204,.25);outline:0}.scielo__contribGroup .outlineFadeLink:focus-visible{outline:3px solid #3867ce;outline-offset:2px}.scielo__contribGroup .outlineFadeLink:active{box-shadow:0 0 0 .25rem rgba(204,204,204,.25)}.scielo__contribGroup .outlineFadeLink:focus{background-color:#fff;color:#333}.scielo__contribGroup .outlineFadeLink:focus-visible{outline:3px solid #3867ce;outline-offset:2px}.scielo__contribGroup .outlineFadeLink.active:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background-color:#d9d9d9;color:#333}.show>.scielo__contribGroup .outlineFadeLink.dropdown-toggle{background-color:#d9d9d9;color:#333}.scielo__contribGroup .outlineFadeLink:hover:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background:#d9d9d9 radial-gradient(circle,transparent 1%,#d9d9d9 1%) center/15000%;color:#333;text-decoration:none}.scielo__contribGroup .outlineFadeLink:active:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background-color:#1a1a1a;background-size:100%;transition:background 0s;color:#333}.scielo__contribGroup .outlineFadeLink:hover:not(:disabled):not(.disabled){border:1px solid #ccc;background:hoverBgColor radial-gradient(circle,transparent 1%,hoverBgColor 1%) center/15000%;color:#333}.scielo__contribGroup .outlineFadeLink:active:not(:disabled):not(.disabled){border:1px solid #ccc;background-color:gray;background-size:100%;transition:background 0s;color:#333}.scielo__contribGroup .outlineFadeLink:focus{border-color:#ccc}.scielo__theme--dark .scielo__contribGroup .outlineFadeLink{background-color:#c4c4c4;border:1px solid rgba(255,255,255,.3);color:#333}.scielo__theme--dark .scielo__contribGroup .outlineFadeLink:focus{background-color:#c4c4c4;color:#333}.scielo__theme--dark .scielo__contribGroup .outlineFadeLink.active:not(:disabled):not(.disabled){background-color:#a7a7a7;color:#333}.scielo__theme--dark .scielo__contribGroup .outlineFadeLink:hover:not(:disabled):not(.disabled){border:1px solid #dcdcdc;background:#dcdcdc radial-gradient(circle,transparent 1%,#dcdcdc 1%) center/15000%;color:#333;text-decoration:none}.scielo__theme--dark .scielo__contribGroup .outlineFadeLink:active:not(:disabled):not(.disabled){border:1px solid #dcdcdc;background-color:#f9f9f9;background-size:100%;transition:background 0s;color:#333}.scielo__theme--dark .scielo__contribGroup .outlineFadeLink:hover:not(:disabled):not(.disabled){border:1px solid rgba(255,255,255,.3);background:hoverBgColor radial-gradient(circle,transparent 1%,hoverBgColor 1%) center/15000%;color:#333}.scielo__theme--dark .scielo__contribGroup .outlineFadeLink:active:not(:disabled):not(.disabled){border:1px solid rgba(255,255,255,.3);background-color:#f9f9f9;background-size:100%;transition:background 0s;color:#333}.scielo__theme--dark .scielo__contribGroup .outlineFadeLink:focus{border-color:rgba(255,255,255,.3)}.scielo__theme--light .scielo__contribGroup .outlineFadeLink{background-color:#fff;border-color:1px solid #ccc;color:#333}.scielo__theme--light .scielo__contribGroup .outlineFadeLink:focus{background-color:#fff;color:#333}.scielo__theme--light .scielo__contribGroup .outlineFadeLink.active:not(:disabled):not(.disabled){background-color:#fff;color:#333}.scielo__theme--light .scielo__contribGroup .outlineFadeLink:hover:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background:#d9d9d9 radial-gradient(circle,transparent 1%,#d9d9d9 1%) center/15000%;color:#333;text-decoration:none}.scielo__theme--light .scielo__contribGroup .outlineFadeLink:active:not(:disabled):not(.disabled){border:1px solid #d9d9d9;background-color:#1a1a1a;background-size:100%;transition:background 0s;color:#333}.scielo__theme--light .scielo__contribGroup .outlineFadeLink:hover:not(:disabled):not(.disabled){border:1px solid #ccc;background:hoverBgColor radial-gradient(circle,transparent 1%,hoverBgColor 1%) center/15000%;color:#333}.scielo__theme--light .scielo__contribGroup .outlineFadeLink:active:not(:disabled):not(.disabled){border:1px solid #ccc;background-color:gray;background-size:100%;transition:background 0s;color:#333}.scielo__theme--light .scielo__contribGroup .outlineFadeLink:focus{border-color:#ccc}@media (max-width:575.98px){.scielo__contribGroup .outlineFadeLink{margin:.5rem 0}}.btnContribLinks{display:inline-block;margin-top:4px;background-image:url(../img/logo-orcid.svg);background-repeat:no-repeat;background-size:1.5em auto;background-position:.5em center;padding:.5em .5em .5em 2.5em;border-radius:4px;border:1px solid #3867ce}.scielo__theme--dark .btnContribLinks{border:1px solid #86acff}.scielo__theme--light .btnContribLinks{border:1px solid #3867ce}.ModalDefault .btnContribLinks{padding:.5em .5em .5em 2.5em!important}.btnContribLinks:hover{border-color:#254895}.scielo__theme--dark .btnContribLinks:hover{border-color:#d3e0ff}.scielo__theme--light .btnContribLinks:hover{border-color:#254895}.linkGroup{position:relative;font-size:.85em}.linkGroup a.selected{position:relative}.linkGroup a.selected:after{content:'';display:block;position:absolute;bottom:-16px;left:4px;width:16px;height:7px;background:url(../img/articleContent-arrow.png) bottom center no-repeat;z-index:999}.btn-open{display:inline-block;margin:0 .625rem;transition:all .4s}@media (max-width:575.98px){.btn-open{display:block;margin:.25rem auto}}.badge{border-radius:1.5rem;font-size:.625rem;line-height:1.375rem;padding:0 .4375rem;height:1.625rem;min-width:1.625rem;letter-spacing:.5px;display:inline-block;vertical-align:text-top;border:2px solid #fff;text-align:center;text-transform:uppercase;color:#fff;background:#fff;color:#333}.scielo__theme--dark .badge{border-color:#333}.scielo__theme--light .badge{border-color:#fff}.scielo__theme--dark .badge{background-color:#c4c4c4;color:#eee}.scielo__theme--light .badge{background-color:#fff;color:#333}.badge-light,.badge-primary{background:#3867ce;color:#fff}.scielo__theme--dark .badge-light,.scielo__theme--dark .badge-primary{background-color:#86acff;color:#eee}.scielo__theme--light .badge-light,.scielo__theme--light .badge-primary{background-color:#3867ce;color:#fff}.badge-secondary{background:#fff;color:#333}.scielo__theme--dark .badge-secondary{background-color:#c4c4c4;color:#eee}.scielo__theme--light .badge-secondary{background-color:#fff;color:#333}.badge-info{background:#2195a9;color:#fff}.scielo__theme--dark .badge-info{background-color:#2299ad;color:#eee}.scielo__theme--light .badge-info{background-color:#2195a9;color:#fff}.badge-dark{background:#fff;color:#333}.scielo__theme--dark .badge-dark{background-color:#c4c4c4;color:#eee}.scielo__theme--light .badge-dark{background-color:#fff;color:#333}.badge-success{background:#2c9d45;color:#fff}.scielo__theme--dark .badge-success{background-color:#2c9d45;color:#eee}.scielo__theme--light .badge-success{background-color:#2c9d45;color:#fff}.badge-danger{background:#c63800;color:#fff}.scielo__theme--dark .badge-danger{background-color:#ff7e4a;color:#eee}.scielo__theme--light .badge-danger{background-color:#c63800;color:#fff}.badge-warning{background:#b67f00;color:#fff}.scielo__theme--dark .badge-warning{background-color:#b67f00;color:#eee}.scielo__theme--light .badge-warning{background-color:#b67f00;color:#fff}.display-1 .badge,.display-2 .badge,.display-3 .badge,.display-4 .badge,.h1 .badge,.h1 .badge .h2 .badge,.h2 .badge,.h3 .badge,.h4 .badge,.h5 .badge,.h6 .badge,.lead,h1 .badge,h2 .badge,h3 .badge,h4 .badge,h5 .badge,h6 .badge{margin-left:-.6em}.btn+.badge{vertical-align:text-bottom;margin:0 0 1.5rem -1.3125rem;position:relative;z-index:2}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}.progress{height:.1875rem;border-radius:.25rem;font-weight:700;font-size:.75rem;line-height:1.2em;letter-spacing:.06px;color:rgba(0,0,0,.1);overflow:visible;height:1.75rem;position:relative;background-color:#efeeec}.scielo__theme--dark .progress{background-color:#414141}.scielo__theme--light .progress{background-color:#efeeec}.progress-bar{position:relative;height:1.75rem;border-radius:.25rem;color:#fff}.progress-bar~.progress-bar{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-.4375rem}.scielo__theme--dark .progress-bar{background-color:#86acff!important}.scielo__theme--light .progress-bar{background-color:#3867ce!important}.scielo__theme--dark .progress-bar.bg-primary{background-color:#86acff!important}.scielo__theme--light .progress-bar.bg-primary{background-color:#3867ce!important}.scielo__theme--dark .progress-bar.bg-info{background-color:#2299ad!important}.scielo__theme--light .progress-bar.bg-info{background-color:#2195a9!important}.scielo__theme--dark .progress-bar.bg-success{background-color:#2c9d45!important}.scielo__theme--light .progress-bar.bg-success{background-color:#2c9d45!important}.scielo__theme--dark .progress-bar.bg-warning{background-color:#b67f00!important}.scielo__theme--light .progress-bar.bg-warning{background-color:#b67f00!important}.scielo__theme--dark .progress-bar.bg-danger{background-color:#ff7e4a!important}.scielo__theme--light .progress-bar.bg-danger{background-color:#c63800!important}.img-thumbnail{display:inline-block;background:0 0;border:none;border-radius:.1875rem;padding:0;overflow:hidden}.tooltip-inner{font-size:.75rem;border-radius:.1875rem;padding:.375rem .75rem;background:#333;color:#fff}.scielo__theme--dark .tooltip-inner{background:#fff;color:#333}.scielo__theme--light .tooltip-inner{background:#333;color:#fff}.tooltip.show{opacity:1}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{border-top-color:#333}.scielo__theme--dark .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.scielo__theme--dark .bs-tooltip-top .tooltip-arrow::before{border-top-color:#fff}.scielo__theme--light .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.scielo__theme--light .bs-tooltip-top .tooltip-arrow::before{border-top-color:#333}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{border-right-color:#333}.scielo__theme--dark .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.scielo__theme--dark .bs-tooltip-end .tooltip-arrow::before{border-right-color:#fff}.scielo__theme--light .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.scielo__theme--light .bs-tooltip-end .tooltip-arrow::before{border-right-color:#333}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{border-bottom-color:#333}.scielo__theme--dark .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.scielo__theme--dark .bs-tooltip-bottom .tooltip-arrow::before{border-bottom-color:#fff}.scielo__theme--light .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.scielo__theme--light .bs-tooltip-bottom .tooltip-arrow::before{border-bottom-color:#333}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{border-left-color:#333}.scielo__theme--dark .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.scielo__theme--dark .bs-tooltip-start .tooltip-arrow::before{border-left-color:#fff}.scielo__theme--light .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.scielo__theme--light .bs-tooltip-start .tooltip-arrow::before{border-left-color:#333}.scielo__loading-block{display:block;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:6.25rem;height:6.25rem;opacity:0;transition:opacity .5s linear;transition-delay:.5s;z-index:1050}.scielo__loading-backdrop{transition:opacity .5s linear;opacity:0;position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:1040}.scielo__loading-backdrop--dark{background:#da202c}.scielo__loading-backdrop--light{background:#fff}.scielo__loading-visible .scielo__loading-backdrop,.scielo__loading-visible .scielo__loading-block{opacity:1}.scielo__loading-hide .scielo__loading-backdrop{transition-delay:.7s}.scielo__loading-hide .scielo__loading-block{transition-delay:0}.scielo__loading-inline{position:relative;display:inline-block;width:1.25rem;height:1.25rem}.scielo__loading-inline:before{content:'';box-sizing:border-box;position:absolute;top:50%;left:50%;border-radius:50%;border:2px solid rgba(0,176,230,.2);border-top-color:#fff;animation:spinner .8s linear infinite;width:1.25rem;height:1.25rem;margin-top:-.625rem;margin-left:-.625rem}.scielo__theme--dark .scielo__loading-inline:before{border-color:rgba(0,176,230,.6);border-top-color:#eee}.scielo__theme--light .scielo__loading-inline:before{border-color:rgba(0,176,230,.2);border-top-color:#fff}[class*=b3__btn-with-icon] .scielo__loading-inline:before{border-color:#414141;border-top-color:#fff}.scielo__theme--dark [class*=b3__btn-with-icon] .scielo__loading-inline:before{border-color:#414141;border-top-color:#fff}[class*=b3__btn-with-icon--left] .scielo__loading-inline:before{padding-left:2rem}[class*=b3__btn-with-icon--left] .scielo__loading-inline:before [class^=material-icons]{position:absolute;top:50%;transform:translateY(-50%);width:1.25rem;height:1.25rem;font-size:1.25rem;line-height:1.25rem}[class*=b3__btn-with-icon--left] .scielo__loading-inline:before [class^=material-icons]:before{vertical-align:top}[class*=b3__btn-with-icon--left] .scielo__loading-inline:before [class^=material-icons]{left:.5rem}[class*=b3__btn-with-icon--right] .scielo__loading-inline:before{padding-right:2rem}[class*=b3__btn-with-icon--right] .scielo__loading-inline:before [class^=material-icons]{position:absolute;top:50%;transform:translateY(-50%);width:1.25rem;height:1.25rem;font-size:1.25rem;line-height:1.25rem}[class*=b3__btn-with-icon--right] .scielo__loading-inline:before [class^=material-icons]:before{vertical-align:top}[class*=b3__btn-with-icon--right] .scielo__loading-inline:before [class^=material-icons]{right:.5rem}.btn-group-lg>.btn .scielo__loading-inline,.btn-lg .scielo__loading-inline{width:1.5rem;height:1.5rem}.btn-group-lg>.btn .scielo__loading-inline:before,.btn-lg .scielo__loading-inline:before{width:1.5rem;height:1.5rem;margin-top:-.75rem;margin-left:-.75rem}@keyframes spinner{to{transform:rotate(360deg)}}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:top;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1.2em;height:1.2em;border-width:.13em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1.2em;height:1.2em}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{animation-duration:1.5s}}[class*=" sci-ico-"],[class^=sci-ico-]{display:inline-block;font-size:24px;height:24px;line-height:1}.article-title [class*=" sci-ico-"],.article-title [class^=sci-ico-]{float:none}.article [class*=" sci-ico-"],.article [class^=sci-ico-]{vertical-align:text-bottom;margin-right:3px}.modal-body [class*=" sci-ico-"],.modal-body [class^=sci-ico-]{margin-right:0}[class*=" sci-ico-"]:before,[class^=sci-ico-]:before{font-family:'Material Icons Outlined';color:inherit}.sci-ico-top:before{content:"vertical_align_top"}.sci-ico-home:before{content:"home"}.sci-ico-zoom:before{content:"zoom_in"}.sci-ico-translation:before{content:"translate"}.sci-ico-socialEmail:before,.sci-ico-socialFacebook:before,.sci-ico-socialGooglePlus:before,.sci-ico-socialOther:before,.sci-ico-socialTwitter:before,.sci-ico-socialTwitterSingle:before{content:"share"}.sci-ico-similar:before{content:"playlist_add"}.sci-ico-newWindow:before{content:"open_in_new"}.sci-ico-metrics:before{content:"show_chart"}.sci-ico-citation:before,.sci-ico-link:before{content:"link"}.sci-ico-home:before{content:"home"}.sci-ico-floatingMenuDefault:before{content:"more_horiz"}.sci-ico-floatingMenuClose:before{content:"close"}.sci-ico-download:before,.sci-ico-fileCSV:before,.sci-ico-fileEPUB:before,.sci-ico-filePDF:before,.sci-ico-fileXML:before{content:"file_download"}.sci-ico-fileTable:before{content:"table_chart"}.sci-ico-fileFormula:before{content:"functions"}.sci-ico-figures:before,.sci-ico-fileFigure:before{content:"image"}.sci-ico-email:before,.sci-ico-emailOutlined:before{content:"email"}.sci-ico-arrowUp:before{content:"keyboard_arrow_up"}.sci-ico-arrowRight:before{content:"keyboard_arrow_right"}.sci-ico-arrowLeft:before{content:"keyboard_arrow_left"}.sci-ico-arrowDown:before{content:"keyboard_arrow_down"}.sci-ico-socialRSS:before{content:"rss_feed"}.sci-ico-pin:before{content:"location_on"}.sci-ico-copy:before{content:"content_copy"}.sci-ico-authorInstruction:before{content:"help_outline"}.sci-ico-about:before{content:"info"}.sci-ico-check:before{content:"check"}.sci-ico-top:before{content:"vertical_align_top"}.sci-ico-cc,.sci-ico-cc-by,.sci-ico-cc-nc,.sci-ico-cc-nd,.sci-ico-cc-sa,.sci-ico-cr,.sci-ico-public-domain{display:none}.scielo__sidenav__bottom-menu{display:none}@media screen and (min-width:768px){.scielo__sidenav__bottom-menu{display:block;position:fixed;transition:.5s all;left:0;bottom:0;width:16.875rem}.scielo__theme--dark .scielo__sidenav__bottom-menu{background:#414141}.scielo__sidenav__bottom-menu ul{width:16.875rem}.scielo__sidenav__bottom-menu .scielo__ico--double_arrow_left:before{transition:.25s all}}@media screen and (min-width:768px){.scielo__sidenav__header{display:grid;grid-template-columns:16.875rem auto;transition:.5s all}}.scielo__sidenav__header .scielo__sidenav__toggle{position:absolute;right:16px;top:50%;transform:translateY(-50%);padding-left:1rem;padding-right:1rem}.scielo__sidenav__header-brand,.scielo__sidenav__header-site{position:relative;padding:.75rem 1rem}.scielo__sidenav__header-brand{line-height:2.25rem;padding-left:1.3125rem}.scielo__sidenav__header-brand .scielo__logo--small{vertical-align:middle}@media screen and (min-width:768px){.scielo__sidenav__header-brand{position:fixed;top:0;z-index:2;transition:.5s all;grid-column:1;width:16.875rem;line-height:3rem}}@media screen and (min-width:768px){.scielo__sidenav__header-site{transition:.5s all;grid-column:2;display:grid;grid-template-columns:35% auto;grid-template-rows:3rem;border-bottom:1px solid #efeeec;padding-left:1.5rem;padding-right:1.5rem}}@media screen and (min-width:992px){.scielo__sidenav__header-site{grid-template-columns:45% auto;padding-left:2rem;padding-right:2rem}}@media screen and (min-width:1200px){.scielo__sidenav__header-site{padding-left:2.5rem;padding-right:2.5rem}}.scielo__sidenav__header-functions{display:grid;grid-template-columns:80% 20%;grid-template-areas:"a b" "c c"}.scielo__sidenav__header-functions .btn{margin-bottom:0}.scielo__sidenav__header-functions .btn+.badge{margin-bottom:.2rem;margin-left:-1.8rem;pointer-events:none}.scielo__sidenav__header-functions .input-group.is-search input{max-width:10.625rem}@media screen and (min-width:768px){.scielo__sidenav__header-functions .input-group.is-search input{max-width:100%}}@media screen and (min-width:768px){.scielo__sidenav__header-functions{grid-column:2;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));grid-gap:.75rem;grid-template-areas:"c b a"}}.scielo__sidenav__header-functions__item{grid-area:a;white-space:nowrap}.scielo__sidenav__header-functions__item--small{grid-area:b;text-align:right;white-space:nowrap}.scielo__sidenav__header-functions__item--large{grid-area:c;white-space:nowrap}.scielo__sidenav__header-title{font-size:1.125rem;color:#c4c4c4;border-bottom:1px solid #414141;padding-bottom:.75rem;margin-bottom:1.5rem;margin-left:-1rem;margin-right:-1rem;padding-left:1rem;padding-right:1rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media screen and (min-width:768px){.scielo__sidenav__header-title{grid-column:1;margin:0;padding:0;color:#333;font-weight:700;font-size:1.3125rem;line-height:1.25em;letter-spacing:0;font-weight:400;line-height:3rem;border-bottom:none}}@media screen and (min-width:768px){.scielo__sidenav__menu{position:fixed;left:0;top:4.5rem;bottom:3rem;transition:.5s all;overflow-y:auto;overflow-x:hidden;width:16.875rem}.scielo__sidenav__menu ul{width:16.875rem}.scielo__sidenav__menu-item{transition:.25s all;transition-delay:.5s;opacity:1;display:inline-block}}@media screen and (max-width:767px){.scielo__theme--dark .scielo__sidenav{border-bottom:1px solid #393939}}@media screen and (min-width:768px){.scielo__theme--dark .scielo__sidenav__bottom-menu,.scielo__theme--dark .scielo__sidenav__menu{border-right:1px solid #393939}}@media screen and (min-width:768px){.scielo__theme--dark .scielo__sidenav__header-brand,.scielo__theme--dark .scielo__sidenav__header-site{border-bottom:1px solid #393939}}@media screen and (max-width:767px){.scielo__theme--dark .scielo__sidenav__header-title{background:#333;color:#c4c4c4;border-bottom:1px solid #414141;margin-top:-.8rem;padding-top:.8rem}}@media screen and (max-width:767px){.scielo__sidenav+.container{padding-top:5.25rem}}@media screen and (min-width:768px){.scielo__sidenav+.container{transition:.5s all;padding-left:18.375rem;padding-right:1.5rem;max-width:100%!important}}@media screen and (min-width:992px){.scielo__sidenav+.container{padding-left:18.875rem;padding-right:2rem}}@media screen and (min-width:1200px){.scielo__sidenav+.container{padding-left:19.375rem;padding-right:2.5rem}}@media screen and (max-width:767px){.scielo__sidenav{position:fixed;top:0;width:100%;height:3.75rem;overflow:hidden;transition:.5s;z-index:9}.scielo__sidenav--opened{height:100vh;overflow:auto}.scielo__sidenav--opened .scielo__sidenav__toggle-text--closed{display:none}.scielo__sidenav--opened .scielo__sidenav__header .scielo__sidenav__toggle{padding:0;width:2rem}.scielo__sidenav--opened .scielo__sidenav__header .scielo__sidenav__toggle [class^=material-icons]{position:absolute;top:50%;transform:translateY(-50%);width:1.25rem;height:1.25rem;font-size:1.25rem;line-height:1.25rem}.scielo__sidenav--opened .scielo__sidenav__header .scielo__sidenav__toggle [class^=material-icons]:before{vertical-align:top}.scielo__sidenav--opened .scielo__sidenav__header .scielo__sidenav__toggle [class^=material-icons]{top:50%;left:50%;transform:translate(-50%,-50%)}}@media screen and (min-width:768px){.scielo__sidenav--minimized .scielo__sidenav__bottom-menu,.scielo__sidenav--minimized .scielo__sidenav__header-brand,.scielo__sidenav--minimized .scielo__sidenav__menu{overflow-x:hidden;width:4.5rem}.scielo__sidenav--minimized .scielo__sidenav__header{grid-template-columns:4.5rem auto}.scielo__sidenav--minimized .scielo__sidenav__bottom-menu .scielo__ico--double_arrow_left:before{transform:rotate(180deg)}.scielo__sidenav--minimized .scielo__sidenav__menu-item{opacity:0}}@media screen and (min-width:768px) and (min-width:768px){.scielo__sidenav--minimized+.container{padding-left:6rem}}@media screen and (min-width:768px) and (min-width:992px){.scielo__sidenav--minimized+.container{padding-left:6.5rem}}@media screen and (min-width:768px) and (min-width:1200px){.scielo__sidenav--minimized+.container{padding-left:7rem}}.scielo__text-color--light{color:#333!important}.scielo__text-color--dark{color:#c4c4c4!important}.scielo__text-color__emphasis--light{color:#00314c!important}.scielo__text-color__emphasis--dark{color:#eee!important}.scielo__text-color__subtle--light{color:#6c6b6b!important}.scielo__text-color__subtle--dark{color:#adadad!important}.scielo__text-color__menu--light{color:#fff!important}.scielo__text-color__menu--dark{color:#eee!important}.scielo__text-color__interaction--light{color:#3867ce!important}.scielo__text-color__interaction--dark{color:#86acff!important}.scielo__text-color__positive--light{color:#2c9d45!important}.scielo__text-color__positive--dark{color:#2c9d45!important}.scielo__text-color__negative--light{color:#c63800!important}.scielo__text-color__negative--dark{color:#ff7e4a!important}.scielo__bg__gray--1{background-color:#f7f6f4!important}.scielo__bg__gray--2{background-color:#efeeec!important}.scielo__bg__white--1{background-color:#393939!important}.scielo__bg__white--2{background-color:#414141!important}.scielo__border-top{border-top:2px solid #fff!important}.scielo__theme--dark .scielo__border-top{border-top-color:#eee!important}.scielo__theme--light .scielo__border-top{border-top-color:#fff!important}.scielo__border-bottom{border-bottom:2px solid #fff!important}.scielo__theme--dark .scielo__border-bottom{border-bottom-color:#eee!important}.scielo__theme--light .scielo__border-bottom{border-bottom-color:#fff!important}.scielo__padding-top{padding-top:1.5rem}.scielo__padding-top--small{padding-top:.75rem}.scielo__padding-top--large{padding-top:3rem}.scielo__padding-top--none{padding-top:0}.scielo__padding-bottom{padding-bottom:1.5rem}.scielo__padding-bottom--small{padding-bottom:.75rem}.scielo__padding-bottom--large{padding-bottom:3rem}.scielo__padding-bottom--none{padding-bottom:0}.scielo__padding-top-bottom{padding-top:1.5rem;padding-bottom:1.5rem}.scielo__padding-top-bottom--small{padding-top:.75rem;padding-bottom:.75rem}.scielo__padding-top-bottom--large{padding-top:3rem;padding-bottom:3rem}.scielo__padding-top-bottom--none{padding-top:0;padding-bottom:0}.scielo__padding-left{padding-left:1.5rem}.scielo__padding-left--small{padding-left:.75rem}.scielo__padding-left--large{padding-left:3rem}.scielo__padding-left--none{padding-left:0}.scielo__padding-right{padding-right:1.5rem}.scielo__padding-right--small{padding-right:.75rem}.scielo__padding-right--large{padding-right:3rem}.scielo__padding-right--none{padding-right:0}.scielo__padding-left-right{padding-left:1.5rem;padding-right:1.5rem}.scielo__padding-left-right--small{padding-left:.75rem;padding-right:.75rem}.scielo__padding-left-right--large{padding-left:3rem;padding-right:3rem}.scielo__padding-left-right--none{padding-left:0;padding-right:0}.scielo__margin-top{margin-top:1.5rem!important}.scielo__margin-top--small{margin-top:.75rem!important}.scielo__margin-top--large{margin-top:3rem!important}.scielo__margin-top--none{margin-top:0}.scielo__margin-bottom{margin-bottom:1.5rem!important}.scielo__margin-bottom--small{margin-bottom:.75rem!important}.scielo__margin-bottom--large{margin-bottom:3rem!important}.scielo__margin-bottom--none{margin-bottom:0}.scielo__margin-top-bottom{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.scielo__margin-top-bottom--small{margin-top:.75rem!important;margin-bottom:.75rem!important}.scielo__margin-top-bottom--large{margin-top:3rem!important;margin-bottom:3rem!important}.scielo__margin-top-bottom--none{margin-top:0!important;margin-bottom:0!important}.scielo__margin-left{margin-left:1.5rem!important}.scielo__margin-left--small{margin-left:.75rem!important}.scielo__margin-left--large{margin-left:3rem!important}.scielo__margin-left--none{margin-left:0!important}.scielo__margin-right{margin-right:1.5rem!important}.scielo__margin-right--small{margin-right:.75rem!important}.scielo__margin-right--large{margin-right:3rem!important}.scielo__margin-right--none{margin-right:0!important}.scielo__margin-left-right{margin-left:1.5rem!important;margin-right:1.5rem!important}.scielo__margin-left-right--small{margin-left:.75rem!important;margin-right:.75rem!important}.scielo__margin-left-right--large{margin-left:3rem!important;margin-right:3rem!important}.scielo__margin-left-right--none{margin-left:0!important;margin-right:0!important}@media print{.badge,.breadcrumb,.navbar.sticky-top,.scielo__levelMenu,.scielo__logo-scielo--small,.scielo__logo-scielo-caption,.scielo__logo-scielo-collection,.scielo__search-articles{-webkit-print-color-adjust:exact!important}#flDebugToolbarHandle{display:none!important}body.journal{padding:0!important}.fixed-top{position:static!important}.collection-news,.journalContent,.table-journal-list tr{break-inside:avoid!important}.scielo__shadow-2{box-shadow:none!important;border-bottom:1px solid #ddd}.bd-example .row .col-sm-9{flex:0 0 auto;width:100%}} +/*# sourceMappingURL=bootstrap.css.map */ \ No newline at end of file diff --git a/markup_doc/static/jats/jats-preview.css b/markup_doc/static/jats/jats-preview.css new file mode 100644 index 0000000..b65ee5c --- /dev/null +++ b/markup_doc/static/jats/jats-preview.css @@ -0,0 +1,216 @@ +/* Stylesheet for NLM/NCBI Journal Publishing 3.0 Preview HTML + January 2009 + + ~~~~~~~~~~~~~~ + National Center for Biotechnology Information (NCBI) + National Library of Medicine (NLM) + ~~~~~~~~~~~~~~ + +This work is in the public domain and may be reproduced, published or +otherwise used without the permission of the National Library of Medicine (NLM). + +We request only that the NLM is cited as the source of the work. + +Although all reasonable efforts have been taken to ensure the accuracy and +reliability of the software and data, the NLM and the U.S. Government do +not and cannot warrant the performance or results that may be obtained by +using this software or data. The NLM and the U.S. Government disclaim all +warranties, express or implied, including warranties of performance, +merchantability or fitness for any particular purpose. + +*/ + + +/* --------------- Page setup ------------------------ */ + +/* page and text defaults */ + +body { margin-left: 8%; + margin-right: 8%; + background-color: #f8f8f8 } + + +div > *:first-child { margin-top:0em } + +div { margin-top: 0.5em } + +div.front, div.footer { } + +.back, .body { font-family: serif } + +div.metadata { font-family: sans-serif } +div.centered { text-align: center } + +div.table { display: table } +div.metadata.table { width: 100% } +div.row { display: table-row } +div.cell { display: table-cell; padding-left: 0.25em; padding-right: 0.25em } + +div.metadata div.cell { + vertical-align: top } + +div.two-column div.cell { + width: 50% } + +div.one-column div.cell.spanning { width: 100% } + +div.metadata-group { margin-top: 0.5em; + font-size: 75% } + +div.metadata-group > p, div.metadata-group > div { margin-top: 0.5em } + +div.metadata-area * { margin: 0em } + +div.metadata-chunk { margin-left: 1em } + +div.branding { text-align: center } + +div.document-title-notes { + text-align: center; + width: 60%; + margin-left: auto; + margin-right: auto + } + +div.footnote { font-size: 90% } + +/* rules */ +hr.part-rule { + border: thin solid black; + width: 50%; + margin-top: 1em; + margin-bottom: 1em; + } + +hr.section-rule { + border: thin dotted black; + width: 50%; + margin-top: 1em; + margin-bottom: 1em; + } + +/* superior numbers that are cross-references */ +.xref { + color: red; + } + +/* generated text */ +.generated { color: gray; } + +.warning, tex-math { + font-size:80%; font-family: sans-serif } + +.warning { + color: red } + +.tex-math { color: green } + +.data { + color: black; + } + +.formula { + font-family: sans-serif; + font-size: 90% } + +/* --------------- Titling levels -------------------- */ + + +h1, h2, h3, h4, h5, h6 { + display: block; + margin-top: 0em; + margin-bottom: 0.5em; + font-family: helvetica, sans-serif; + font-weight: bold; + color: midnightblue; + } +/* titling level 1: document title */ +.document-title { + text-align: center; + } + +/* callout titles appear in a left column (table cell) + opposite what they head */ +.callout-title { text-align: right; + margin-top: 0.5em; + margin-right: 1em; + font-size: 140% } + + + +div.section, div.back-section { + margin-top: 1em; margin-bottom: 0.5em } + +div.panel { background-color: white; + font-size: 90%; + border: thin solid black; + padding-left: 0.5em; padding-right: 0.5em; + padding-top: 0.5em; padding-bottom: 0.5em; + margin-top: 0.5em; margin-bottom: 0.5em } + +div.blockquote { font-size: 90%; + margin-left: 1em; margin-right: 1em; + margin-top: 0.5em; margin-bottom: 0.5em } + +div.caption { + margin-top: 0.5em; margin-bottom: 0.5em } + +div.speech { + margin-left: 1em; margin-right: 1em; + margin-top: 0.5em; margin-bottom: 0.5em } + +div.verse-group { + margin-left: 1em; + margin-top: 0.5em; margin-bottom: 0.5em } + +div.verse-group div.verse-group { + margin-left: 1em; + margin-top: 0em; margin-bottom: 0em } + +div.note { margin-top: 0em; margin-left: 1em; + font-size: 85% } + +.ref-label { margin-top: 0em; vertical-align: top } + +.ref-content { margin-top: 0em; padding-left: 0.25em } + +h5.label { margin-top: 0em; margin-bottom: 0em } + +p { margin-top: 0.5em; margin-bottom: 0em } + +p.first { margin-top: 0em } + +p.verse-line, p.citation { margin-top: 0em; margin-bottom: 0em; margin-left: 2em; text-indent: -2em } + +p.address-line { margin-top: 0em; margin-bottom: 0em; margin-left: 2em } + +ul, ol { margin-top: 0.5em } + +li { margin-top: 0.5em; margin-bottom: 0em } +li > p { margin-top: 0.2em; margin-bottom: 0em } + +div.def-list { border-spacing: 0.25em } + +div.def-list div.cell { vertical-align: top; + border-bottom: thin solid black; + padding-bottom: 0.5em } + +div.def-list div.def-list-head { + text-align: left } + +/* text decoration */ +.label { font-weight: bold; font-family: sans-serif; font-size: 80% } + +.monospace { + font-family: monospace; + } + +.overline{ + text-decoration: overline; + } + +a { text-decoration: none } +a:hover { text-decoration: underline } + +/* ---------------- End ------------------------------ */ + diff --git a/markup_doc/static/js/scielo-bundle-min.js b/markup_doc/static/js/scielo-bundle-min.js new file mode 100644 index 0000000..655d26c --- /dev/null +++ b/markup_doc/static/js/scielo-bundle-min.js @@ -0,0 +1,2 @@ +!function(t,e){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=t.document?e(t,!0):function(t){if(t.document)return e(t);throw new Error("jQuery requires a window with a document")}:e(t)}("undefined"!=typeof window?window:this,function(_,N){"use strict";function v(t){return"function"==typeof t&&"number"!=typeof t.nodeType&&"function"!=typeof t.item}function m(t){return null!=t&&t===t.window}var e=[],I=Object.getPrototypeOf,a=e.slice,H=e.flat?function(t){return e.flat.call(t)}:function(t){return e.concat.apply([],t)},F=e.push,R=e.indexOf,q={},Y=q.toString,W=q.hasOwnProperty,B=W.toString,z=B.call(Object),g={},k=_.document,U={type:!0,src:!0,nonce:!0,noModule:!0};function G(t,e,i){var n,o,s=(i=i||k).createElement("script");if(s.text=t,e)for(n in U)(o=e[n]||e.getAttribute&&e.getAttribute(n))&&s.setAttribute(n,o);i.head.appendChild(s).parentNode.removeChild(s)}function f(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?q[Y.call(t)]||"object":typeof t}var t="3.6.3",x=function(t,e){return new x.fn.init(t,e)};function V(t){var e=!!t&&"length"in t&&t.length,i=f(t);return!v(t)&&!m(t)&&("array"===i||0===e||"number"==typeof e&&0<e&&e-1 in t)}x.fn=x.prototype={jquery:t,constructor:x,length:0,toArray:function(){return a.call(this)},get:function(t){return null==t?a.call(this):t<0?this[t+this.length]:this[t]},pushStack:function(t){t=x.merge(this.constructor(),t);return t.prevObject=this,t},each:function(t){return x.each(this,t)},map:function(i){return this.pushStack(x.map(this,function(t,e){return i.call(t,e,t)}))},slice:function(){return this.pushStack(a.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(x.grep(this,function(t,e){return(e+1)%2}))},odd:function(){return this.pushStack(x.grep(this,function(t,e){return e%2}))},eq:function(t){var e=this.length,t=+t+(t<0?e:0);return this.pushStack(0<=t&&t<e?[this[t]]:[])},end:function(){return this.prevObject||this.constructor()},push:F,sort:e.sort,splice:e.splice},x.extend=x.fn.extend=function(){var t,e,i,n,o,s=arguments[0]||{},r=1,a=arguments.length,l=!1;for("boolean"==typeof s&&(l=s,s=arguments[r]||{},r++),"object"==typeof s||v(s)||(s={}),r===a&&(s=this,r--);r<a;r++)if(null!=(t=arguments[r]))for(e in t)i=t[e],"__proto__"!==e&&s!==i&&(l&&i&&(x.isPlainObject(i)||(n=Array.isArray(i)))?(o=s[e],o=n&&!Array.isArray(o)?[]:n||x.isPlainObject(o)?o:{},n=!1,s[e]=x.extend(l,o,i)):void 0!==i&&(s[e]=i));return s},x.extend({expando:"jQuery"+(t+Math.random()).replace(/\D/g,""),isReady:!0,error:function(t){throw new Error(t)},noop:function(){},isPlainObject:function(t){return!(!t||"[object Object]"!==Y.call(t)||(t=I(t))&&("function"!=typeof(t=W.call(t,"constructor")&&t.constructor)||B.call(t)!==z))},isEmptyObject:function(t){for(var e in t)return!1;return!0},globalEval:function(t,e,i){G(t,{nonce:e&&e.nonce},i)},each:function(t,e){var i,n=0;if(V(t))for(i=t.length;n<i&&!1!==e.call(t[n],n,t[n]);n++);else for(n in t)if(!1===e.call(t[n],n,t[n]))break;return t},makeArray:function(t,e){e=e||[];return null!=t&&(V(Object(t))?x.merge(e,"string"==typeof t?[t]:t):F.call(e,t)),e},inArray:function(t,e,i){return null==e?-1:R.call(e,t,i)},merge:function(t,e){for(var i=+e.length,n=0,o=t.length;n<i;n++)t[o++]=e[n];return t.length=o,t},grep:function(t,e,i){for(var n=[],o=0,s=t.length,r=!i;o<s;o++)!e(t[o],o)!=r&&n.push(t[o]);return n},map:function(t,e,i){var n,o,s=0,r=[];if(V(t))for(n=t.length;s<n;s++)null!=(o=e(t[s],s,i))&&r.push(o);else for(s in t)null!=(o=e(t[s],s,i))&&r.push(o);return H(r)},guid:1,support:g}),"function"==typeof Symbol&&(x.fn[Symbol.iterator]=e[Symbol.iterator]),x.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(t,e){q["[object "+e+"]"]=e.toLowerCase()});function n(t,e,i){for(var n=[],o=void 0!==i;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(o&&x(t).is(i))break;n.push(t)}return n}function X(t,e){for(var i=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&i.push(t);return i}var t=function(N){function u(t,e){return t="0x"+t.slice(1)-65536,e||(t<0?String.fromCharCode(65536+t):String.fromCharCode(t>>10|55296,1023&t|56320))}function I(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t}function H(){k()}var t,h,w,s,F,p,R,q,_,l,c,k,x,i,T,f,n,o,m,S="sizzle"+ +new Date,d=N.document,C=0,Y=0,W=O(),B=O(),z=O(),g=O(),U=function(t,e){return t===e&&(c=!0),0},G={}.hasOwnProperty,e=[],V=e.pop,X=e.push,E=e.push,Z=e.slice,v=function(t,e){for(var i=0,n=t.length;i<n;i++)if(t[i]===e)return i;return-1},Q="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",r="[\\x20\\t\\r\\n\\f]",a="(?:\\\\[\\da-fA-F]{1,6}"+r+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",J="\\["+r+"*("+a+")(?:"+r+"*([*^$|!~]?=)"+r+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+a+"))|)"+r+"*\\]",K=":("+a+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+J+")*)|.*)\\)|)",tt=new RegExp(r+"+","g"),y=new RegExp("^"+r+"+|((?:^|[^\\\\])(?:\\\\.)*)"+r+"+$","g"),et=new RegExp("^"+r+"*,"+r+"*"),it=new RegExp("^"+r+"*([>+~]|"+r+")"+r+"*"),nt=new RegExp(r+"|>"),ot=new RegExp(K),st=new RegExp("^"+a+"$"),b={ID:new RegExp("^#("+a+")"),CLASS:new RegExp("^\\.("+a+")"),TAG:new RegExp("^("+a+"|[*])"),ATTR:new RegExp("^"+J),PSEUDO:new RegExp("^"+K),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+r+"*(even|odd|(([+-]|)(\\d*)n|)"+r+"*(?:([+-]|)"+r+"*(\\d+)|))"+r+"*\\)|)","i"),bool:new RegExp("^(?:"+Q+")$","i"),needsContext:new RegExp("^"+r+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+r+"*((?:-\\d)?\\d*)"+r+"*\\)|)(?=[^-]|$)","i")},rt=/HTML$/i,at=/^(?:input|select|textarea|button)$/i,lt=/^h\d$/i,D=/^[^{]+\{\s*\[native \w/,ct=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,dt=/[+~]/,A=new RegExp("\\\\[\\da-fA-F]{1,6}"+r+"?|\\\\([^\\r\\n\\f])","g"),ut=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ht=vt(function(t){return!0===t.disabled&&"fieldset"===t.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{E.apply(e=Z.call(d.childNodes),d.childNodes),e[d.childNodes.length].nodeType}catch(t){E={apply:e.length?function(t,e){X.apply(t,Z.call(e))}:function(t,e){for(var i=t.length,n=0;t[i++]=e[n++];);t.length=i-1}}}function L(e,t,i,n){var o,s,r,a,l,c,d=t&&t.ownerDocument,u=t?t.nodeType:9;if(i=i||[],"string"!=typeof e||!e||1!==u&&9!==u&&11!==u)return i;if(!n&&(k(t),t=t||x,T)){if(11!==u&&(a=ct.exec(e)))if(o=a[1]){if(9===u){if(!(c=t.getElementById(o)))return i;if(c.id===o)return i.push(c),i}else if(d&&(c=d.getElementById(o))&&m(t,c)&&c.id===o)return i.push(c),i}else{if(a[2])return E.apply(i,t.getElementsByTagName(e)),i;if((o=a[3])&&h.getElementsByClassName&&t.getElementsByClassName)return E.apply(i,t.getElementsByClassName(o)),i}if(h.qsa&&!g[e+" "]&&(!f||!f.test(e))&&(1!==u||"object"!==t.nodeName.toLowerCase())){if(c=e,d=t,1===u&&(nt.test(e)||it.test(e))){for((d=dt.test(e)&>(t.parentNode)||t)===t&&h.scope||((r=t.getAttribute("id"))?r=r.replace(ut,I):t.setAttribute("id",r=S)),s=(l=p(e)).length;s--;)l[s]=(r?"#"+r:":scope")+" "+P(l[s]);c=l.join(",")}try{if(h.cssSupportsSelector&&!CSS.supports("selector(:is("+c+"))"))throw new Error;return E.apply(i,d.querySelectorAll(c)),i}catch(t){g(e,!0)}finally{r===S&&t.removeAttribute("id")}}}return q(e.replace(y,"$1"),t,i,n)}function O(){var i=[];function n(t,e){return i.push(t+" ")>w.cacheLength&&delete n[i.shift()],n[t+" "]=e}return n}function $(t){return t[S]=!0,t}function M(t){var e=x.createElement("fieldset");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e)}}function pt(t,e){for(var i=t.split("|"),n=i.length;n--;)w.attrHandle[i[n]]=e}function ft(t,e){var i=e&&t,n=i&&1===t.nodeType&&1===e.nodeType&&t.sourceIndex-e.sourceIndex;if(n)return n;if(i)for(;i=i.nextSibling;)if(i===e)return-1;return t?1:-1}function mt(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ht(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function j(r){return $(function(s){return s=+s,$(function(t,e){for(var i,n=r([],t.length,s),o=n.length;o--;)t[i=n[o]]&&(t[i]=!(e[i]=t[i]))})})}function gt(t){return t&&void 0!==t.getElementsByTagName&&t}for(t in h=L.support={},F=L.isXML=function(t){var e=t&&t.namespaceURI,t=t&&(t.ownerDocument||t).documentElement;return!rt.test(e||t&&t.nodeName||"HTML")},k=L.setDocument=function(t){var t=t?t.ownerDocument||t:d;return t!=x&&9===t.nodeType&&t.documentElement&&(i=(x=t).documentElement,T=!F(x),d!=x&&(t=x.defaultView)&&t.top!==t&&(t.addEventListener?t.addEventListener("unload",H,!1):t.attachEvent&&t.attachEvent("onunload",H)),h.scope=M(function(t){return i.appendChild(t).appendChild(x.createElement("div")),void 0!==t.querySelectorAll&&!t.querySelectorAll(":scope fieldset div").length}),h.cssSupportsSelector=M(function(){return CSS.supports("selector(*)")&&x.querySelectorAll(":is(:jqfake)")&&!CSS.supports("selector(:is(*,:jqfake))")}),h.attributes=M(function(t){return t.className="i",!t.getAttribute("className")}),h.getElementsByTagName=M(function(t){return t.appendChild(x.createComment("")),!t.getElementsByTagName("*").length}),h.getElementsByClassName=D.test(x.getElementsByClassName),h.getById=M(function(t){return i.appendChild(t).id=S,!x.getElementsByName||!x.getElementsByName(S).length}),h.getById?(w.filter.ID=function(t){var e=t.replace(A,u);return function(t){return t.getAttribute("id")===e}},w.find.ID=function(t,e){if(void 0!==e.getElementById&&T)return(e=e.getElementById(t))?[e]:[]}):(w.filter.ID=function(t){var e=t.replace(A,u);return function(t){t=void 0!==t.getAttributeNode&&t.getAttributeNode("id");return t&&t.value===e}},w.find.ID=function(t,e){if(void 0!==e.getElementById&&T){var i,n,o,s=e.getElementById(t);if(s){if((i=s.getAttributeNode("id"))&&i.value===t)return[s];for(o=e.getElementsByName(t),n=0;s=o[n++];)if((i=s.getAttributeNode("id"))&&i.value===t)return[s]}return[]}}),w.find.TAG=h.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):h.qsa?e.querySelectorAll(t):void 0}:function(t,e){var i,n=[],o=0,s=e.getElementsByTagName(t);if("*"!==t)return s;for(;i=s[o++];)1===i.nodeType&&n.push(i);return n},w.find.CLASS=h.getElementsByClassName&&function(t,e){if(void 0!==e.getElementsByClassName&&T)return e.getElementsByClassName(t)},n=[],f=[],(h.qsa=D.test(x.querySelectorAll))&&(M(function(t){var e;i.appendChild(t).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",t.querySelectorAll("[msallowcapture^='']").length&&f.push("[*^$]="+r+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||f.push("\\["+r+"*(?:value|"+Q+")"),t.querySelectorAll("[id~="+S+"-]").length||f.push("~="),(e=x.createElement("input")).setAttribute("name",""),t.appendChild(e),t.querySelectorAll("[name='']").length||f.push("\\["+r+"*name"+r+"*="+r+"*(?:''|\"\")"),t.querySelectorAll(":checked").length||f.push(":checked"),t.querySelectorAll("a#"+S+"+*").length||f.push(".#.+[+~]"),t.querySelectorAll("\\\f"),f.push("[\\r\\n\\f]")}),M(function(t){t.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var e=x.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&f.push("name"+r+"*[*^$|!~]?="),2!==t.querySelectorAll(":enabled").length&&f.push(":enabled",":disabled"),i.appendChild(t).disabled=!0,2!==t.querySelectorAll(":disabled").length&&f.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),f.push(",.*:")})),(h.matchesSelector=D.test(o=i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.oMatchesSelector||i.msMatchesSelector))&&M(function(t){h.disconnectedMatch=o.call(t,"*"),o.call(t,"[s!='']:x"),n.push("!=",K)}),h.cssSupportsSelector||f.push(":has"),f=f.length&&new RegExp(f.join("|")),n=n.length&&new RegExp(n.join("|")),t=D.test(i.compareDocumentPosition),m=t||D.test(i.contains)?function(t,e){var i=9===t.nodeType&&t.documentElement||t,e=e&&e.parentNode;return t===e||!(!e||1!==e.nodeType||!(i.contains?i.contains(e):t.compareDocumentPosition&&16&t.compareDocumentPosition(e)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},U=t?function(t,e){var i;return t===e?(c=!0,0):(i=!t.compareDocumentPosition-!e.compareDocumentPosition)||(1&(i=(t.ownerDocument||t)==(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!h.sortDetached&&e.compareDocumentPosition(t)===i?t==x||t.ownerDocument==d&&m(d,t)?-1:e==x||e.ownerDocument==d&&m(d,e)?1:l?v(l,t)-v(l,e):0:4&i?-1:1)}:function(t,e){if(t===e)return c=!0,0;var i,n=0,o=t.parentNode,s=e.parentNode,r=[t],a=[e];if(!o||!s)return t==x?-1:e==x?1:o?-1:s?1:l?v(l,t)-v(l,e):0;if(o===s)return ft(t,e);for(i=t;i=i.parentNode;)r.unshift(i);for(i=e;i=i.parentNode;)a.unshift(i);for(;r[n]===a[n];)n++;return n?ft(r[n],a[n]):r[n]==d?-1:a[n]==d?1:0}),x},L.matches=function(t,e){return L(t,null,null,e)},L.matchesSelector=function(t,e){if(k(t),h.matchesSelector&&T&&!g[e+" "]&&(!n||!n.test(e))&&(!f||!f.test(e)))try{var i=o.call(t,e);if(i||h.disconnectedMatch||t.document&&11!==t.document.nodeType)return i}catch(t){g(e,!0)}return 0<L(e,x,null,[t]).length},L.contains=function(t,e){return(t.ownerDocument||t)!=x&&k(t),m(t,e)},L.attr=function(t,e){(t.ownerDocument||t)!=x&&k(t);var i=w.attrHandle[e.toLowerCase()],i=i&&G.call(w.attrHandle,e.toLowerCase())?i(t,e,!T):void 0;return void 0!==i?i:h.attributes||!T?t.getAttribute(e):(i=t.getAttributeNode(e))&&i.specified?i.value:null},L.escape=function(t){return(t+"").replace(ut,I)},L.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},L.uniqueSort=function(t){var e,i=[],n=0,o=0;if(c=!h.detectDuplicates,l=!h.sortStable&&t.slice(0),t.sort(U),c){for(;e=t[o++];)e===t[o]&&(n=i.push(o));for(;n--;)t.splice(i[n],1)}return l=null,t},s=L.getText=function(t){var e,i="",n=0,o=t.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)i+=s(t)}else if(3===o||4===o)return t.nodeValue}else for(;e=t[n++];)i+=s(e);return i},(w=L.selectors={cacheLength:50,createPseudo:$,match:b,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(A,u),t[3]=(t[3]||t[4]||t[5]||"").replace(A,u),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||L.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&L.error(t[0]),t},PSEUDO:function(t){var e,i=!t[6]&&t[2];return b.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":i&&ot.test(i)&&(e=(e=p(i,!0))&&i.indexOf(")",i.length-e)-i.length)&&(t[0]=t[0].slice(0,e),t[2]=i.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(A,u).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=W[t+" "];return e||(e=new RegExp("(^|"+r+")"+t+"("+r+"|$)"))&&W(t,function(t){return e.test("string"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute("class")||"")})},ATTR:function(e,i,n){return function(t){t=L.attr(t,e);return null==t?"!="===i:!i||(t+="","="===i?t===n:"!="===i?t!==n:"^="===i?n&&0===t.indexOf(n):"*="===i?n&&-1<t.indexOf(n):"$="===i?n&&t.slice(-n.length)===n:"~="===i?-1<(" "+t.replace(tt," ")+" ").indexOf(n):"|="===i&&(t===n||t.slice(0,n.length+1)===n+"-"))}},CHILD:function(f,t,e,m,g){var y="nth"!==f.slice(0,3),v="last"!==f.slice(-4),b="of-type"===t;return 1===m&&0===g?function(t){return!!t.parentNode}:function(t,e,i){var n,o,s,r,a,l,c=y!=v?"nextSibling":"previousSibling",d=t.parentNode,u=b&&t.nodeName.toLowerCase(),h=!i&&!b,p=!1;if(d){if(y){for(;c;){for(r=t;r=r[c];)if(b?r.nodeName.toLowerCase()===u:1===r.nodeType)return!1;l=c="only"===f&&!l&&"nextSibling"}return!0}if(l=[v?d.firstChild:d.lastChild],v&&h){for(p=(a=(n=(o=(s=(r=d)[S]||(r[S]={}))[r.uniqueID]||(s[r.uniqueID]={}))[f]||[])[0]===C&&n[1])&&n[2],r=a&&d.childNodes[a];r=++a&&r&&r[c]||(p=a=0,l.pop());)if(1===r.nodeType&&++p&&r===t){o[f]=[C,a,p];break}}else if(!1===(p=h?a=(n=(o=(s=(r=t)[S]||(r[S]={}))[r.uniqueID]||(s[r.uniqueID]={}))[f]||[])[0]===C&&n[1]:p))for(;(r=++a&&r&&r[c]||(p=a=0,l.pop()))&&((b?r.nodeName.toLowerCase()!==u:1!==r.nodeType)||!++p||(h&&((o=(s=r[S]||(r[S]={}))[r.uniqueID]||(s[r.uniqueID]={}))[f]=[C,p]),r!==t)););return(p-=g)===m||p%m==0&&0<=p/m}}},PSEUDO:function(t,s){var e,r=w.pseudos[t]||w.setFilters[t.toLowerCase()]||L.error("unsupported pseudo: "+t);return r[S]?r(s):1<r.length?(e=[t,t,"",s],w.setFilters.hasOwnProperty(t.toLowerCase())?$(function(t,e){for(var i,n=r(t,s),o=n.length;o--;)t[i=v(t,n[o])]=!(e[i]=n[o])}):function(t){return r(t,0,e)}):r}},pseudos:{not:$(function(t){var n=[],o=[],a=R(t.replace(y,"$1"));return a[S]?$(function(t,e,i,n){for(var o,s=a(t,null,n,[]),r=t.length;r--;)(o=s[r])&&(t[r]=!(e[r]=o))}):function(t,e,i){return n[0]=t,a(n,null,i,o),n[0]=null,!o.pop()}}),has:$(function(e){return function(t){return 0<L(e,t).length}}),contains:$(function(e){return e=e.replace(A,u),function(t){return-1<(t.textContent||s(t)).indexOf(e)}}),lang:$(function(i){return st.test(i||"")||L.error("unsupported lang: "+i),i=i.replace(A,u).toLowerCase(),function(t){var e;do{if(e=T?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(e=e.toLowerCase())===i||0===e.indexOf(i+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var e=N.location&&N.location.hash;return e&&e.slice(1)===t.id},root:function(t){return t===i},focus:function(t){return t===x.activeElement&&(!x.hasFocus||x.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:mt(!1),disabled:mt(!0),checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!w.pseudos.empty(t)},header:function(t){return lt.test(t.nodeName)},input:function(t){return at.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(t=t.getAttribute("type"))||"text"===t.toLowerCase())},first:j(function(){return[0]}),last:j(function(t,e){return[e-1]}),eq:j(function(t,e,i){return[i<0?i+e:i]}),even:j(function(t,e){for(var i=0;i<e;i+=2)t.push(i);return t}),odd:j(function(t,e){for(var i=1;i<e;i+=2)t.push(i);return t}),lt:j(function(t,e,i){for(var n=i<0?i+e:e<i?e:i;0<=--n;)t.push(n);return t}),gt:j(function(t,e,i){for(var n=i<0?i+e:i;++n<e;)t.push(n);return t})}}).pseudos.nth=w.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})w.pseudos[t]=function(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}(t);for(t in{submit:!0,reset:!0})w.pseudos[t]=function(i){return function(t){var e=t.nodeName.toLowerCase();return("input"===e||"button"===e)&&t.type===i}}(t);function yt(){}function P(t){for(var e=0,i=t.length,n="";e<i;e++)n+=t[e].value;return n}function vt(r,t,e){var a=t.dir,l=t.next,c=l||a,d=e&&"parentNode"===c,u=Y++;return t.first?function(t,e,i){for(;t=t[a];)if(1===t.nodeType||d)return r(t,e,i);return!1}:function(t,e,i){var n,o,s=[C,u];if(i){for(;t=t[a];)if((1===t.nodeType||d)&&r(t,e,i))return!0}else for(;t=t[a];)if(1===t.nodeType||d)if(o=(o=t[S]||(t[S]={}))[t.uniqueID]||(o[t.uniqueID]={}),l&&l===t.nodeName.toLowerCase())t=t[a]||t;else{if((n=o[c])&&n[0]===C&&n[1]===u)return s[2]=n[2];if((o[c]=s)[2]=r(t,e,i))return!0}return!1}}function bt(o){return 1<o.length?function(t,e,i){for(var n=o.length;n--;)if(!o[n](t,e,i))return!1;return!0}:o[0]}function wt(t,e,i,n,o){for(var s,r=[],a=0,l=t.length,c=null!=e;a<l;a++)!(s=t[a])||i&&!i(s,n,o)||(r.push(s),c&&e.push(a));return r}function _t(p,f,m,g,y,t){return g&&!g[S]&&(g=_t(g)),y&&!y[S]&&(y=_t(y,t)),$(function(t,e,i,n){var o,s,r,a=[],l=[],c=e.length,d=t||function(t,e,i){for(var n=0,o=e.length;n<o;n++)L(t,e[n],i);return i}(f||"*",i.nodeType?[i]:i,[]),u=!p||!t&&f?d:wt(d,a,p,i,n),h=m?y||(t?p:c||g)?[]:e:u;if(m&&m(u,h,i,n),g)for(o=wt(h,l),g(o,[],i,n),s=o.length;s--;)(r=o[s])&&(h[l[s]]=!(u[l[s]]=r));if(t){if(y||p){if(y){for(o=[],s=h.length;s--;)(r=h[s])&&o.push(u[s]=r);y(null,h=[],o,n)}for(s=h.length;s--;)(r=h[s])&&-1<(o=y?v(t,r):a[s])&&(t[o]=!(e[o]=r))}}else h=wt(h===e?h.splice(c,h.length):h),y?y(null,e,h,n):E.apply(e,h)})}function kt(g,y){function t(t,e,i,n,o){var s,r,a,l=0,c="0",d=t&&[],u=[],h=_,p=t||b&&w.find.TAG("*",o),f=C+=null==h?1:Math.random()||.1,m=p.length;for(o&&(_=e==x||e||o);c!==m&&null!=(s=p[c]);c++){if(b&&s){for(r=0,e||s.ownerDocument==x||(k(s),i=!T);a=g[r++];)if(a(s,e||x,i)){n.push(s);break}o&&(C=f)}v&&((s=!a&&s)&&l--,t)&&d.push(s)}if(l+=c,v&&c!==l){for(r=0;a=y[r++];)a(d,u,e,i);if(t){if(0<l)for(;c--;)d[c]||u[c]||(u[c]=V.call(n));u=wt(u)}E.apply(n,u),o&&!t&&0<u.length&&1<l+y.length&&L.uniqueSort(n)}return o&&(C=f,_=h),d}var v=0<y.length,b=0<g.length;return v?$(t):t}return yt.prototype=w.filters=w.pseudos,w.setFilters=new yt,p=L.tokenize=function(t,e){var i,n,o,s,r,a,l,c=B[t+" "];if(c)return e?0:c.slice(0);for(r=t,a=[],l=w.preFilter;r;){for(s in i&&!(n=et.exec(r))||(n&&(r=r.slice(n[0].length)||r),a.push(o=[])),i=!1,(n=it.exec(r))&&(i=n.shift(),o.push({value:i,type:n[0].replace(y," ")}),r=r.slice(i.length)),w.filter)!(n=b[s].exec(r))||l[s]&&!(n=l[s](n))||(i=n.shift(),o.push({value:i,type:s,matches:n}),r=r.slice(i.length));if(!i)break}return e?r.length:r?L.error(t):B(t,a).slice(0)},R=L.compile=function(t,e){var i,n=[],o=[],s=z[t+" "];if(!s){for(i=(e=e||p(t)).length;i--;)((s=function t(e){for(var n,i,o,s=e.length,r=w.relative[e[0].type],a=r||w.relative[" "],l=r?1:0,c=vt(function(t){return t===n},a,!0),d=vt(function(t){return-1<v(n,t)},a,!0),u=[function(t,e,i){return t=!r&&(i||e!==_)||((n=e).nodeType?c:d)(t,e,i),n=null,t}];l<s;l++)if(i=w.relative[e[l].type])u=[vt(bt(u),i)];else{if((i=w.filter[e[l].type].apply(null,e[l].matches))[S]){for(o=++l;o<s&&!w.relative[e[o].type];o++);return _t(1<l&&bt(u),1<l&&P(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(y,"$1"),i,l<o&&t(e.slice(l,o)),o<s&&t(e=e.slice(o)),o<s&&P(e))}u.push(i)}return bt(u)}(e[i]))[S]?n:o).push(s);(s=z(t,kt(o,n))).selector=t}return s},q=L.select=function(t,e,i,n){var o,s,r,a,l,c="function"==typeof t&&t,d=!n&&p(t=c.selector||t);if(i=i||[],1===d.length){if(2<(s=d[0]=d[0].slice(0)).length&&"ID"===(r=s[0]).type&&9===e.nodeType&&T&&w.relative[s[1].type]){if(!(e=(w.find.ID(r.matches[0].replace(A,u),e)||[])[0]))return i;c&&(e=e.parentNode),t=t.slice(s.shift().value.length)}for(o=b.needsContext.test(t)?0:s.length;o--&&(r=s[o],!w.relative[a=r.type]);)if((l=w.find[a])&&(n=l(r.matches[0].replace(A,u),dt.test(s[0].type)&>(e.parentNode)||e))){if(s.splice(o,1),t=n.length&&P(s))break;return E.apply(i,n),i}}return(c||R(t,d))(n,e,!T,i,!e||dt.test(t)&>(e.parentNode)||e),i},h.sortStable=S.split("").sort(U).join("")===S,h.detectDuplicates=!!c,k(),h.sortDetached=M(function(t){return 1&t.compareDocumentPosition(x.createElement("fieldset"))}),M(function(t){return t.innerHTML="<a href='#'></a>","#"===t.firstChild.getAttribute("href")})||pt("type|href|height|width",function(t,e,i){if(!i)return t.getAttribute(e,"type"===e.toLowerCase()?1:2)}),h.attributes&&M(function(t){return t.innerHTML="<input/>",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")})||pt("value",function(t,e,i){if(!i&&"input"===t.nodeName.toLowerCase())return t.defaultValue}),M(function(t){return null==t.getAttribute("disabled")})||pt(Q,function(t,e,i){if(!i)return!0===t[e]?e.toLowerCase():(i=t.getAttributeNode(e))&&i.specified?i.value:null}),L}(_),Z=(x.find=t,x.expr=t.selectors,x.expr[":"]=x.expr.pseudos,x.uniqueSort=x.unique=t.uniqueSort,x.text=t.getText,x.isXMLDoc=t.isXML,x.contains=t.contains,x.escapeSelector=t.escape,x.expr.match.needsContext);function l(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}var Q=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function J(t,i,n){return v(i)?x.grep(t,function(t,e){return!!i.call(t,e,t)!==n}):i.nodeType?x.grep(t,function(t){return t===i!==n}):"string"!=typeof i?x.grep(t,function(t){return-1<R.call(i,t)!==n}):x.filter(i,t,n)}x.filter=function(t,e,i){var n=e[0];return i&&(t=":not("+t+")"),1===e.length&&1===n.nodeType?x.find.matchesSelector(n,t)?[n]:[]:x.find.matches(t,x.grep(e,function(t){return 1===t.nodeType}))},x.fn.extend({find:function(t){var e,i,n=this.length,o=this;if("string"!=typeof t)return this.pushStack(x(t).filter(function(){for(e=0;e<n;e++)if(x.contains(o[e],this))return!0}));for(i=this.pushStack([]),e=0;e<n;e++)x.find(t,o[e],i);return 1<n?x.uniqueSort(i):i},filter:function(t){return this.pushStack(J(this,t||[],!1))},not:function(t){return this.pushStack(J(this,t||[],!0))},is:function(t){return!!J(this,"string"==typeof t&&Z.test(t)?x(t):t||[],!1).length}});var K,tt=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,et=((x.fn.init=function(t,e,i){if(t){if(i=i||K,"string"!=typeof t)return t.nodeType?(this[0]=t,this.length=1,this):v(t)?void 0!==i.ready?i.ready(t):t(x):x.makeArray(t,this);if(!(n="<"===t[0]&&">"===t[t.length-1]&&3<=t.length?[null,t,null]:tt.exec(t))||!n[1]&&e)return(!e||e.jquery?e||i:this.constructor(e)).find(t);if(n[1]){if(e=e instanceof x?e[0]:e,x.merge(this,x.parseHTML(n[1],e&&e.nodeType?e.ownerDocument||e:k,!0)),Q.test(n[1])&&x.isPlainObject(e))for(var n in e)v(this[n])?this[n](e[n]):this.attr(n,e[n])}else(i=k.getElementById(n[2]))&&(this[0]=i,this.length=1)}return this}).prototype=x.fn,K=x(k),/^(?:parents|prev(?:Until|All))/),it={children:!0,contents:!0,next:!0,prev:!0};function nt(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}x.fn.extend({has:function(t){var e=x(t,this),i=e.length;return this.filter(function(){for(var t=0;t<i;t++)if(x.contains(this,e[t]))return!0})},closest:function(t,e){var i,n=0,o=this.length,s=[],r="string"!=typeof t&&x(t);if(!Z.test(t))for(;n<o;n++)for(i=this[n];i&&i!==e;i=i.parentNode)if(i.nodeType<11&&(r?-1<r.index(i):1===i.nodeType&&x.find.matchesSelector(i,t))){s.push(i);break}return this.pushStack(1<s.length?x.uniqueSort(s):s)},index:function(t){return t?"string"==typeof t?R.call(x(t),this[0]):R.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(x.uniqueSort(x.merge(this.get(),x(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),x.each({parent:function(t){t=t.parentNode;return t&&11!==t.nodeType?t:null},parents:function(t){return n(t,"parentNode")},parentsUntil:function(t,e,i){return n(t,"parentNode",i)},next:function(t){return nt(t,"nextSibling")},prev:function(t){return nt(t,"previousSibling")},nextAll:function(t){return n(t,"nextSibling")},prevAll:function(t){return n(t,"previousSibling")},nextUntil:function(t,e,i){return n(t,"nextSibling",i)},prevUntil:function(t,e,i){return n(t,"previousSibling",i)},siblings:function(t){return X((t.parentNode||{}).firstChild,t)},children:function(t){return X(t.firstChild)},contents:function(t){return null!=t.contentDocument&&I(t.contentDocument)?t.contentDocument:(l(t,"template")&&(t=t.content||t),x.merge([],t.childNodes))}},function(n,o){x.fn[n]=function(t,e){var i=x.map(this,o,t);return(e="Until"!==n.slice(-5)?t:e)&&"string"==typeof e&&(i=x.filter(e,i)),1<this.length&&(it[n]||x.uniqueSort(i),et.test(n))&&i.reverse(),this.pushStack(i)}});var T=/[^\x20\t\r\n\f]+/g;function d(t){return t}function ot(t){throw t}function st(t,e,i,n){var o;try{t&&v(o=t.promise)?o.call(t).done(e).fail(i):t&&v(o=t.then)?o.call(t,e,i):e.apply(void 0,[t].slice(n))}catch(t){i.apply(void 0,[t])}}x.Callbacks=function(n){var t,i;n="string"==typeof n?(t=n,i={},x.each(t.match(T)||[],function(t,e){i[e]=!0}),i):x.extend({},n);function o(){for(a=a||n.once,r=s=!0;c.length;d=-1)for(e=c.shift();++d<l.length;)!1===l[d].apply(e[0],e[1])&&n.stopOnFalse&&(d=l.length,e=!1);n.memory||(e=!1),s=!1,a&&(l=e?[]:"")}var s,e,r,a,l=[],c=[],d=-1,u={add:function(){return l&&(e&&!s&&(d=l.length-1,c.push(e)),function i(t){x.each(t,function(t,e){v(e)?n.unique&&u.has(e)||l.push(e):e&&e.length&&"string"!==f(e)&&i(e)})}(arguments),e)&&!s&&o(),this},remove:function(){return x.each(arguments,function(t,e){for(var i;-1<(i=x.inArray(e,l,i));)l.splice(i,1),i<=d&&d--}),this},has:function(t){return t?-1<x.inArray(t,l):0<l.length},empty:function(){return l=l&&[],this},disable:function(){return a=c=[],l=e="",this},disabled:function(){return!l},lock:function(){return a=c=[],e||s||(l=e=""),this},locked:function(){return!!a},fireWith:function(t,e){return a||(e=[t,(e=e||[]).slice?e.slice():e],c.push(e),s)||o(),this},fire:function(){return u.fireWith(this,arguments),this},fired:function(){return!!r}};return u},x.extend({Deferred:function(t){var s=[["notify","progress",x.Callbacks("memory"),x.Callbacks("memory"),2],["resolve","done",x.Callbacks("once memory"),x.Callbacks("once memory"),0,"resolved"],["reject","fail",x.Callbacks("once memory"),x.Callbacks("once memory"),1,"rejected"]],o="pending",r={state:function(){return o},always:function(){return a.done(arguments).fail(arguments),this},catch:function(t){return r.then(null,t)},pipe:function(){var o=arguments;return x.Deferred(function(n){x.each(s,function(t,e){var i=v(o[e[4]])&&o[e[4]];a[e[1]](function(){var t=i&&i.apply(this,arguments);t&&v(t.promise)?t.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[e[0]+"With"](this,i?[t]:arguments)})}),o=null}).promise()},then:function(e,i,n){var l=0;function c(o,s,r,a){return function(){function t(){var t,e;if(!(o<l)){if((t=r.apply(i,n))===s.promise())throw new TypeError("Thenable self-resolution");e=t&&("object"==typeof t||"function"==typeof t)&&t.then,v(e)?a?e.call(t,c(l,s,d,a),c(l,s,ot,a)):(l++,e.call(t,c(l,s,d,a),c(l,s,ot,a),c(l,s,d,s.notifyWith))):(r!==d&&(i=void 0,n=[t]),(a||s.resolveWith)(i,n))}}var i=this,n=arguments,e=a?t:function(){try{t()}catch(t){x.Deferred.exceptionHook&&x.Deferred.exceptionHook(t,e.stackTrace),l<=o+1&&(r!==ot&&(i=void 0,n=[t]),s.rejectWith(i,n))}};o?e():(x.Deferred.getStackHook&&(e.stackTrace=x.Deferred.getStackHook()),_.setTimeout(e))}}return x.Deferred(function(t){s[0][3].add(c(0,t,v(n)?n:d,t.notifyWith)),s[1][3].add(c(0,t,v(e)?e:d)),s[2][3].add(c(0,t,v(i)?i:ot))}).promise()},promise:function(t){return null!=t?x.extend(t,r):r}},a={};return x.each(s,function(t,e){var i=e[2],n=e[5];r[e[1]]=i.add,n&&i.add(function(){o=n},s[3-t][2].disable,s[3-t][3].disable,s[0][2].lock,s[0][3].lock),i.add(e[3].fire),a[e[0]]=function(){return a[e[0]+"With"](this===a?void 0:this,arguments),this},a[e[0]+"With"]=i.fireWith}),r.promise(a),t&&t.call(a,a),a},when:function(t){function e(e){return function(t){o[e]=this,s[e]=1<arguments.length?a.call(arguments):t,--i||r.resolveWith(o,s)}}var i=arguments.length,n=i,o=Array(n),s=a.call(arguments),r=x.Deferred();if(i<=1&&(st(t,r.done(e(n)).resolve,r.reject,!i),"pending"===r.state()||v(s[n]&&s[n].then)))return r.then();for(;n--;)st(s[n],e(n),r.reject);return r.promise()}});var rt=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/,at=(x.Deferred.exceptionHook=function(t,e){_.console&&_.console.warn&&t&&rt.test(t.name)&&_.console.warn("jQuery.Deferred exception: "+t.message,t.stack,e)},x.readyException=function(t){_.setTimeout(function(){throw t})},x.Deferred());function lt(){k.removeEventListener("DOMContentLoaded",lt),_.removeEventListener("load",lt),x.ready()}x.fn.ready=function(t){return at.then(t).catch(function(t){x.readyException(t)}),this},x.extend({isReady:!1,readyWait:1,ready:function(t){(!0===t?--x.readyWait:x.isReady)||(x.isReady=!0)!==t&&0<--x.readyWait||at.resolveWith(k,[x])}}),x.ready.then=at.then,"complete"===k.readyState||"loading"!==k.readyState&&!k.documentElement.doScroll?_.setTimeout(x.ready):(k.addEventListener("DOMContentLoaded",lt),_.addEventListener("load",lt));function u(t,e,i,n,o,s,r){var a=0,l=t.length,c=null==i;if("object"===f(i))for(a in o=!0,i)u(t,e,a,i[a],!0,s,r);else if(void 0!==n&&(o=!0,v(n)||(r=!0),e=c?r?(e.call(t,n),null):(c=e,function(t,e,i){return c.call(x(t),i)}):e))for(;a<l;a++)e(t[a],i,r?n:n.call(t[a],a,e(t[a],i)));return o?t:c?e.call(t):l?e(t[0],i):s}var ct=/^-ms-/,dt=/-([a-z])/g;function ut(t,e){return e.toUpperCase()}function b(t){return t.replace(ct,"ms-").replace(dt,ut)}function y(t){return 1===t.nodeType||9===t.nodeType||!+t.nodeType}function ht(){this.expando=x.expando+ht.uid++}ht.uid=1,ht.prototype={cache:function(t){var e=t[this.expando];return e||(e={},y(t)&&(t.nodeType?t[this.expando]=e:Object.defineProperty(t,this.expando,{value:e,configurable:!0}))),e},set:function(t,e,i){var n,o=this.cache(t);if("string"==typeof e)o[b(e)]=i;else for(n in e)o[b(n)]=e[n];return o},get:function(t,e){return void 0===e?this.cache(t):t[this.expando]&&t[this.expando][b(e)]},access:function(t,e,i){return void 0===e||e&&"string"==typeof e&&void 0===i?this.get(t,e):(this.set(t,e,i),void 0!==i?i:e)},remove:function(t,e){var i,n=t[this.expando];if(void 0!==n){if(void 0!==e){i=(e=Array.isArray(e)?e.map(b):(e=b(e))in n?[e]:e.match(T)||[]).length;for(;i--;)delete n[e[i]]}void 0!==e&&!x.isEmptyObject(n)||(t.nodeType?t[this.expando]=void 0:delete t[this.expando])}},hasData:function(t){t=t[this.expando];return void 0!==t&&!x.isEmptyObject(t)}};var w=new ht,c=new ht,pt=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ft=/[A-Z]/g;function mt(t,e,i){var n,o;if(void 0===i&&1===t.nodeType)if(n="data-"+e.replace(ft,"-$&").toLowerCase(),"string"==typeof(i=t.getAttribute(n))){try{i="true"===(o=i)||"false"!==o&&("null"===o?null:o===+o+""?+o:pt.test(o)?JSON.parse(o):o)}catch(t){}c.set(t,e,i)}else i=void 0;return i}x.extend({hasData:function(t){return c.hasData(t)||w.hasData(t)},data:function(t,e,i){return c.access(t,e,i)},removeData:function(t,e){c.remove(t,e)},_data:function(t,e,i){return w.access(t,e,i)},_removeData:function(t,e){w.remove(t,e)}}),x.fn.extend({data:function(i,t){var e,n,o,s=this[0],r=s&&s.attributes;if(void 0!==i)return"object"==typeof i?this.each(function(){c.set(this,i)}):u(this,function(t){var e;if(s&&void 0===t)return void 0!==(e=c.get(s,i))||void 0!==(e=mt(s,i))?e:void 0;this.each(function(){c.set(this,i,t)})},null,t,1<arguments.length,null,!0);if(this.length&&(o=c.get(s),1===s.nodeType)&&!w.get(s,"hasDataAttrs")){for(e=r.length;e--;)r[e]&&0===(n=r[e].name).indexOf("data-")&&(n=b(n.slice(5)),mt(s,n,o[n]));w.set(s,"hasDataAttrs",!0)}return o},removeData:function(t){return this.each(function(){c.remove(this,t)})}}),x.extend({queue:function(t,e,i){var n;if(t)return n=w.get(t,e=(e||"fx")+"queue"),i&&(!n||Array.isArray(i)?n=w.access(t,e,x.makeArray(i)):n.push(i)),n||[]},dequeue:function(t,e){e=e||"fx";var i=x.queue(t,e),n=i.length,o=i.shift(),s=x._queueHooks(t,e);"inprogress"===o&&(o=i.shift(),n--),o&&("fx"===e&&i.unshift("inprogress"),delete s.stop,o.call(t,function(){x.dequeue(t,e)},s)),!n&&s&&s.empty.fire()},_queueHooks:function(t,e){var i=e+"queueHooks";return w.get(t,i)||w.access(t,i,{empty:x.Callbacks("once memory").add(function(){w.remove(t,[e+"queue",i])})})}}),x.fn.extend({queue:function(e,i){var t=2;return"string"!=typeof e&&(i=e,e="fx",t--),arguments.length<t?x.queue(this[0],e):void 0===i?this:this.each(function(){var t=x.queue(this,e,i);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(t){return this.each(function(){x.dequeue(this,t)})},clearQueue:function(t){return this.queue(t||"fx",[])},promise:function(t,e){function i(){--o||s.resolveWith(r,[r])}var n,o=1,s=x.Deferred(),r=this,a=this.length;for("string"!=typeof t&&(e=t,t=void 0),t=t||"fx";a--;)(n=w.get(r[a],t+"queueHooks"))&&n.empty&&(o++,n.empty.add(i));return i(),s.promise(e)}});function gt(t,e){return"none"===(t=e||t).style.display||""===t.style.display&&C(t)&&"none"===x.css(t,"display")}var t=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,yt=new RegExp("^(?:([+-])=|)("+t+")([a-z%]*)$","i"),h=["Top","Right","Bottom","Left"],S=k.documentElement,C=function(t){return x.contains(t.ownerDocument,t)},vt={composed:!0};S.getRootNode&&(C=function(t){return x.contains(t.ownerDocument,t)||t.getRootNode(vt)===t.ownerDocument});function bt(t,e,i,n){var o,s,r=20,a=n?function(){return n.cur()}:function(){return x.css(t,e,"")},l=a(),c=i&&i[3]||(x.cssNumber[e]?"":"px"),d=t.nodeType&&(x.cssNumber[e]||"px"!==c&&+l)&&yt.exec(x.css(t,e));if(d&&d[3]!==c){for(c=c||d[3],d=+(l/=2)||1;r--;)x.style(t,e,d+c),(1-s)*(1-(s=a()/l||.5))<=0&&(r=0),d/=s;x.style(t,e,(d*=2)+c),i=i||[]}return i&&(d=+d||+l||0,o=i[1]?d+(i[1]+1)*i[2]:+i[2],n)&&(n.unit=c,n.start=d,n.end=o),o}var wt={};function E(t,e){for(var i,n,o,s,r,a=[],l=0,c=t.length;l<c;l++)(n=t[l]).style&&(i=n.style.display,e?("none"===i&&(a[l]=w.get(n,"display")||null,a[l]||(n.style.display="")),""===n.style.display&>(n)&&(a[l]=(r=s=void 0,s=(o=n).ownerDocument,o=o.nodeName,(r=wt[o])||(s=s.body.appendChild(s.createElement(o)),r=x.css(s,"display"),s.parentNode.removeChild(s),wt[o]=r="none"===r?"block":r),r))):"none"!==i&&(a[l]="none",w.set(n,"display",i)));for(l=0;l<c;l++)null!=a[l]&&(t[l].style.display=a[l]);return t}x.fn.extend({show:function(){return E(this,!0)},hide:function(){return E(this)},toggle:function(t){return"boolean"==typeof t?t?this.show():this.hide():this.each(function(){gt(this)?x(this).show():x(this).hide()})}});var _t=/^(?:checkbox|radio)$/i,kt=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,xt=/^$|^module$|\/(?:java|ecma)script/i,D=($=k.createDocumentFragment().appendChild(k.createElement("div")),(s=k.createElement("input")).setAttribute("type","radio"),s.setAttribute("checked","checked"),s.setAttribute("name","t"),$.appendChild(s),g.checkClone=$.cloneNode(!0).cloneNode(!0).lastChild.checked,$.innerHTML="<textarea>x</textarea>",g.noCloneChecked=!!$.cloneNode(!0).lastChild.defaultValue,$.innerHTML="<option></option>",g.option=!!$.lastChild,{thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]});function A(t,e){var i=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||"*"):void 0!==t.querySelectorAll?t.querySelectorAll(e||"*"):[];return void 0===e||e&&l(t,e)?x.merge([t],i):i}function Tt(t,e){for(var i=0,n=t.length;i<n;i++)w.set(t[i],"globalEval",!e||w.get(e[i],"globalEval"))}D.tbody=D.tfoot=D.colgroup=D.caption=D.thead,D.th=D.td,g.option||(D.optgroup=D.option=[1,"<select multiple='multiple'>","</select>"]);var St=/<|&#?\w+;/;function Ct(t,e,i,n,o){for(var s,r,a,l,c,d=e.createDocumentFragment(),u=[],h=0,p=t.length;h<p;h++)if((s=t[h])||0===s)if("object"===f(s))x.merge(u,s.nodeType?[s]:s);else if(St.test(s)){for(r=r||d.appendChild(e.createElement("div")),a=(kt.exec(s)||["",""])[1].toLowerCase(),a=D[a]||D._default,r.innerHTML=a[1]+x.htmlPrefilter(s)+a[2],c=a[0];c--;)r=r.lastChild;x.merge(u,r.childNodes),(r=d.firstChild).textContent=""}else u.push(e.createTextNode(s));for(d.textContent="",h=0;s=u[h++];)if(n&&-1<x.inArray(s,n))o&&o.push(s);else if(l=C(s),r=A(d.appendChild(s),"script"),l&&Tt(r),i)for(c=0;s=r[c++];)xt.test(s.type||"")&&i.push(s);return d}var Et=/^([^.]*)(?:\.(.+)|)/;function i(){return!0}function p(){return!1}function Dt(t,e){return t===function(){try{return k.activeElement}catch(t){}}()==("focus"===e)}function At(t,e,i,n,o,s){var r,a;if("object"==typeof e){for(a in"string"!=typeof i&&(n=n||i,i=void 0),e)At(t,a,i,n,e[a],s);return t}if(null==n&&null==o?(o=i,n=i=void 0):null==o&&("string"==typeof i?(o=n,n=void 0):(o=n,n=i,i=void 0)),!1===o)o=p;else if(!o)return t;return 1===s&&(r=o,(o=function(t){return x().off(t),r.apply(this,arguments)}).guid=r.guid||(r.guid=x.guid++)),t.each(function(){x.event.add(this,e,o,n,i)})}function Lt(t,o,s){s?(w.set(t,o,!1),x.event.add(t,o,{namespace:!1,handler:function(t){var e,i,n=w.get(this,o);if(1&t.isTrigger&&this[o]){if(n.length)(x.event.special[o]||{}).delegateType&&t.stopPropagation();else if(n=a.call(arguments),w.set(this,o,n),e=s(this,o),this[o](),n!==(i=w.get(this,o))||e?w.set(this,o,!1):i={},n!==i)return t.stopImmediatePropagation(),t.preventDefault(),i&&i.value}else n.length&&(w.set(this,o,{value:x.event.trigger(x.extend(n[0],x.Event.prototype),n.slice(1),this)}),t.stopImmediatePropagation())}})):void 0===w.get(t,o)&&x.event.add(t,o,i)}x.event={global:{},add:function(e,t,i,n,o){var s,r,a,l,c,d,u,h,p,f=w.get(e);if(y(e))for(i.handler&&(i=(s=i).handler,o=s.selector),o&&x.find.matchesSelector(S,o),i.guid||(i.guid=x.guid++),a=(a=f.events)||(f.events=Object.create(null)),r=(r=f.handle)||(f.handle=function(t){return void 0!==x&&x.event.triggered!==t.type?x.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(T)||[""]).length;l--;)u=p=(h=Et.exec(t[l])||[])[1],h=(h[2]||"").split(".").sort(),u&&(c=x.event.special[u]||{},u=(o?c.delegateType:c.bindType)||u,c=x.event.special[u]||{},p=x.extend({type:u,origType:p,data:n,handler:i,guid:i.guid,selector:o,needsContext:o&&x.expr.match.needsContext.test(o),namespace:h.join(".")},s),(d=a[u])||((d=a[u]=[]).delegateCount=0,c.setup&&!1!==c.setup.call(e,n,h,r))||e.addEventListener&&e.addEventListener(u,r),c.add&&(c.add.call(e,p),p.handler.guid||(p.handler.guid=i.guid)),o?d.splice(d.delegateCount++,0,p):d.push(p),x.event.global[u]=!0)},remove:function(t,e,i,n,o){var s,r,a,l,c,d,u,h,p,f,m,g=w.hasData(t)&&w.get(t);if(g&&(l=g.events)){for(c=(e=(e||"").match(T)||[""]).length;c--;)if(p=m=(a=Et.exec(e[c])||[])[1],f=(a[2]||"").split(".").sort(),p){for(u=x.event.special[p]||{},h=l[p=(n?u.delegateType:u.bindType)||p]||[],a=a[2]&&new RegExp("(^|\\.)"+f.join("\\.(?:.*\\.|)")+"(\\.|$)"),r=s=h.length;s--;)d=h[s],!o&&m!==d.origType||i&&i.guid!==d.guid||a&&!a.test(d.namespace)||n&&n!==d.selector&&("**"!==n||!d.selector)||(h.splice(s,1),d.selector&&h.delegateCount--,u.remove&&u.remove.call(t,d));r&&!h.length&&(u.teardown&&!1!==u.teardown.call(t,f,g.handle)||x.removeEvent(t,p,g.handle),delete l[p])}else for(p in l)x.event.remove(t,p+e[c],i,n,!0);x.isEmptyObject(l)&&w.remove(t,"handle events")}},dispatch:function(t){var e,i,n,o,s,r=new Array(arguments.length),a=x.event.fix(t),t=(w.get(this,"events")||Object.create(null))[a.type]||[],l=x.event.special[a.type]||{};for(r[0]=a,e=1;e<arguments.length;e++)r[e]=arguments[e];if(a.delegateTarget=this,!l.preDispatch||!1!==l.preDispatch.call(this,a)){for(s=x.event.handlers.call(this,a,t),e=0;(n=s[e++])&&!a.isPropagationStopped();)for(a.currentTarget=n.elem,i=0;(o=n.handlers[i++])&&!a.isImmediatePropagationStopped();)a.rnamespace&&!1!==o.namespace&&!a.rnamespace.test(o.namespace)||(a.handleObj=o,a.data=o.data,void 0!==(o=((x.event.special[o.origType]||{}).handle||o.handler).apply(n.elem,r))&&!1===(a.result=o)&&(a.preventDefault(),a.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,a),a.result}},handlers:function(t,e){var i,n,o,s,r,a=[],l=e.delegateCount,c=t.target;if(l&&c.nodeType&&!("click"===t.type&&1<=t.button))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==t.type||!0!==c.disabled)){for(s=[],r={},i=0;i<l;i++)void 0===r[o=(n=e[i]).selector+" "]&&(r[o]=n.needsContext?-1<x(o,this).index(c):x.find(o,this,null,[c]).length),r[o]&&s.push(n);s.length&&a.push({elem:c,handlers:s})}return c=this,l<e.length&&a.push({elem:c,handlers:e.slice(l)}),a},addProp:function(e,t){Object.defineProperty(x.Event.prototype,e,{enumerable:!0,configurable:!0,get:v(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(t){return t[x.expando]?t:new x.Event(t)},special:{load:{noBubble:!0},click:{setup:function(t){t=this||t;return _t.test(t.type)&&t.click&&l(t,"input")&&Lt(t,"click",i),!1},trigger:function(t){t=this||t;return _t.test(t.type)&&t.click&&l(t,"input")&&Lt(t,"click"),!0},_default:function(t){t=t.target;return _t.test(t.type)&&t.click&&l(t,"input")&&w.get(t,"click")||l(t,"a")}},beforeunload:{postDispatch:function(t){void 0!==t.result&&t.originalEvent&&(t.originalEvent.returnValue=t.result)}}}},x.removeEvent=function(t,e,i){t.removeEventListener&&t.removeEventListener(e,i)},x.Event=function(t,e){if(!(this instanceof x.Event))return new x.Event(t,e);t&&t.type?(this.originalEvent=t,this.type=t.type,this.isDefaultPrevented=t.defaultPrevented||void 0===t.defaultPrevented&&!1===t.returnValue?i:p,this.target=t.target&&3===t.target.nodeType?t.target.parentNode:t.target,this.currentTarget=t.currentTarget,this.relatedTarget=t.relatedTarget):this.type=t,e&&x.extend(this,e),this.timeStamp=t&&t.timeStamp||Date.now(),this[x.expando]=!0},x.Event.prototype={constructor:x.Event,isDefaultPrevented:p,isPropagationStopped:p,isImmediatePropagationStopped:p,isSimulated:!1,preventDefault:function(){var t=this.originalEvent;this.isDefaultPrevented=i,t&&!this.isSimulated&&t.preventDefault()},stopPropagation:function(){var t=this.originalEvent;this.isPropagationStopped=i,t&&!this.isSimulated&&t.stopPropagation()},stopImmediatePropagation:function(){var t=this.originalEvent;this.isImmediatePropagationStopped=i,t&&!this.isSimulated&&t.stopImmediatePropagation(),this.stopPropagation()}},x.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},x.event.addProp),x.each({focus:"focusin",blur:"focusout"},function(e,t){x.event.special[e]={setup:function(){return Lt(this,e,Dt),!1},trigger:function(){return Lt(this,e),!0},_default:function(t){return w.get(t.target,e)},delegateType:t}}),x.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(t,o){x.event.special[t]={delegateType:o,bindType:o,handle:function(t){var e,i=t.relatedTarget,n=t.handleObj;return i&&(i===this||x.contains(this,i))||(t.type=n.origType,e=n.handler.apply(this,arguments),t.type=o),e}}}),x.fn.extend({on:function(t,e,i,n){return At(this,t,e,i,n)},one:function(t,e,i,n){return At(this,t,e,i,n,1)},off:function(t,e,i){var n,o;if(t&&t.preventDefault&&t.handleObj)n=t.handleObj,x(t.delegateTarget).off(n.namespace?n.origType+"."+n.namespace:n.origType,n.selector,n.handler);else{if("object"!=typeof t)return!1!==e&&"function"!=typeof e||(i=e,e=void 0),!1===i&&(i=p),this.each(function(){x.event.remove(this,t,i,e)});for(o in t)this.off(o,e,t[o])}return this}});var Ot=/<script|<style|<link/i,$t=/checked\s*(?:[^=]|=\s*.checked.)/i,Mt=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function jt(t,e){return l(t,"table")&&l(11!==e.nodeType?e:e.firstChild,"tr")&&x(t).children("tbody")[0]||t}function Pt(t){return t.type=(null!==t.getAttribute("type"))+"/"+t.type,t}function Nt(t){return"true/"===(t.type||"").slice(0,5)?t.type=t.type.slice(5):t.removeAttribute("type"),t}function It(t,e){var i,n,o,s;if(1===e.nodeType){if(w.hasData(t)&&(s=w.get(t).events))for(o in w.remove(e,"handle events"),s)for(i=0,n=s[o].length;i<n;i++)x.event.add(e,o,s[o][i]);c.hasData(t)&&(t=c.access(t),t=x.extend({},t),c.set(e,t))}}function L(i,n,o,s){n=H(n);var t,e,r,a,l,c,d=0,u=i.length,h=u-1,p=n[0],f=v(p);if(f||1<u&&"string"==typeof p&&!g.checkClone&&$t.test(p))return i.each(function(t){var e=i.eq(t);f&&(n[0]=p.call(this,t,e.html())),L(e,n,o,s)});if(u&&(e=(t=Ct(n,i[0].ownerDocument,!1,i,s)).firstChild,1===t.childNodes.length&&(t=e),e||s)){for(a=(r=x.map(A(t,"script"),Pt)).length;d<u;d++)l=t,d!==h&&(l=x.clone(l,!0,!0),a)&&x.merge(r,A(l,"script")),o.call(i[d],l,d);if(a)for(c=r[r.length-1].ownerDocument,x.map(r,Nt),d=0;d<a;d++)l=r[d],xt.test(l.type||"")&&!w.access(l,"globalEval")&&x.contains(c,l)&&(l.src&&"module"!==(l.type||"").toLowerCase()?x._evalUrl&&!l.noModule&&x._evalUrl(l.src,{nonce:l.nonce||l.getAttribute("nonce")},c):G(l.textContent.replace(Mt,""),l,c))}return i}function Ht(t,e,i){for(var n,o=e?x.filter(e,t):t,s=0;null!=(n=o[s]);s++)i||1!==n.nodeType||x.cleanData(A(n)),n.parentNode&&(i&&C(n)&&Tt(A(n,"script")),n.parentNode.removeChild(n));return t}x.extend({htmlPrefilter:function(t){return t},clone:function(t,e,i){var n,o,s,r,a,l,c,d=t.cloneNode(!0),u=C(t);if(!(g.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||x.isXMLDoc(t)))for(r=A(d),n=0,o=(s=A(t)).length;n<o;n++)a=s[n],l=r[n],c=void 0,"input"===(c=l.nodeName.toLowerCase())&&_t.test(a.type)?l.checked=a.checked:"input"!==c&&"textarea"!==c||(l.defaultValue=a.defaultValue);if(e)if(i)for(s=s||A(t),r=r||A(d),n=0,o=s.length;n<o;n++)It(s[n],r[n]);else It(t,d);return 0<(r=A(d,"script")).length&&Tt(r,!u&&A(t,"script")),d},cleanData:function(t){for(var e,i,n,o=x.event.special,s=0;void 0!==(i=t[s]);s++)if(y(i)){if(e=i[w.expando]){if(e.events)for(n in e.events)o[n]?x.event.remove(i,n):x.removeEvent(i,n,e.handle);i[w.expando]=void 0}i[c.expando]&&(i[c.expando]=void 0)}}}),x.fn.extend({detach:function(t){return Ht(this,t,!0)},remove:function(t){return Ht(this,t)},text:function(t){return u(this,function(t){return void 0===t?x.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)})},null,t,arguments.length)},append:function(){return L(this,arguments,function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||jt(this,t).appendChild(t)})},prepend:function(){return L(this,arguments,function(t){var e;1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(e=jt(this,t)).insertBefore(t,e.firstChild)})},before:function(){return L(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return L(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(x.cleanData(A(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return x.clone(this,t,e)})},html:function(t){return u(this,function(t){var e=this[0]||{},i=0,n=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!Ot.test(t)&&!D[(kt.exec(t)||["",""])[1].toLowerCase()]){t=x.htmlPrefilter(t);try{for(;i<n;i++)1===(e=this[i]||{}).nodeType&&(x.cleanData(A(e,!1)),e.innerHTML=t);e=0}catch(t){}}e&&this.empty().append(t)},null,t,arguments.length)},replaceWith:function(){var i=[];return L(this,arguments,function(t){var e=this.parentNode;x.inArray(this,i)<0&&(x.cleanData(A(this)),e)&&e.replaceChild(t,this)},i)}}),x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(t,r){x.fn[t]=function(t){for(var e,i=[],n=x(t),o=n.length-1,s=0;s<=o;s++)e=s===o?this:this.clone(!0),x(n[s])[r](e),F.apply(i,e.get());return this.pushStack(i)}});function Ft(t){var e=t.ownerDocument.defaultView;return(e=e&&e.opener?e:_).getComputedStyle(t)}function Rt(t,e,i){var n,o={};for(n in e)o[n]=t.style[n],t.style[n]=e[n];for(n in i=i.call(t),e)t.style[n]=o[n];return i}var qt,Yt,Wt,Bt,zt,Ut,Gt,o,Vt=new RegExp("^("+t+")(?!px)[a-z%]+$","i"),Xt=/^--/,Zt=new RegExp(h.join("|"),"i"),s="[\\x20\\t\\r\\n\\f]",Qt=new RegExp("^"+s+"+|((?:^|[^\\\\])(?:\\\\.)*)"+s+"+$","g");function Jt(){var t;o&&(Gt.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",o.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",S.appendChild(Gt).appendChild(o),t=_.getComputedStyle(o),qt="1%"!==t.top,Ut=12===Kt(t.marginLeft),o.style.right="60%",Bt=36===Kt(t.right),Yt=36===Kt(t.width),o.style.position="absolute",Wt=12===Kt(o.offsetWidth/3),S.removeChild(Gt),o=null)}function Kt(t){return Math.round(parseFloat(t))}function te(t,e,i){var n,o=Xt.test(e),s=t.style;return(i=i||Ft(t))&&(n=i.getPropertyValue(e)||i[e],""!==(n=o?n&&(n.replace(Qt,"$1")||void 0):n)||C(t)||(n=x.style(t,e)),!g.pixelBoxStyles())&&Vt.test(n)&&Zt.test(e)&&(o=s.width,t=s.minWidth,e=s.maxWidth,s.minWidth=s.maxWidth=s.width=n,n=i.width,s.width=o,s.minWidth=t,s.maxWidth=e),void 0!==n?n+"":n}function ee(t,e){return{get:function(){if(!t())return(this.get=e).apply(this,arguments);delete this.get}}}Gt=k.createElement("div"),(o=k.createElement("div")).style&&(o.style.backgroundClip="content-box",o.cloneNode(!0).style.backgroundClip="",g.clearCloneStyle="content-box"===o.style.backgroundClip,x.extend(g,{boxSizingReliable:function(){return Jt(),Yt},pixelBoxStyles:function(){return Jt(),Bt},pixelPosition:function(){return Jt(),qt},reliableMarginLeft:function(){return Jt(),Ut},scrollboxSize:function(){return Jt(),Wt},reliableTrDimensions:function(){var t,e,i;return null==zt&&(t=k.createElement("table"),e=k.createElement("tr"),i=k.createElement("div"),t.style.cssText="position:absolute;left:-11111px;border-collapse:separate",e.style.cssText="border:1px solid",e.style.height="1px",i.style.height="9px",i.style.display="block",S.appendChild(t).appendChild(e).appendChild(i),i=_.getComputedStyle(e),zt=parseInt(i.height,10)+parseInt(i.borderTopWidth,10)+parseInt(i.borderBottomWidth,10)===e.offsetHeight,S.removeChild(t)),zt}}));var ie=["Webkit","Moz","ms"],ne=k.createElement("div").style,oe={};function se(t){var e=x.cssProps[t]||oe[t];return e||(t in ne?t:oe[t]=function(t){for(var e=t[0].toUpperCase()+t.slice(1),i=ie.length;i--;)if((t=ie[i]+e)in ne)return t}(t)||t)}var re=/^(none|table(?!-c[ea]).+)/,ae={position:"absolute",visibility:"hidden",display:"block"},le={letterSpacing:"0",fontWeight:"400"};function ce(t,e,i){var n=yt.exec(e);return n?Math.max(0,n[2]-(i||0))+(n[3]||"px"):e}function de(t,e,i,n,o,s){var r="width"===e?1:0,a=0,l=0;if(i===(n?"border":"content"))return 0;for(;r<4;r+=2)"margin"===i&&(l+=x.css(t,i+h[r],!0,o)),n?("content"===i&&(l-=x.css(t,"padding"+h[r],!0,o)),"margin"!==i&&(l-=x.css(t,"border"+h[r]+"Width",!0,o))):(l+=x.css(t,"padding"+h[r],!0,o),"padding"!==i?l+=x.css(t,"border"+h[r]+"Width",!0,o):a+=x.css(t,"border"+h[r]+"Width",!0,o));return!n&&0<=s&&(l+=Math.max(0,Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-s-l-a-.5))||0),l}function ue(t,e,i){var n=Ft(t),o=(!g.boxSizingReliable()||i)&&"border-box"===x.css(t,"boxSizing",!1,n),s=o,r=te(t,e,n),a="offset"+e[0].toUpperCase()+e.slice(1);if(Vt.test(r)){if(!i)return r;r="auto"}return(!g.boxSizingReliable()&&o||!g.reliableTrDimensions()&&l(t,"tr")||"auto"===r||!parseFloat(r)&&"inline"===x.css(t,"display",!1,n))&&t.getClientRects().length&&(o="border-box"===x.css(t,"boxSizing",!1,n),s=a in t)&&(r=t[a]),(r=parseFloat(r)||0)+de(t,e,i||(o?"border":"content"),s,n,r)+"px"}function r(t,e,i,n,o){return new r.prototype.init(t,e,i,n,o)}x.extend({cssHooks:{opacity:{get:function(t,e){if(e)return""===(e=te(t,"opacity"))?"1":e}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(t,e,i,n){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var o,s,r,a=b(e),l=Xt.test(e),c=t.style;if(l||(e=se(a)),r=x.cssHooks[e]||x.cssHooks[a],void 0===i)return r&&"get"in r&&void 0!==(o=r.get(t,!1,n))?o:c[e];"string"===(s=typeof i)&&(o=yt.exec(i))&&o[1]&&(i=bt(t,e,o),s="number"),null==i||i!=i||("number"!==s||l||(i+=o&&o[3]||(x.cssNumber[a]?"":"px")),g.clearCloneStyle||""!==i||0!==e.indexOf("background")||(c[e]="inherit"),r&&"set"in r&&void 0===(i=r.set(t,i,n)))||(l?c.setProperty(e,i):c[e]=i)}},css:function(t,e,i,n){var o,s=b(e);return Xt.test(e)||(e=se(s)),"normal"===(o=void 0===(o=(s=x.cssHooks[e]||x.cssHooks[s])&&"get"in s?s.get(t,!0,i):o)?te(t,e,n):o)&&e in le&&(o=le[e]),(""===i||i)&&(s=parseFloat(o),!0===i||isFinite(s))?s||0:o}}),x.each(["height","width"],function(t,r){x.cssHooks[r]={get:function(t,e,i){if(e)return!re.test(x.css(t,"display"))||t.getClientRects().length&&t.getBoundingClientRect().width?ue(t,r,i):Rt(t,ae,function(){return ue(t,r,i)})},set:function(t,e,i){var n=Ft(t),o=!g.scrollboxSize()&&"absolute"===n.position,s=(o||i)&&"border-box"===x.css(t,"boxSizing",!1,n),i=i?de(t,r,i,s,n):0;return s&&o&&(i-=Math.ceil(t["offset"+r[0].toUpperCase()+r.slice(1)]-parseFloat(n[r])-de(t,r,"border",!1,n)-.5)),i&&(s=yt.exec(e))&&"px"!==(s[3]||"px")&&(t.style[r]=e,e=x.css(t,r)),ce(0,e,i)}}}),x.cssHooks.marginLeft=ee(g.reliableMarginLeft,function(t,e){if(e)return(parseFloat(te(t,"marginLeft"))||t.getBoundingClientRect().left-Rt(t,{marginLeft:0},function(){return t.getBoundingClientRect().left}))+"px"}),x.each({margin:"",padding:"",border:"Width"},function(o,s){x.cssHooks[o+s]={expand:function(t){for(var e=0,i={},n="string"==typeof t?t.split(" "):[t];e<4;e++)i[o+h[e]+s]=n[e]||n[e-2]||n[0];return i}},"margin"!==o&&(x.cssHooks[o+s].set=ce)}),x.fn.extend({css:function(t,e){return u(this,function(t,e,i){var n,o,s={},r=0;if(Array.isArray(e)){for(n=Ft(t),o=e.length;r<o;r++)s[e[r]]=x.css(t,e[r],!1,n);return s}return void 0!==i?x.style(t,e,i):x.css(t,e)},t,e,1<arguments.length)}}),((x.Tween=r).prototype={constructor:r,init:function(t,e,i,n,o,s){this.elem=t,this.prop=i,this.easing=o||x.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=n,this.unit=s||(x.cssNumber[i]?"":"px")},cur:function(){var t=r.propHooks[this.prop];return(t&&t.get?t:r.propHooks._default).get(this)},run:function(t){var e,i=r.propHooks[this.prop];return this.options.duration?this.pos=e=x.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),(i&&i.set?i:r.propHooks._default).set(this),this}}).init.prototype=r.prototype,(r.propHooks={_default:{get:function(t){return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(t=x.css(t.elem,t.prop,""))&&"auto"!==t?t:0},set:function(t){x.fx.step[t.prop]?x.fx.step[t.prop](t):1!==t.elem.nodeType||!x.cssHooks[t.prop]&&null==t.elem.style[se(t.prop)]?t.elem[t.prop]=t.now:x.style(t.elem,t.prop,t.now+t.unit)}}}).scrollTop=r.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},x.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:"swing"},x.fx=r.prototype.init,x.fx.step={};var O,he,$,pe=/^(?:toggle|show|hide)$/,fe=/queueHooks$/;function me(){he&&(!1===k.hidden&&_.requestAnimationFrame?_.requestAnimationFrame(me):_.setTimeout(me,x.fx.interval),x.fx.tick())}function ge(){return _.setTimeout(function(){O=void 0}),O=Date.now()}function ye(t,e){var i,n=0,o={height:t};for(e=e?1:0;n<4;n+=2-e)o["margin"+(i=h[n])]=o["padding"+i]=t;return e&&(o.opacity=o.width=t),o}function ve(t,e,i){for(var n,o=(M.tweeners[e]||[]).concat(M.tweeners["*"]),s=0,r=o.length;s<r;s++)if(n=o[s].call(i,e,t))return n}function M(o,t,e){var i,s,n,r,a,l,c,d=0,u=M.prefilters.length,h=x.Deferred().always(function(){delete p.elem}),p=function(){if(!s){for(var t=O||ge(),t=Math.max(0,f.startTime+f.duration-t),e=1-(t/f.duration||0),i=0,n=f.tweens.length;i<n;i++)f.tweens[i].run(e);if(h.notifyWith(o,[f,e,t]),e<1&&n)return t;n||h.notifyWith(o,[f,1,0]),h.resolveWith(o,[f])}return!1},f=h.promise({elem:o,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{},easing:x.easing._default},e),originalProperties:t,originalOptions:e,startTime:O||ge(),duration:e.duration,tweens:[],createTween:function(t,e){e=x.Tween(o,f.opts,t,e,f.opts.specialEasing[t]||f.opts.easing);return f.tweens.push(e),e},stop:function(t){var e=0,i=t?f.tweens.length:0;if(!s){for(s=!0;e<i;e++)f.tweens[e].run(1);t?(h.notifyWith(o,[f,1,0]),h.resolveWith(o,[f,t])):h.rejectWith(o,[f,t])}return this}}),m=f.props,g=m,y=f.opts.specialEasing;for(n in g)if(a=y[r=b(n)],l=g[n],Array.isArray(l)&&(a=l[1],l=g[n]=l[0]),n!==r&&(g[r]=l,delete g[n]),(c=x.cssHooks[r])&&"expand"in c)for(n in l=c.expand(l),delete g[r],l)n in g||(g[n]=l[n],y[n]=a);else y[r]=a;for(;d<u;d++)if(i=M.prefilters[d].call(f,o,m,f.opts))return v(i.stop)&&(x._queueHooks(f.elem,f.opts.queue).stop=i.stop.bind(i)),i;return x.map(m,ve,f),v(f.opts.start)&&f.opts.start.call(o,f),f.progress(f.opts.progress).done(f.opts.done,f.opts.complete).fail(f.opts.fail).always(f.opts.always),x.fx.timer(x.extend(p,{elem:o,anim:f,queue:f.opts.queue})),f}x.Animation=x.extend(M,{tweeners:{"*":[function(t,e){var i=this.createTween(t,e);return bt(i.elem,t,yt.exec(e),i),i}]},tweener:function(t,e){for(var i,n=0,o=(t=v(t)?(e=t,["*"]):t.match(T)).length;n<o;n++)i=t[n],M.tweeners[i]=M.tweeners[i]||[],M.tweeners[i].unshift(e)},prefilters:[function(t,e,i){var n,o,s,r,a,l,c,d="width"in e||"height"in e,u=this,h={},p=t.style,f=t.nodeType&>(t),m=w.get(t,"fxshow");for(n in i.queue||(null==(r=x._queueHooks(t,"fx")).unqueued&&(r.unqueued=0,a=r.empty.fire,r.empty.fire=function(){r.unqueued||a()}),r.unqueued++,u.always(function(){u.always(function(){r.unqueued--,x.queue(t,"fx").length||r.empty.fire()})})),e)if(o=e[n],pe.test(o)){if(delete e[n],s=s||"toggle"===o,o===(f?"hide":"show")){if("show"!==o||!m||void 0===m[n])continue;f=!0}h[n]=m&&m[n]||x.style(t,n)}if((l=!x.isEmptyObject(e))||!x.isEmptyObject(h))for(n in d&&1===t.nodeType&&(i.overflow=[p.overflow,p.overflowX,p.overflowY],null==(c=m&&m.display)&&(c=w.get(t,"display")),"none"===(d=x.css(t,"display"))&&(c?d=c:(E([t],!0),c=t.style.display||c,d=x.css(t,"display"),E([t]))),"inline"===d||"inline-block"===d&&null!=c)&&"none"===x.css(t,"float")&&(l||(u.done(function(){p.display=c}),null==c&&(d=p.display,c="none"===d?"":d)),p.display="inline-block"),i.overflow&&(p.overflow="hidden",u.always(function(){p.overflow=i.overflow[0],p.overflowX=i.overflow[1],p.overflowY=i.overflow[2]})),l=!1,h)l||(m?"hidden"in m&&(f=m.hidden):m=w.access(t,"fxshow",{display:c}),s&&(m.hidden=!f),f&&E([t],!0),u.done(function(){for(n in f||E([t]),w.remove(t,"fxshow"),h)x.style(t,n,h[n])})),l=ve(f?m[n]:0,n,u),n in m||(m[n]=l.start,f&&(l.end=l.start,l.start=0))}],prefilter:function(t,e){e?M.prefilters.unshift(t):M.prefilters.push(t)}}),x.speed=function(t,e,i){var n=t&&"object"==typeof t?x.extend({},t):{complete:i||!i&&e||v(t)&&t,duration:t,easing:i&&e||e&&!v(e)&&e};return x.fx.off?n.duration=0:"number"!=typeof n.duration&&(n.duration in x.fx.speeds?n.duration=x.fx.speeds[n.duration]:n.duration=x.fx.speeds._default),null!=n.queue&&!0!==n.queue||(n.queue="fx"),n.old=n.complete,n.complete=function(){v(n.old)&&n.old.call(this),n.queue&&x.dequeue(this,n.queue)},n},x.fn.extend({fadeTo:function(t,e,i,n){return this.filter(gt).css("opacity",0).show().end().animate({opacity:e},t,i,n)},animate:function(e,t,i,n){function o(){var t=M(this,x.extend({},e),r);(s||w.get(this,"finish"))&&t.stop(!0)}var s=x.isEmptyObject(e),r=x.speed(t,i,n);return o.finish=o,s||!1===r.queue?this.each(o):this.queue(r.queue,o)},stop:function(o,t,s){function r(t){var e=t.stop;delete t.stop,e(s)}return"string"!=typeof o&&(s=t,t=o,o=void 0),t&&this.queue(o||"fx",[]),this.each(function(){var t=!0,e=null!=o&&o+"queueHooks",i=x.timers,n=w.get(this);if(e)n[e]&&n[e].stop&&r(n[e]);else for(e in n)n[e]&&n[e].stop&&fe.test(e)&&r(n[e]);for(e=i.length;e--;)i[e].elem!==this||null!=o&&i[e].queue!==o||(i[e].anim.stop(s),t=!1,i.splice(e,1));!t&&s||x.dequeue(this,o)})},finish:function(r){return!1!==r&&(r=r||"fx"),this.each(function(){var t,e=w.get(this),i=e[r+"queue"],n=e[r+"queueHooks"],o=x.timers,s=i?i.length:0;for(e.finish=!0,x.queue(this,r,[]),n&&n.stop&&n.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===r&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<s;t++)i[t]&&i[t].finish&&i[t].finish.call(this);delete e.finish})}}),x.each(["toggle","show","hide"],function(t,n){var o=x.fn[n];x.fn[n]=function(t,e,i){return null==t||"boolean"==typeof t?o.apply(this,arguments):this.animate(ye(n,!0),t,e,i)}}),x.each({slideDown:ye("show"),slideUp:ye("hide"),slideToggle:ye("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(t,n){x.fn[t]=function(t,e,i){return this.animate(n,t,e,i)}}),x.timers=[],x.fx.tick=function(){var t,e=0,i=x.timers;for(O=Date.now();e<i.length;e++)(t=i[e])()||i[e]!==t||i.splice(e--,1);i.length||x.fx.stop(),O=void 0},x.fx.timer=function(t){x.timers.push(t),x.fx.start()},x.fx.interval=13,x.fx.start=function(){he||(he=!0,me())},x.fx.stop=function(){he=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fn.delay=function(n,t){return n=x.fx&&x.fx.speeds[n]||n,this.queue(t=t||"fx",function(t,e){var i=_.setTimeout(t,n);e.stop=function(){_.clearTimeout(i)}})},$=k.createElement("input"),t=k.createElement("select").appendChild(k.createElement("option")),$.type="checkbox",g.checkOn=""!==$.value,g.optSelected=t.selected,($=k.createElement("input")).value="t",$.type="radio",g.radioValue="t"===$.value;var be,we=x.expr.attrHandle,_e=(x.fn.extend({attr:function(t,e){return u(this,x.attr,t,e,1<arguments.length)},removeAttr:function(t){return this.each(function(){x.removeAttr(this,t)})}}),x.extend({attr:function(t,e,i){var n,o,s=t.nodeType;if(3!==s&&8!==s&&2!==s)return void 0===t.getAttribute?x.prop(t,e,i):(1===s&&x.isXMLDoc(t)||(o=x.attrHooks[e.toLowerCase()]||(x.expr.match.bool.test(e)?be:void 0)),void 0!==i?null===i?void x.removeAttr(t,e):o&&"set"in o&&void 0!==(n=o.set(t,i,e))?n:(t.setAttribute(e,i+""),i):!(o&&"get"in o&&null!==(n=o.get(t,e)))&&null==(n=x.find.attr(t,e))?void 0:n)},attrHooks:{type:{set:function(t,e){var i;if(!g.radioValue&&"radio"===e&&l(t,"input"))return i=t.value,t.setAttribute("type",e),i&&(t.value=i),e}}},removeAttr:function(t,e){var i,n=0,o=e&&e.match(T);if(o&&1===t.nodeType)for(;i=o[n++];)t.removeAttribute(i)}}),be={set:function(t,e,i){return!1===e?x.removeAttr(t,i):t.setAttribute(i,i),i}},x.each(x.expr.match.bool.source.match(/\w+/g),function(t,e){var r=we[e]||x.find.attr;we[e]=function(t,e,i){var n,o,s=e.toLowerCase();return i||(o=we[s],we[s]=n,n=null!=r(t,e,i)?s:null,we[s]=o),n}}),/^(?:input|select|textarea|button)$/i),ke=/^(?:a|area)$/i;function j(t){return(t.match(T)||[]).join(" ")}function P(t){return t.getAttribute&&t.getAttribute("class")||""}function xe(t){return Array.isArray(t)?t:"string"==typeof t&&t.match(T)||[]}x.fn.extend({prop:function(t,e){return u(this,x.prop,t,e,1<arguments.length)},removeProp:function(t){return this.each(function(){delete this[x.propFix[t]||t]})}}),x.extend({prop:function(t,e,i){var n,o,s=t.nodeType;if(3!==s&&8!==s&&2!==s)return 1===s&&x.isXMLDoc(t)||(e=x.propFix[e]||e,o=x.propHooks[e]),void 0!==i?o&&"set"in o&&void 0!==(n=o.set(t,i,e))?n:t[e]=i:o&&"get"in o&&null!==(n=o.get(t,e))?n:t[e]},propHooks:{tabIndex:{get:function(t){var e=x.find.attr(t,"tabindex");return e?parseInt(e,10):_e.test(t.nodeName)||ke.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),g.optSelected||(x.propHooks.selected={get:function(t){t=t.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(t){t=t.parentNode;t&&(t.selectedIndex,t.parentNode)&&t.parentNode.selectedIndex}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.fn.extend({addClass:function(e){var t,i,n,o,s,r;return v(e)?this.each(function(t){x(this).addClass(e.call(this,t,P(this)))}):(t=xe(e)).length?this.each(function(){if(n=P(this),i=1===this.nodeType&&" "+j(n)+" "){for(s=0;s<t.length;s++)o=t[s],i.indexOf(" "+o+" ")<0&&(i+=o+" ");r=j(i),n!==r&&this.setAttribute("class",r)}}):this},removeClass:function(e){var t,i,n,o,s,r;return v(e)?this.each(function(t){x(this).removeClass(e.call(this,t,P(this)))}):arguments.length?(t=xe(e)).length?this.each(function(){if(n=P(this),i=1===this.nodeType&&" "+j(n)+" "){for(s=0;s<t.length;s++)for(o=t[s];-1<i.indexOf(" "+o+" ");)i=i.replace(" "+o+" "," ");r=j(i),n!==r&&this.setAttribute("class",r)}}):this:this.attr("class","")},toggleClass:function(e,i){var t,n,o,s,r=typeof e,a="string"==r||Array.isArray(e);return v(e)?this.each(function(t){x(this).toggleClass(e.call(this,t,P(this),i),i)}):"boolean"==typeof i&&a?i?this.addClass(e):this.removeClass(e):(t=xe(e),this.each(function(){if(a)for(s=x(this),o=0;o<t.length;o++)n=t[o],s.hasClass(n)?s.removeClass(n):s.addClass(n);else void 0!==e&&"boolean"!=r||((n=P(this))&&w.set(this,"__className__",n),this.setAttribute&&this.setAttribute("class",!n&&!1!==e&&w.get(this,"__className__")||""))}))},hasClass:function(t){for(var e,i=0,n=" "+t+" ";e=this[i++];)if(1===e.nodeType&&-1<(" "+j(P(e))+" ").indexOf(n))return!0;return!1}});function Te(t){t.stopPropagation()}var Se=/\r/g,Ce=(x.fn.extend({val:function(e){var i,t,n,o=this[0];return arguments.length?(n=v(e),this.each(function(t){1!==this.nodeType||(null==(t=n?e.call(this,t,x(this).val()):e)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=x.map(t,function(t){return null==t?"":t+""})),(i=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()])&&"set"in i&&void 0!==i.set(this,t,"value"))||(this.value=t)})):o?(i=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()])&&"get"in i&&void 0!==(t=i.get(o,"value"))?t:"string"==typeof(t=o.value)?t.replace(Se,""):null==t?"":t:void 0}}),x.extend({valHooks:{option:{get:function(t){var e=x.find.attr(t,"value");return null!=e?e:j(x.text(t))}},select:{get:function(t){for(var e,i=t.options,n=t.selectedIndex,o="select-one"===t.type,s=o?null:[],r=o?n+1:i.length,a=n<0?r:o?n:0;a<r;a++)if(((e=i[a]).selected||a===n)&&!e.disabled&&(!e.parentNode.disabled||!l(e.parentNode,"optgroup"))){if(e=x(e).val(),o)return e;s.push(e)}return s},set:function(t,e){for(var i,n,o=t.options,s=x.makeArray(e),r=o.length;r--;)((n=o[r]).selected=-1<x.inArray(x.valHooks.option.get(n),s))&&(i=!0);return i||(t.selectedIndex=-1),s}}}}),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=-1<x.inArray(x(t).val(),e)}},g.checkOn||(x.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})}),g.focusin="onfocusin"in _,/^(?:focusinfocus|focusoutblur)$/),Ee=(x.extend(x.event,{trigger:function(t,e,i,n){var o,s,r,a,l,c,d,u=[i||k],h=W.call(t,"type")?t.type:t,p=W.call(t,"namespace")?t.namespace.split("."):[],f=d=s=i=i||k;if(3!==i.nodeType&&8!==i.nodeType&&!Ce.test(h+x.event.triggered)&&(-1<h.indexOf(".")&&(h=(p=h.split(".")).shift(),p.sort()),a=h.indexOf(":")<0&&"on"+h,(t=t[x.expando]?t:new x.Event(h,"object"==typeof t&&t)).isTrigger=n?2:3,t.namespace=p.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),e=null==e?[t]:x.makeArray(e,[t]),c=x.event.special[h]||{},n||!c.trigger||!1!==c.trigger.apply(i,e))){if(!n&&!c.noBubble&&!m(i)){for(r=c.delegateType||h,Ce.test(r+h)||(f=f.parentNode);f;f=f.parentNode)u.push(f),s=f;s===(i.ownerDocument||k)&&u.push(s.defaultView||s.parentWindow||_)}for(o=0;(f=u[o++])&&!t.isPropagationStopped();)d=f,t.type=1<o?r:c.bindType||h,(l=(w.get(f,"events")||Object.create(null))[t.type]&&w.get(f,"handle"))&&l.apply(f,e),(l=a&&f[a])&&l.apply&&y(f)&&(t.result=l.apply(f,e),!1===t.result)&&t.preventDefault();return t.type=h,n||t.isDefaultPrevented()||c._default&&!1!==c._default.apply(u.pop(),e)||!y(i)||a&&v(i[h])&&!m(i)&&((s=i[a])&&(i[a]=null),x.event.triggered=h,t.isPropagationStopped()&&d.addEventListener(h,Te),i[h](),t.isPropagationStopped()&&d.removeEventListener(h,Te),x.event.triggered=void 0,s)&&(i[a]=s),t.result}},simulate:function(t,e,i){i=x.extend(new x.Event,i,{type:t,isSimulated:!0});x.event.trigger(i,null,e)}}),x.fn.extend({trigger:function(t,e){return this.each(function(){x.event.trigger(t,e,this)})},triggerHandler:function(t,e){var i=this[0];if(i)return x.event.trigger(t,e,i,!0)}}),g.focusin||x.each({focus:"focusin",blur:"focusout"},function(i,n){function o(t){x.event.simulate(n,t.target,x.event.fix(t))}x.event.special[n]={setup:function(){var t=this.ownerDocument||this.document||this,e=w.access(t,n);e||t.addEventListener(i,o,!0),w.access(t,n,(e||0)+1)},teardown:function(){var t=this.ownerDocument||this.document||this,e=w.access(t,n)-1;e?w.access(t,n,e):(t.removeEventListener(i,o,!0),w.remove(t,n))}}}),_.location),De={guid:Date.now()},Ae=/\?/,Le=(x.parseXML=function(t){var e,i;if(!t||"string"!=typeof t)return null;try{e=(new _.DOMParser).parseFromString(t,"text/xml")}catch(t){}return i=e&&e.getElementsByTagName("parsererror")[0],e&&!i||x.error("Invalid XML: "+(i?x.map(i.childNodes,function(t){return t.textContent}).join("\n"):t)),e},/\[\]$/),Oe=/\r?\n/g,$e=/^(?:submit|button|image|reset|file)$/i,Me=/^(?:input|select|textarea|keygen)/i;x.param=function(t,e){function i(t,e){e=v(e)?e():e,o[o.length]=encodeURIComponent(t)+"="+encodeURIComponent(null==e?"":e)}var n,o=[];if(null==t)return"";if(Array.isArray(t)||t.jquery&&!x.isPlainObject(t))x.each(t,function(){i(this.name,this.value)});else for(n in t)!function i(n,t,o,s){if(Array.isArray(t))x.each(t,function(t,e){o||Le.test(n)?s(n,e):i(n+"["+("object"==typeof e&&null!=e?t:"")+"]",e,o,s)});else if(o||"object"!==f(t))s(n,t);else for(var e in t)i(n+"["+e+"]",t[e],o,s)}(n,t[n],e,i);return o.join("&")},x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=x.prop(this,"elements");return t?x.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!x(this).is(":disabled")&&Me.test(this.nodeName)&&!$e.test(t)&&(this.checked||!_t.test(t))}).map(function(t,e){var i=x(this).val();return null==i?null:Array.isArray(i)?x.map(i,function(t){return{name:e.name,value:t.replace(Oe,"\r\n")}}):{name:e.name,value:i.replace(Oe,"\r\n")}}).get()}});var je=/%20/g,Pe=/#.*$/,Ne=/([?&])_=[^&]*/,Ie=/^(.*?):[ \t]*([^\r\n]*)$/gm,He=/^(?:GET|HEAD)$/,Fe=/^\/\//,Re={},qe={},Ye="*/".concat("*"),We=k.createElement("a");function Be(s){return function(t,e){"string"!=typeof t&&(e=t,t="*");var i,n=0,o=t.toLowerCase().match(T)||[];if(v(e))for(;i=o[n++];)"+"===i[0]?(i=i.slice(1)||"*",(s[i]=s[i]||[]).unshift(e)):(s[i]=s[i]||[]).push(e)}}function ze(e,n,o,s){var r={},a=e===qe;function l(t){var i;return r[t]=!0,x.each(e[t]||[],function(t,e){e=e(n,o,s);return"string"!=typeof e||a||r[e]?a?!(i=e):void 0:(n.dataTypes.unshift(e),l(e),!1)}),i}return l(n.dataTypes[0])||!r["*"]&&l("*")}function Ue(t,e){var i,n,o=x.ajaxSettings.flatOptions||{};for(i in e)void 0!==e[i]&&((o[i]?t:n=n||{})[i]=e[i]);return n&&x.extend(!0,t,n),t}We.href=Ee.href,x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ee.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Ee.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Ye,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?Ue(Ue(t,x.ajaxSettings),e):Ue(x.ajaxSettings,t)},ajaxPrefilter:Be(Re),ajaxTransport:Be(qe),ajax:function(t,e){"object"==typeof t&&(e=t,t=void 0);var l,c,d,i,u,h,p,n,f=x.ajaxSetup({},e=e||{}),m=f.context||f,g=f.context&&(m.nodeType||m.jquery)?x(m):x.event,y=x.Deferred(),v=x.Callbacks("once memory"),b=f.statusCode||{},o={},s={},r="canceled",w={readyState:0,getResponseHeader:function(t){var e;if(h){if(!i)for(i={};e=Ie.exec(d);)i[e[1].toLowerCase()+" "]=(i[e[1].toLowerCase()+" "]||[]).concat(e[2]);e=i[t.toLowerCase()+" "]}return null==e?null:e.join(", ")},getAllResponseHeaders:function(){return h?d:null},setRequestHeader:function(t,e){return null==h&&(t=s[t.toLowerCase()]=s[t.toLowerCase()]||t,o[t]=e),this},overrideMimeType:function(t){return null==h&&(f.mimeType=t),this},statusCode:function(t){if(t)if(h)w.always(t[w.status]);else for(var e in t)b[e]=[b[e],t[e]];return this},abort:function(t){t=t||r;return l&&l.abort(t),a(0,t),this}};if(y.promise(w),f.url=((t||f.url||Ee.href)+"").replace(Fe,Ee.protocol+"//"),f.type=e.method||e.type||f.method||f.type,f.dataTypes=(f.dataType||"*").toLowerCase().match(T)||[""],null==f.crossDomain){t=k.createElement("a");try{t.href=f.url,t.href=t.href,f.crossDomain=We.protocol+"//"+We.host!=t.protocol+"//"+t.host}catch(t){f.crossDomain=!0}}if(f.data&&f.processData&&"string"!=typeof f.data&&(f.data=x.param(f.data,f.traditional)),ze(Re,f,e,w),!h){for(n in(p=x.event&&f.global)&&0==x.active++&&x.event.trigger("ajaxStart"),f.type=f.type.toUpperCase(),f.hasContent=!He.test(f.type),c=f.url.replace(Pe,""),f.hasContent?f.data&&f.processData&&0===(f.contentType||"").indexOf("application/x-www-form-urlencoded")&&(f.data=f.data.replace(je,"+")):(t=f.url.slice(c.length),f.data&&(f.processData||"string"==typeof f.data)&&(c+=(Ae.test(c)?"&":"?")+f.data,delete f.data),!1===f.cache&&(c=c.replace(Ne,"$1"),t=(Ae.test(c)?"&":"?")+"_="+De.guid+++t),f.url=c+t),f.ifModified&&(x.lastModified[c]&&w.setRequestHeader("If-Modified-Since",x.lastModified[c]),x.etag[c])&&w.setRequestHeader("If-None-Match",x.etag[c]),(f.data&&f.hasContent&&!1!==f.contentType||e.contentType)&&w.setRequestHeader("Content-Type",f.contentType),w.setRequestHeader("Accept",f.dataTypes[0]&&f.accepts[f.dataTypes[0]]?f.accepts[f.dataTypes[0]]+("*"!==f.dataTypes[0]?", "+Ye+"; q=0.01":""):f.accepts["*"]),f.headers)w.setRequestHeader(n,f.headers[n]);if(f.beforeSend&&(!1===f.beforeSend.call(m,w,f)||h))return w.abort();if(r="abort",v.add(f.complete),w.done(f.success),w.fail(f.error),l=ze(qe,f,e,w)){if(w.readyState=1,p&&g.trigger("ajaxSend",[w,f]),h)return w;f.async&&0<f.timeout&&(u=_.setTimeout(function(){w.abort("timeout")},f.timeout));try{h=!1,l.send(o,a)}catch(t){if(h)throw t;a(-1,t)}}else a(-1,"No Transport")}return w;function a(t,e,i,n){var o,s,r,a=e;h||(h=!0,u&&_.clearTimeout(u),l=void 0,d=n||"",w.readyState=0<t?4:0,n=200<=t&&t<300||304===t,i&&(r=function(t,e,i){for(var n,o,s,r,a=t.contents,l=t.dataTypes;"*"===l[0];)l.shift(),void 0===n&&(n=t.mimeType||e.getResponseHeader("Content-Type"));if(n)for(o in a)if(a[o]&&a[o].test(n)){l.unshift(o);break}if(l[0]in i)s=l[0];else{for(o in i){if(!l[0]||t.converters[o+" "+l[0]]){s=o;break}r=r||o}s=s||r}if(s)return s!==l[0]&&l.unshift(s),i[s]}(f,w,i)),!n&&-1<x.inArray("script",f.dataTypes)&&x.inArray("json",f.dataTypes)<0&&(f.converters["text script"]=function(){}),r=function(t,e,i,n){var o,s,r,a,l,c={},d=t.dataTypes.slice();if(d[1])for(r in t.converters)c[r.toLowerCase()]=t.converters[r];for(s=d.shift();s;)if(t.responseFields[s]&&(i[t.responseFields[s]]=e),!l&&n&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),l=s,s=d.shift())if("*"===s)s=l;else if("*"!==l&&l!==s){if(!(r=c[l+" "+s]||c["* "+s]))for(o in c)if((a=o.split(" "))[1]===s&&(r=c[l+" "+a[0]]||c["* "+a[0]])){!0===r?r=c[o]:!0!==c[o]&&(s=a[0],d.unshift(a[1]));break}if(!0!==r)if(r&&t.throws)e=r(e);else try{e=r(e)}catch(t){return{state:"parsererror",error:r?t:"No conversion from "+l+" to "+s}}}return{state:"success",data:e}}(f,r,w,n),n?(f.ifModified&&((i=w.getResponseHeader("Last-Modified"))&&(x.lastModified[c]=i),i=w.getResponseHeader("etag"))&&(x.etag[c]=i),204===t||"HEAD"===f.type?a="nocontent":304===t?a="notmodified":(a=r.state,o=r.data,n=!(s=r.error))):(s=a,!t&&a||(a="error",t<0&&(t=0))),w.status=t,w.statusText=(e||a)+"",n?y.resolveWith(m,[o,a,w]):y.rejectWith(m,[w,a,s]),w.statusCode(b),b=void 0,p&&g.trigger(n?"ajaxSuccess":"ajaxError",[w,f,n?o:s]),v.fireWith(m,[w,a]),p&&(g.trigger("ajaxComplete",[w,f]),--x.active||x.event.trigger("ajaxStop")))}},getJSON:function(t,e,i){return x.get(t,e,i,"json")},getScript:function(t,e){return x.get(t,void 0,e,"script")}}),x.each(["get","post"],function(t,o){x[o]=function(t,e,i,n){return v(e)&&(n=n||i,i=e,e=void 0),x.ajax(x.extend({url:t,type:o,dataType:n,data:e,success:i},x.isPlainObject(t)&&t))}}),x.ajaxPrefilter(function(t){for(var e in t.headers)"content-type"===e.toLowerCase()&&(t.contentType=t.headers[e]||"")}),x._evalUrl=function(t,e,i){return x.ajax({url:t,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(t){x.globalEval(t,e,i)}})},x.fn.extend({wrapAll:function(t){return this[0]&&(v(t)&&(t=t.call(this[0])),t=x(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t}).append(this)),this},wrapInner:function(i){return v(i)?this.each(function(t){x(this).wrapInner(i.call(this,t))}):this.each(function(){var t=x(this),e=t.contents();e.length?e.wrapAll(i):t.append(i)})},wrap:function(e){var i=v(e);return this.each(function(t){x(this).wrapAll(i?e.call(this,t):e)})},unwrap:function(t){return this.parent(t).not("body").each(function(){x(this).replaceWith(this.childNodes)}),this}}),x.expr.pseudos.hidden=function(t){return!x.expr.pseudos.visible(t)},x.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)},x.ajaxSettings.xhr=function(){try{return new _.XMLHttpRequest}catch(t){}};var Ge={0:200,1223:204},Ve=x.ajaxSettings.xhr(),Xe=(g.cors=!!Ve&&"withCredentials"in Ve,g.ajax=Ve=!!Ve,x.ajaxTransport(function(o){var s,r;if(g.cors||Ve&&!o.crossDomain)return{send:function(t,e){var i,n=o.xhr();if(n.open(o.type,o.url,o.async,o.username,o.password),o.xhrFields)for(i in o.xhrFields)n[i]=o.xhrFields[i];for(i in o.mimeType&&n.overrideMimeType&&n.overrideMimeType(o.mimeType),o.crossDomain||t["X-Requested-With"]||(t["X-Requested-With"]="XMLHttpRequest"),t)n.setRequestHeader(i,t[i]);s=function(t){return function(){s&&(s=r=n.onload=n.onerror=n.onabort=n.ontimeout=n.onreadystatechange=null,"abort"===t?n.abort():"error"===t?"number"!=typeof n.status?e(0,"error"):e(n.status,n.statusText):e(Ge[n.status]||n.status,n.statusText,"text"!==(n.responseType||"text")||"string"!=typeof n.responseText?{binary:n.response}:{text:n.responseText},n.getAllResponseHeaders()))}},n.onload=s(),r=n.onerror=n.ontimeout=s("error"),void 0!==n.onabort?n.onabort=r:n.onreadystatechange=function(){4===n.readyState&&_.setTimeout(function(){s&&r()})},s=s("abort");try{n.send(o.hasContent&&o.data||null)}catch(t){if(s)throw t}},abort:function(){s&&s()}}}),x.ajaxPrefilter(function(t){t.crossDomain&&(t.contents.script=!1)}),x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return x.globalEval(t),t}}}),x.ajaxPrefilter("script",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")}),x.ajaxTransport("script",function(i){var n,o;if(i.crossDomain||i.scriptAttrs)return{send:function(t,e){n=x("<script>").attr(i.scriptAttrs||{}).prop({charset:i.scriptCharset,src:i.url}).on("load error",o=function(t){n.remove(),o=null,t&&e("error"===t.type?404:200,t.type)}),k.head.appendChild(n[0])},abort:function(){o&&o()}}}),[]),Ze=/(=)\?(?=&|$)|\?\?/,Qe=(x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var t=Xe.pop()||x.expando+"_"+De.guid++;return this[t]=!0,t}}),x.ajaxPrefilter("json jsonp",function(t,e,i){var n,o,s,r=!1!==t.jsonp&&(Ze.test(t.url)?"url":"string"==typeof t.data&&0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ze.test(t.data)&&"data");if(r||"jsonp"===t.dataTypes[0])return n=t.jsonpCallback=v(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,r?t[r]=t[r].replace(Ze,"$1"+n):!1!==t.jsonp&&(t.url+=(Ae.test(t.url)?"&":"?")+t.jsonp+"="+n),t.converters["script json"]=function(){return s||x.error(n+" was not called"),s[0]},t.dataTypes[0]="json",o=_[n],_[n]=function(){s=arguments},i.always(function(){void 0===o?x(_).removeProp(n):_[n]=o,t[n]&&(t.jsonpCallback=e.jsonpCallback,Xe.push(n)),s&&v(o)&&o(s[0]),s=o=void 0}),"script"}),g.createHTMLDocument=((s=k.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===s.childNodes.length),x.parseHTML=function(t,e,i){var n;return"string"!=typeof t?[]:("boolean"==typeof e&&(i=e,e=!1),e||(g.createHTMLDocument?((n=(e=k.implementation.createHTMLDocument("")).createElement("base")).href=k.location.href,e.head.appendChild(n)):e=k),n=!i&&[],(i=Q.exec(t))?[e.createElement(i[1])]:(i=Ct([t],e,n),n&&n.length&&x(n).remove(),x.merge([],i.childNodes)))},x.fn.load=function(t,e,i){var n,o,s,r=this,a=t.indexOf(" ");return-1<a&&(n=j(t.slice(a)),t=t.slice(0,a)),v(e)?(i=e,e=void 0):e&&"object"==typeof e&&(o="POST"),0<r.length&&x.ajax({url:t,type:o||"GET",dataType:"html",data:e}).done(function(t){s=arguments,r.html(n?x("<div>").append(x.parseHTML(t)).find(n):t)}).always(i&&function(t,e){r.each(function(){i.apply(this,s||[t.responseText,e,t])})}),this},x.expr.pseudos.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length},x.offset={setOffset:function(t,e,i){var n,o,s,r,a=x.css(t,"position"),l=x(t),c={};"static"===a&&(t.style.position="relative"),s=l.offset(),n=x.css(t,"top"),r=x.css(t,"left"),a=("absolute"===a||"fixed"===a)&&-1<(n+r).indexOf("auto")?(o=(a=l.position()).top,a.left):(o=parseFloat(n)||0,parseFloat(r)||0),null!=(e=v(e)?e.call(t,i,x.extend({},s)):e).top&&(c.top=e.top-s.top+o),null!=e.left&&(c.left=e.left-s.left+a),"using"in e?e.using.call(t,c):l.css(c)}},x.fn.extend({offset:function(e){var t,i;return arguments.length?void 0===e?this:this.each(function(t){x.offset.setOffset(this,e,t)}):(i=this[0])?i.getClientRects().length?(t=i.getBoundingClientRect(),i=i.ownerDocument.defaultView,{top:t.top+i.pageYOffset,left:t.left+i.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var t,e,i,n=this[0],o={top:0,left:0};if("fixed"===x.css(n,"position"))e=n.getBoundingClientRect();else{for(e=this.offset(),i=n.ownerDocument,t=n.offsetParent||i.documentElement;t&&(t===i.body||t===i.documentElement)&&"static"===x.css(t,"position");)t=t.parentNode;t&&t!==n&&1===t.nodeType&&((o=x(t).offset()).top+=x.css(t,"borderTopWidth",!0),o.left+=x.css(t,"borderLeftWidth",!0))}return{top:e.top-o.top-x.css(n,"marginTop",!0),left:e.left-o.left-x.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent;t&&"static"===x.css(t,"position");)t=t.offsetParent;return t||S})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,o){var s="pageYOffset"===o;x.fn[e]=function(t){return u(this,function(t,e,i){var n;if(m(t)?n=t:9===t.nodeType&&(n=t.defaultView),void 0===i)return n?n[o]:t[e];n?n.scrollTo(s?n.pageXOffset:i,s?i:n.pageYOffset):t[e]=i},e,t,arguments.length)}}),x.each(["top","left"],function(t,i){x.cssHooks[i]=ee(g.pixelPosition,function(t,e){if(e)return e=te(t,i),Vt.test(e)?x(t).position()[i]+"px":e})}),x.each({Height:"height",Width:"width"},function(r,a){x.each({padding:"inner"+r,content:a,"":"outer"+r},function(n,s){x.fn[s]=function(t,e){var i=arguments.length&&(n||"boolean"!=typeof t),o=n||(!0===t||!0===e?"margin":"border");return u(this,function(t,e,i){var n;return m(t)?0===s.indexOf("outer")?t["inner"+r]:t.document.documentElement["client"+r]:9===t.nodeType?(n=t.documentElement,Math.max(t.body["scroll"+r],n["scroll"+r],t.body["offset"+r],n["offset"+r],n["client"+r])):void 0===i?x.css(t,e,o):x.style(t,e,i,o)},a,i?t:void 0,i)}})}),x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(t,e){x.fn[e]=function(t){return this.on(e,t)}}),x.fn.extend({bind:function(t,e,i){return this.on(t,null,e,i)},unbind:function(t,e){return this.off(t,null,e)},delegate:function(t,e,i,n){return this.on(e,t,i,n)},undelegate:function(t,e,i){return 1===arguments.length?this.off(t,"**"):this.off(e,t||"**",i)},hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)}}),x.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(t,i){x.fn[i]=function(t,e){return 0<arguments.length?this.on(i,null,t,e):this.trigger(i)}}),/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g),Je=(x.proxy=function(t,e){var i,n;if("string"==typeof e&&(n=t[e],e=t,t=n),v(t))return i=a.call(arguments,2),(n=function(){return t.apply(e||this,i.concat(a.call(arguments)))}).guid=t.guid=t.guid||x.guid++,n},x.holdReady=function(t){t?x.readyWait++:x.ready(!0)},x.isArray=Array.isArray,x.parseJSON=JSON.parse,x.nodeName=l,x.isFunction=v,x.isWindow=m,x.camelCase=b,x.type=f,x.now=Date.now,x.isNumeric=function(t){var e=x.type(t);return("number"===e||"string"===e)&&!isNaN(t-parseFloat(t))},x.trim=function(t){return null==t?"":(t+"").replace(Qe,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}),_.jQuery),Ke=_.$;return x.noConflict=function(t){return _.$===x&&(_.$=Ke),t&&_.jQuery===x&&(_.jQuery=Je),x},void 0===N&&(_.jQuery=_.$=x),x}),!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,function(){"use strict";const N="transitionend",I=t=>{for(;t+=Math.floor(1e6*Math.random()),document.getElementById(t););return t},H=e=>{let i=e.getAttribute("data-bs-target");if(!i||"#"===i){let t=e.getAttribute("href");if(!t||!t.includes("#")&&!t.startsWith("."))return null;t.includes("#")&&!t.startsWith("#")&&(t="#"+t.split("#")[1]),i=t&&"#"!==t?t.trim():null}return i},F=t=>{t=H(t);return t&&document.querySelector(t)?t:null},o=t=>{t=H(t);return t?document.querySelector(t):null},d=t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);var t=Number.parseFloat(e),n=Number.parseFloat(i);return t||n?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0},R=t=>{t.dispatchEvent(new Event(N))},r=t=>(t[0]||t).nodeType,u=(e,t)=>{let i=!1;t+=5;e.addEventListener(N,function t(){i=!0,e.removeEventListener(N,t)}),setTimeout(()=>{i||R(e)},t)},i=(n,o,s)=>{Object.keys(s).forEach(t=>{var e=s[t],i=o[t],i=i&&r(i)?"element":null==(i=i)?""+i:{}.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(e).test(i))throw new TypeError(n.toUpperCase()+": "+`Option "${t}" provided type "${i}" `+`but expected type "${e}".`)})},q=t=>{var e;return!!t&&!!(t.style&&t.parentNode&&t.parentNode.style)&&(e=getComputedStyle(t),t=getComputedStyle(t.parentNode),"none"!==e.display)&&"none"!==t.display&&"hidden"!==e.visibility},Y=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),W=t=>{var e;return document.documentElement.attachShadow?"function"==typeof t.getRootNode?(e=t.getRootNode())instanceof ShadowRoot?e:null:t instanceof ShadowRoot?t:t.parentNode?W(t.parentNode):null:null},B=()=>function(){},z=t=>t.offsetHeight,U=()=>{var t=window["jQuery"];return t&&!document.body.hasAttribute("data-bs-no-jquery")?t:null},e=()=>"rtl"===document.documentElement.dir;var t=(i,n)=>{var t;t=()=>{const t=U();if(t){const e=t.fn[i];t.fn[i]=n.jQueryInterface,t.fn[i].Constructor=n,t.fn[i].noConflict=()=>(t.fn[i]=e,n.jQueryInterface)}},"loading"===document.readyState?document.addEventListener("DOMContentLoaded",t):t()};const n=new Map;var G=function(t,e,i){n.has(t)||n.set(t,new Map);t=n.get(t);t.has(e)||0===t.size?t.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(t.keys())[0]}.`)},a=function(t,e){return n.has(t)&&n.get(t).get(e)||null},V=function(t,e){var i;n.has(t)&&((i=n.get(t)).delete(e),0===i.size)&&n.delete(t)};const X=/[^.]*(?=\..*)\.|.*/,Z=/\..*/,Q=/::\d+$/,J={};let K=1;const tt={mouseenter:"mouseover",mouseleave:"mouseout"},et=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function it(t,e){return e&&e+"::"+K++||t.uidEvent||K++}function nt(t){var e=it(t);return t.uidEvent=e,J[e]=J[e]||{},J[e]}function ot(i,n,o=null){var s=Object.keys(i);for(let t=0,e=s.length;t<e;t++){var r=i[s[t]];if(r.originalHandler===n&&r.delegationSelector===o)return r}return null}function st(t,e,i){var n="string"==typeof e,i=n?i:e;let o=t.replace(Z,"");e=tt[o],e&&(o=e),e=et.has(o);return[n,i,o=e?o:t]}function rt(t,e,i,n,o){var s,r,a,l,c,d,u,h,p,f;"string"==typeof e&&t&&(i||(i=n,n=null),[s,r,a]=st(e,i,n),(c=ot(l=(l=nt(t))[a]||(l[a]={}),r,s?i:null))?c.oneOff=c.oneOff&&o:(c=it(r,e.replace(X,"")),(e=s?(h=t,p=i,f=n,function i(n){var o=h.querySelectorAll(p);for(let e=n["target"];e&&e!==this;e=e.parentNode)for(let t=o.length;t--;)if(o[t]===e)return n.delegateTarget=e,i.oneOff&&m.off(h,n.type,f),f.apply(e,[n]);return null}):(d=t,u=i,function t(e){return e.delegateTarget=d,t.oneOff&&m.off(d,e.type,u),u.apply(d,[e])})).delegationSelector=s?i:null,e.originalHandler=r,e.oneOff=o,l[e.uidEvent=c]=e,t.addEventListener(a,e,s)))}function at(t,e,i,n,o){n=ot(e[i],n,o);n&&(t.removeEventListener(i,n,Boolean(o)),delete e[i][n.uidEvent])}const m={on(t,e,i,n){rt(t,e,i,n,!1)},one(t,e,i,n){rt(t,e,i,n,!0)},off(r,a,t,e){if("string"==typeof a&&r){const[i,n,o]=st(a,t,e),s=o!==a,l=nt(r);e=a.startsWith(".");if(void 0!==n)return l&&l[o]?void at(r,l,o,n,i?t:null):void 0;e&&Object.keys(l).forEach(t=>{{var e=r,i=l,n=t,o=a.slice(1);const s=i[n]||{};Object.keys(s).forEach(t=>{t.includes(o)&&(t=s[t],at(e,i,n,t.originalHandler,t.delegationSelector))})}});const c=l[o]||{};Object.keys(c).forEach(t=>{var e=t.replace(Q,"");s&&!a.includes(e)||(e=c[t],at(r,l,o,e.originalHandler,e.delegationSelector))})}},trigger(t,e,i){if("string"!=typeof e||!t)return null;var n=U(),o=e.replace(Z,""),s=e!==o,r=et.has(o);let a,l=!0,c=!0,d=!1,u=null;return s&&n&&(a=n.Event(e,i),n(t).trigger(a),l=!a.isPropagationStopped(),c=!a.isImmediatePropagationStopped(),d=a.isDefaultPrevented()),r?(u=document.createEvent("HTMLEvents")).initEvent(o,l,!0):u=new CustomEvent(e,{bubbles:l,cancelable:!0}),void 0!==i&&Object.keys(i).forEach(t=>{Object.defineProperty(u,t,{get(){return i[t]}})}),d&&u.preventDefault(),c&&t.dispatchEvent(u),u.defaultPrevented&&void 0!==a&&a.preventDefault(),u}};class s{constructor(t){(t="string"==typeof t?document.querySelector(t):t)&&(this._element=t,G(this._element,this.constructor.DATA_KEY,this))}dispose(){V(this._element,this.constructor.DATA_KEY),this._element=null}static getInstance(t){return a(t,this.DATA_KEY)}static get VERSION(){return"5.0.0-beta3"}}const lt="bs.alert";lt;class ct extends s{static get DATA_KEY(){return lt}close(t){var t=t?this._getRootElement(t):this._element,e=this._triggerCloseEvent(t);null===e||e.defaultPrevented||this._removeElement(t)}_getRootElement(t){return o(t)||t.closest(".alert")}_triggerCloseEvent(t){return m.trigger(t,"close.bs.alert")}_removeElement(t){var e;t.classList.remove("show"),t.classList.contains("fade")?(e=d(t),m.one(t,"transitionend",()=>this._destroyElement(t)),u(t,e)):this._destroyElement(t)}_destroyElement(t){t.parentNode&&t.parentNode.removeChild(t),m.trigger(t,"closed.bs.alert")}static jQueryInterface(e){return this.each(function(){let t=a(this,lt);t=t||new ct(this),"close"===e&&t[e](this)})}static handleDismiss(e){return function(t){t&&t.preventDefault(),e.close(this)}}}m.on(document,"click.bs.alert.data-api",'[data-bs-dismiss="alert"]',ct.handleDismiss(new ct)),t("alert",ct);const dt="bs.button";dt;const ut='[data-bs-toggle="button"]';class ht extends s{static get DATA_KEY(){return dt}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(e){return this.each(function(){let t=a(this,dt);t=t||new ht(this),"toggle"===e&&t[e]()})}}function pt(t){return"true"===t||"false"!==t&&(t===Number(t).toString()?Number(t):""===t||"null"===t?null:t)}function ft(t){return t.replace(/[A-Z]/g,t=>"-"+t.toLowerCase())}m.on(document,"click.bs.button.data-api",ut,t=>{t.preventDefault();t=t.target.closest(ut);let e=a(t,dt);(e=e||new ht(t)).toggle()}),t("button",ht);const l={setDataAttribute(t,e,i){t.setAttribute("data-bs-"+ft(e),i)},removeDataAttribute(t,e){t.removeAttribute("data-bs-"+ft(e))},getDataAttributes(i){if(!i)return{};const n={};return Object.keys(i.dataset).filter(t=>t.startsWith("bs")).forEach(t=>{let e=t.replace(/^bs/,"");e=e.charAt(0).toLowerCase()+e.slice(1,e.length),n[e]=pt(i.dataset[t])}),n},getDataAttribute(t,e){return pt(t.getAttribute("data-bs-"+ft(e)))},offset(t){t=t.getBoundingClientRect();return{top:t.top+document.body.scrollTop,left:t.left+document.body.scrollLeft}},position(t){return{top:t.offsetTop,left:t.offsetLeft}}},h={find(t,e=document.documentElement){return[].concat(...Element.prototype.querySelectorAll.call(e,t))},findOne(t,e=document.documentElement){return Element.prototype.querySelector.call(e,t)},children(t,e){return[].concat(...t.children).filter(t=>t.matches(e))},parents(t,e){var i=[];let n=t.parentNode;for(;n&&n.nodeType===Node.ELEMENT_NODE&&3!==n.nodeType;)n.matches(e)&&i.push(n),n=n.parentNode;return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]}},mt="carousel",gt="bs.carousel",c="."+gt;const yt={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},vt={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},p="next",bt="prev",wt="left",f="right",_t=(c,"slid"+c);c,c,c,c,c,c,c,c,c;c,c;const g="active",kt=".active.carousel-item";class y extends s{constructor(t,e){super(t),this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._indicatorsElement=h.findOne(".carousel-indicators",this._element),this._touchSupported="ontouchstart"in document.documentElement||0<navigator.maxTouchPoints,this._pointerEvent=Boolean(window.PointerEvent),this._addEventListeners()}static get Default(){return yt}static get DATA_KEY(){return gt}next(){this._isSliding||this._slide(p)}nextWhenVisible(){!document.hidden&&q(this._element)&&this.next()}prev(){this._isSliding||this._slide(bt)}pause(t){t||(this._isPaused=!0),h.findOne(".carousel-item-next, .carousel-item-prev",this._element)&&(R(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}cycle(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config&&this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(t){this._activeElement=h.findOne(kt,this._element);var e=this._getItemIndex(this._activeElement);t>this._items.length-1||t<0||(this._isSliding?m.one(this._element,_t,()=>this.to(t)):e===t?(this.pause(),this.cycle()):(e=e<t?p:bt,this._slide(e,this._items[t])))}dispose(){m.off(this._element,c),this._items=null,this._config=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null,super.dispose()}_getConfig(t){return t={...yt,...t},i(mt,t,vt),t}_handleSwipe(){var t=Math.abs(this.touchDeltaX);t<=40||(t=t/this.touchDeltaX,this.touchDeltaX=0,t&&this._slide(0<t?f:wt))}_addEventListeners(){this._config.keyboard&&m.on(this._element,"keydown.bs.carousel",t=>this._keydown(t)),"hover"===this._config.pause&&(m.on(this._element,"mouseenter.bs.carousel",t=>this.pause(t)),m.on(this._element,"mouseleave.bs.carousel",t=>this.cycle(t))),this._config.touch&&this._touchSupported&&this._addTouchEventListeners()}_addTouchEventListeners(){const e=t=>{!this._pointerEvent||"pen"!==t.pointerType&&"touch"!==t.pointerType?this._pointerEvent||(this.touchStartX=t.touches[0].clientX):this.touchStartX=t.clientX},i=t=>{this.touchDeltaX=t.touches&&1<t.touches.length?0:t.touches[0].clientX-this.touchStartX},n=t=>{!this._pointerEvent||"pen"!==t.pointerType&&"touch"!==t.pointerType||(this.touchDeltaX=t.clientX-this.touchStartX),this._handleSwipe(),"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(t=>this.cycle(t),500+this._config.interval))};h.find(".carousel-item img",this._element).forEach(t=>{m.on(t,"dragstart.bs.carousel",t=>t.preventDefault())}),this._pointerEvent?(m.on(this._element,"pointerdown.bs.carousel",t=>e(t)),m.on(this._element,"pointerup.bs.carousel",t=>n(t)),this._element.classList.add("pointer-event")):(m.on(this._element,"touchstart.bs.carousel",t=>e(t)),m.on(this._element,"touchmove.bs.carousel",t=>i(t)),m.on(this._element,"touchend.bs.carousel",t=>n(t)))}_keydown(t){/input|textarea/i.test(t.target.tagName)||("ArrowLeft"===t.key?(t.preventDefault(),this._slide(wt)):"ArrowRight"===t.key&&(t.preventDefault(),this._slide(f)))}_getItemIndex(t){return this._items=t&&t.parentNode?h.find(".carousel-item",t.parentNode):[],this._items.indexOf(t)}_getItemByOrder(t,e){var i=t===p,t=t===bt,n=this._getItemIndex(e),o=this._items.length-1;return(t&&0===n||i&&n===o)&&!this._config.wrap?e:-1==(i=(n+(t?-1:1))%this._items.length)?this._items[this._items.length-1]:this._items[i]}_triggerSlideEvent(t,e){var i=this._getItemIndex(t),n=this._getItemIndex(h.findOne(kt,this._element));return m.trigger(this._element,"slide.bs.carousel",{relatedTarget:t,direction:e,from:n,to:i})}_setActiveIndicatorElement(e){if(this._indicatorsElement){var t=h.findOne(".active",this._indicatorsElement),i=(t.classList.remove(g),t.removeAttribute("aria-current"),h.find("[data-bs-target]",this._indicatorsElement));for(let t=0;t<i.length;t++)if(Number.parseInt(i[t].getAttribute("data-bs-slide-to"),10)===this._getItemIndex(e)){i[t].classList.add(g),i[t].setAttribute("aria-current","true");break}}}_updateInterval(){var t=this._activeElement||h.findOne(kt,this._element);t&&((t=Number.parseInt(t.getAttribute("data-bs-interval"),10))?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=t):this._config.interval=this._config.defaultInterval||this._config.interval)}_slide(t,e){t=this._directionToOrder(t);const i=h.findOne(kt,this._element),n=this._getItemIndex(i),o=e||this._getItemByOrder(t,i),s=this._getItemIndex(o);var e=Boolean(this._interval),r=t===p;const a=r?"carousel-item-start":"carousel-item-end",l=r?"carousel-item-next":"carousel-item-prev",c=this._orderToDirection(t);o&&o.classList.contains(g)?this._isSliding=!1:this._triggerSlideEvent(o,c).defaultPrevented||i&&o&&(this._isSliding=!0,e&&this.pause(),this._setActiveIndicatorElement(o),this._activeElement=o,this._element.classList.contains("slide")?(o.classList.add(l),z(o),i.classList.add(a),o.classList.add(a),r=d(i),m.one(i,"transitionend",()=>{o.classList.remove(a,l),o.classList.add(g),i.classList.remove(g,l,a),this._isSliding=!1,setTimeout(()=>{m.trigger(this._element,_t,{relatedTarget:o,direction:c,from:n,to:s})},0)}),u(i,r)):(i.classList.remove(g),o.classList.add(g),this._isSliding=!1,m.trigger(this._element,_t,{relatedTarget:o,direction:c,from:n,to:s})),e)&&this.cycle()}_directionToOrder(t){return[f,wt].includes(t)?e()?t===f?bt:p:t===f?p:bt:t}_orderToDirection(t){return[p,bt].includes(t)?e()?t===p?wt:f:t===p?f:wt:t}static carouselInterface(t,e){let i=a(t,gt),n={...yt,...l.getDataAttributes(t)};"object"==typeof e&&(n={...n,...e});var o="string"==typeof e?e:n.slide;if(i=i||new y(t,n),"number"==typeof e)i.to(e);else if("string"==typeof o){if(void 0===i[o])throw new TypeError(`No method named "${o}"`);i[o]()}else n.interval&&n.ride&&(i.pause(),i.cycle())}static jQueryInterface(t){return this.each(function(){y.carouselInterface(this,t)})}static dataApiClickHandler(t){var e,i,n=o(this);n&&n.classList.contains("carousel")&&(e={...l.getDataAttributes(n),...l.getDataAttributes(this)},(i=this.getAttribute("data-bs-slide-to"))&&(e.interval=!1),y.carouselInterface(n,e),i&&a(n,gt).to(i),t.preventDefault())}}m.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",y.dataApiClickHandler),m.on(window,"load.bs.carousel.data-api",()=>{var i=h.find('[data-bs-ride="carousel"]');for(let t=0,e=i.length;t<e;t++)y.carouselInterface(i[t],a(i[t],gt))}),t(mt,y);const xt="collapse",Tt="bs.collapse";Tt;const St={toggle:!0,parent:""},Ct={toggle:"boolean",parent:"(string|element)"};const v="show",Et="collapse",Dt="collapsing",At="collapsed",Lt='[data-bs-toggle="collapse"]';class Ot extends s{constructor(t,e){super(t),this._isTransitioning=!1,this._config=this._getConfig(e),this._triggerArray=h.find(Lt+`[href="#${this._element.id}"],`+Lt+`[data-bs-target="#${this._element.id}"]`);var i=h.find(Lt);for(let t=0,e=i.length;t<e;t++){var n=i[t],o=F(n),s=h.find(o).filter(t=>t===this._element);null!==o&&s.length&&(this._selector=o,this._triggerArray.push(n))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}static get Default(){return St}static get DATA_KEY(){return Tt}toggle(){this._element.classList.contains(v)?this.hide():this.show()}show(){if(!this._isTransitioning&&!this._element.classList.contains(v)){let t,e;this._parent&&0===(t=h.find(".show, .collapsing",this._parent).filter(t=>"string"==typeof this._config.parent?t.getAttribute("data-bs-parent")===this._config.parent:t.classList.contains(Et))).length&&(t=null);const o=h.findOne(this._selector);if(t){var i=t.find(t=>o!==t);if((e=i?a(i,Tt):null)&&e._isTransitioning)return}i=m.trigger(this._element,"show.bs.collapse");if(!i.defaultPrevented){t&&t.forEach(t=>{o!==t&&Ot.collapseInterface(t,"hide"),e||G(t,Tt,null)});const s=this._getDimension();this._element.classList.remove(Et),this._element.classList.add(Dt),this._element.style[s]=0,this._triggerArray.length&&this._triggerArray.forEach(t=>{t.classList.remove(At),t.setAttribute("aria-expanded",!0)}),this.setTransitioning(!0);var i="scroll"+(s[0].toUpperCase()+s.slice(1)),n=d(this._element);m.one(this._element,"transitionend",()=>{this._element.classList.remove(Dt),this._element.classList.add(Et,v),this._element.style[s]="",this.setTransitioning(!1),m.trigger(this._element,"shown.bs.collapse")}),u(this._element,n),this._element.style[s]=this._element[i]+"px"}}}hide(){if(!this._isTransitioning&&this._element.classList.contains(v)){var t=m.trigger(this._element,"hide.bs.collapse");if(!t.defaultPrevented){var t=this._getDimension(),e=(this._element.style[t]=this._element.getBoundingClientRect()[t]+"px",z(this._element),this._element.classList.add(Dt),this._element.classList.remove(Et,v),this._triggerArray.length);if(0<e)for(let t=0;t<e;t++){var i=this._triggerArray[t],n=o(i);n&&!n.classList.contains(v)&&(i.classList.add(At),i.setAttribute("aria-expanded",!1))}this.setTransitioning(!0);this._element.style[t]="";t=d(this._element);m.one(this._element,"transitionend",()=>{this.setTransitioning(!1),this._element.classList.remove(Dt),this._element.classList.add(Et),m.trigger(this._element,"hidden.bs.collapse")}),u(this._element,t)}}}setTransitioning(t){this._isTransitioning=t}dispose(){super.dispose(),this._config=null,this._parent=null,this._triggerArray=null,this._isTransitioning=null}_getConfig(t){return(t={...St,...t}).toggle=Boolean(t.toggle),i(xt,t,Ct),t}_getDimension(){return this._element.classList.contains("width")?"width":"height"}_getParent(){let t=this._config["parent"];r(t)?void 0===t.jquery&&void 0===t[0]||(t=t[0]):t=h.findOne(t);var e=Lt+`[data-bs-parent="${t}"]`;return h.find(e,t).forEach(t=>{var e=o(t);this._addAriaAndCollapsedClass(e,[t])}),t}_addAriaAndCollapsedClass(t,e){if(t&&e.length){const i=t.classList.contains(v);e.forEach(t=>{i?t.classList.remove(At):t.classList.add(At),t.setAttribute("aria-expanded",i)})}}static collapseInterface(t,e){let i=a(t,Tt);var n={...St,...l.getDataAttributes(t),..."object"==typeof e&&e?e:{}};if(!i&&n.toggle&&"string"==typeof e&&/show|hide/.test(e)&&(n.toggle=!1),i=i||new Ot(t,n),"string"==typeof e){if(void 0===i[e])throw new TypeError(`No method named "${e}"`);i[e]()}}static jQueryInterface(t){return this.each(function(){Ot.collapseInterface(this,t)})}}m.on(document,"click.bs.collapse.data-api",Lt,function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();const n=l.getDataAttributes(this);t=F(this);h.find(t).forEach(t=>{var e=a(t,Tt);let i;i=e?(null===e._parent&&"string"==typeof n.parent&&(e._config.parent=n.parent,e._parent=e._getParent()),"toggle"):n,Ot.collapseInterface(t,i)})}),t(xt,Ot);var E="top",D="bottom",A="right",L="left",$t="auto",Mt=[E,D,A,L],jt="start",Pt="end",Nt="clippingParents",It="viewport",Ht="popper",Ft="reference",Rt=Mt.reduce(function(t,e){return t.concat([e+"-"+jt,e+"-"+Pt])},[]),qt=[].concat(Mt,[$t]).reduce(function(t,e){return t.concat([e,e+"-"+jt,e+"-"+Pt])},[]),Yt="beforeRead",Wt="afterRead",Bt="beforeMain",zt="afterMain",Ut="beforeWrite",Gt="afterWrite",Vt=[Yt,"read",Wt,Bt,"main",zt,Ut,"write",Gt];function b(t){return t?(t.nodeName||"").toLowerCase():null}function w(t){var e;return null==t?window:"[object Window]"!==t.toString()?(e=t.ownerDocument)&&e.defaultView||window:t}function Xt(t){return t instanceof w(t).Element||t instanceof Element}function _(t){return t instanceof w(t).HTMLElement||t instanceof HTMLElement}function Zt(t){return"undefined"!=typeof ShadowRoot&&(t instanceof w(t).ShadowRoot||t instanceof ShadowRoot)}var Qt={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var o=t.state;Object.keys(o.elements).forEach(function(t){var e=o.styles[t]||{},i=o.attributes[t]||{},n=o.elements[t];_(n)&&b(n)&&(Object.assign(n.style,e),Object.keys(i).forEach(function(t){var e=i[t];!1===e?n.removeAttribute(t):n.setAttribute(t,!0===e?"":e)}))})},effect:function(t){var n=t.state,o={popper:{position:n.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(n.elements.popper.style,o.popper),n.styles=o,n.elements.arrow&&Object.assign(n.elements.arrow.style,o.arrow),function(){Object.keys(n.elements).forEach(function(t){var e=n.elements[t],i=n.attributes[t]||{},t=Object.keys((n.styles.hasOwnProperty(t)?n.styles:o)[t]).reduce(function(t,e){return t[e]="",t},{});_(e)&&b(e)&&(Object.assign(e.style,t),Object.keys(i).forEach(function(t){e.removeAttribute(t)}))})}},requires:["computeStyles"]};function O(t){return t.split("-")[0]}function Jt(t){t=t.getBoundingClientRect();return{width:t.width,height:t.height,top:t.top,right:t.right,bottom:t.bottom,left:t.left,x:t.left,y:t.top}}function Kt(t){var e=Jt(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function te(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&Zt(i)){var n=e;do{if(n&&t.isSameNode(n))return!0}while(n=n.parentNode||n.host)}return!1}function k(t){return w(t).getComputedStyle(t)}function x(t){return((Xt(t)?t.ownerDocument:t.document)||window.document).documentElement}function ee(t){return"html"===b(t)?t:t.assignedSlot||t.parentNode||(Zt(t)?t.host:null)||x(t)}function ie(t){return _(t)&&"fixed"!==k(t).position?t.offsetParent:null}function ne(t){for(var e,i=w(t),n=ie(t);n&&(e=n,0<=["table","td","th"].indexOf(b(e)))&&"static"===k(n).position;)n=ie(n);return(!n||"html"!==b(n)&&("body"!==b(n)||"static"!==k(n).position))&&(n||function(t){for(var e=-1!==navigator.userAgent.toLowerCase().indexOf("firefox"),i=ee(t);_(i)&&["html","body"].indexOf(b(i))<0;){var n=k(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t))||i}function oe(t){return 0<=["top","bottom"].indexOf(t)?"x":"y"}var T=Math.max,se=Math.min,re=Math.round;function ae(t,e,i){return T(t,se(e,i))}function le(){return{top:0,right:0,bottom:0,left:0}}function ce(t){return Object.assign({},le(),t)}function de(i,t){return t.reduce(function(t,e){return t[e]=i,t},{})}var ue={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i,n,o,s=t.state,r=t.name,t=t.options,a=s.elements.arrow,l=s.modifiersData.popperOffsets,c=oe(d=O(s.placement)),d=0<=[L,A].indexOf(d)?"height":"width";a&&l&&(t=t.padding,i=s,i=ce("number"!=typeof(t="function"==typeof t?t(Object.assign({},i.rects,{placement:i.placement})):t)?t:de(t,Mt)),t=Kt(a),o="y"===c?E:L,n="y"===c?D:A,e=s.rects.reference[d]+s.rects.reference[c]-l[c]-s.rects.popper[d],l=l[c]-s.rects.reference[c],a=(a=ne(a))?"y"===c?a.clientHeight||0:a.clientWidth||0:0,o=i[o],i=a-t[d]-i[n],o=ae(o,n=a/2-t[d]/2+(e/2-l/2),i),s.modifiersData[r]=((a={})[c]=o,a.centerOffset=o-n,a))},effect:function(t){var e=t.state;null!=(t=void 0===(t=t.options.element)?"[data-popper-arrow]":t)&&("string"!=typeof t||(t=e.elements.popper.querySelector(t)))&&te(e.elements.popper,t)&&(e.elements.arrow=t)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]},he={top:"auto",right:"auto",bottom:"auto",left:"auto"};function pe(t){var e,i,n,o=t.popper,s=t.popperRect,r=t.placement,a=t.offsets,l=t.position,c=t.gpuAcceleration,d=t.adaptive,t=t.roundOffsets,u=!0===t?(u=(h=a).x,h=a.y,p=window.devicePixelRatio||1,{x:re(re(u*p)/p)||0,y:re(re(h*p)/p)||0}):"function"==typeof t?t(a):a,h=u.x,p=void 0===h?0:h,t=u.y,t=void 0===t?0:t,f=a.hasOwnProperty("x"),a=a.hasOwnProperty("y"),m=L,g=E,y=window,o=(d&&(n="clientHeight",i="clientWidth",(e=ne(o))===w(o)&&"static"!==k(e=x(o)).position&&(n="scrollHeight",i="scrollWidth"),r===E&&(g=D,t=(t-(e[n]-s.height))*(c?1:-1)),r===L)&&(m=A,p=(p-(e[i]-s.width))*(c?1:-1)),Object.assign({position:l},d&&he));return c?Object.assign({},o,((n={})[g]=a?"0":"",n[m]=f?"0":"",n.transform=(y.devicePixelRatio||1)<2?"translate("+p+"px, "+t+"px)":"translate3d("+p+"px, "+t+"px, 0)",n)):Object.assign({},o,((r={})[g]=a?t+"px":"",r[m]=f?p+"px":"",r.transform="",r))}var fe={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,t=t.options,i=void 0===(i=t.gpuAcceleration)||i,n=void 0===(n=t.adaptive)||n,t=void 0===(t=t.roundOffsets)||t,i={placement:O(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:i};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,pe(Object.assign({},i,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:n,roundOffsets:t})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,pe(Object.assign({},i,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:t})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}},me={passive:!0};var ge={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=(t=t.options).scroll,o=void 0===n||n,s=void 0===(n=t.resize)||n,r=w(e.elements.popper),a=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&a.forEach(function(t){t.addEventListener("scroll",i.update,me)}),s&&r.addEventListener("resize",i.update,me),function(){o&&a.forEach(function(t){t.removeEventListener("scroll",i.update,me)}),s&&r.removeEventListener("resize",i.update,me)}},data:{}},ye={left:"right",right:"left",bottom:"top",top:"bottom"};function ve(t){return t.replace(/left|right|bottom|top/g,function(t){return ye[t]})}var be={start:"end",end:"start"};function we(t){return t.replace(/start|end/g,function(t){return be[t]})}function _e(t){t=w(t);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function ke(t){return Jt(x(t)).left+_e(t).scrollLeft}function xe(t){var t=k(t),e=t.overflow,i=t.overflowX,t=t.overflowY;return/auto|scroll|overlay|hidden/.test(e+t+i)}function Te(t,e){void 0===e&&(e=[]);var i=function t(e){return 0<=["html","body","#document"].indexOf(b(e))?e.ownerDocument.body:_(e)&&xe(e)?e:t(ee(e))}(t),t=i===(null==(t=t.ownerDocument)?void 0:t.body),n=w(i),n=t?[n].concat(n.visualViewport||[],xe(i)?i:[]):i,i=e.concat(n);return t?i:i.concat(Te(ee(n)))}function Se(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Ce(t,e){return e===It?Se((n=w(i=t),o=x(i),n=n.visualViewport,s=o.clientWidth,o=o.clientHeight,a=r=0,n&&(s=n.width,o=n.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(r=n.offsetLeft,a=n.offsetTop)),{width:s,height:o,x:r+ke(i),y:a})):_(e)?((s=Jt(n=e)).top=s.top+n.clientTop,s.left=s.left+n.clientLeft,s.bottom=s.top+n.clientHeight,s.right=s.left+n.clientWidth,s.width=n.clientWidth,s.height=n.clientHeight,s.x=s.left,s.y=s.top,s):Se((o=x(t),r=x(o),i=_e(o),a=null==(a=o.ownerDocument)?void 0:a.body,e=T(r.scrollWidth,r.clientWidth,a?a.scrollWidth:0,a?a.clientWidth:0),t=T(r.scrollHeight,r.clientHeight,a?a.scrollHeight:0,a?a.clientHeight:0),o=-i.scrollLeft+ke(o),i=-i.scrollTop,"rtl"===k(a||r).direction&&(o+=T(r.clientWidth,a?a.clientWidth:0)-e),{width:e,height:t,x:o,y:i}));var i,n,o,s,r,a}function Ee(i,t,e){var n,o="clippingParents"===t?(s=Te(ee(o=i)),Xt(n=0<=["absolute","fixed"].indexOf(k(o).position)&&_(o)?ne(o):o)?s.filter(function(t){return Xt(t)&&te(t,n)&&"body"!==b(t)}):[]):[].concat(t),s=[].concat(o,[e]),t=s[0],e=s.reduce(function(t,e){e=Ce(i,e);return t.top=T(e.top,t.top),t.right=se(e.right,t.right),t.bottom=se(e.bottom,t.bottom),t.left=T(e.left,t.left),t},Ce(i,t));return e.width=e.right-e.left,e.height=e.bottom-e.top,e.x=e.left,e.y=e.top,e}function De(t){return t.split("-")[1]}function Ae(t){var e,i=t.reference,n=t.element,t=t.placement,o=t?O(t):null,t=t?De(t):null,s=i.x+i.width/2-n.width/2,r=i.y+i.height/2-n.height/2;switch(o){case E:e={x:s,y:i.y-n.height};break;case D:e={x:s,y:i.y+i.height};break;case A:e={x:i.x+i.width,y:r};break;case L:e={x:i.x-n.width,y:r};break;default:e={x:i.x,y:i.y}}var a=o?oe(o):null;if(null!=a){var l="y"===a?"height":"width";switch(t){case jt:e[a]=e[a]-(i[l]/2-n[l]/2);break;case Pt:e[a]=e[a]+(i[l]/2-n[l]/2)}}return e}function Le(t,e){var n,e=e=void 0===e?{}:e,i=e.placement,i=void 0===i?t.placement:i,o=e.boundary,o=void 0===o?Nt:o,s=e.rootBoundary,s=void 0===s?It:s,r=e.elementContext,r=void 0===r?Ht:r,a=e.altBoundary,a=void 0!==a&&a,e=e.padding,e=void 0===e?0:e,e=ce("number"!=typeof e?e:de(e,Mt)),l=t.elements.reference,c=t.rects.popper,a=t.elements[a?r===Ht?Ft:Ht:r],a=Ee(Xt(a)?a:a.contextElement||x(t.elements.popper),o,s),o=Jt(l),s=Ae({reference:o,element:c,strategy:"absolute",placement:i}),l=Se(Object.assign({},c,s)),c=r===Ht?l:o,d={top:a.top-c.top+e.top,bottom:c.bottom-a.bottom+e.bottom,left:a.left-c.left+e.left,right:c.right-a.right+e.right},s=t.modifiersData.offset;return r===Ht&&s&&(n=s[i],Object.keys(d).forEach(function(t){var e=0<=[A,D].indexOf(t)?1:-1,i=0<=[E,D].indexOf(t)?"y":"x";d[t]+=n[i]*e})),d}var Oe={name:"flip",enabled:!0,phase:"main",fn:function(t){var u=t.state,e=t.options,t=t.name;if(!u.modifiersData[t]._skip){for(var i=e.mainAxis,n=void 0===i||i,i=e.altAxis,o=void 0===i||i,i=e.fallbackPlacements,h=e.padding,p=e.boundary,f=e.rootBoundary,s=e.altBoundary,r=e.flipVariations,m=void 0===r||r,g=e.allowedAutoPlacements,r=u.options.placement,e=O(r),i=i||(e===r||!m?[ve(r)]:O(i=r)===$t?[]:(e=ve(i),[we(i),e,we(e)])),a=[r].concat(i).reduce(function(t,e){return t.concat(O(e)===$t?(i=u,n=(t=t=void 0===(t={placement:e,boundary:p,rootBoundary:f,padding:h,flipVariations:m,allowedAutoPlacements:g})?{}:t).placement,o=t.boundary,s=t.rootBoundary,r=t.padding,a=t.flipVariations,l=void 0===(t=t.allowedAutoPlacements)?qt:t,c=De(n),t=c?a?Rt:Rt.filter(function(t){return De(t)===c}):Mt,d=(n=0===(n=t.filter(function(t){return 0<=l.indexOf(t)})).length?t:n).reduce(function(t,e){return t[e]=Le(i,{placement:e,boundary:o,rootBoundary:s,padding:r})[O(e)],t},{}),Object.keys(d).sort(function(t,e){return d[t]-d[e]})):e);var i,n,o,s,r,a,l,c,d},[]),l=u.rects.reference,c=u.rects.popper,d=new Map,y=!0,v=a[0],b=0;b<a.length;b++){var w=a[b],_=O(w),k=De(w)===jt,x=0<=[E,D].indexOf(_),T=x?"width":"height",S=Le(u,{placement:w,boundary:p,rootBoundary:f,altBoundary:s,padding:h}),x=x?k?A:L:k?D:E,k=(l[T]>c[T]&&(x=ve(x)),ve(x)),T=[];if(n&&T.push(S[_]<=0),o&&T.push(S[x]<=0,S[k]<=0),T.every(function(t){return t})){v=w,y=!1;break}d.set(w,T)}if(y)for(var C=m?3:1;0<C;C--)if("break"===function(e){var t=a.find(function(t){t=d.get(t);if(t)return t.slice(0,e).every(function(t){return t})});if(t)return v=t,"break"}(C))break;u.placement!==v&&(u.modifiersData[t]._skip=!0,u.placement=v,u.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function $e(t,e,i){return{top:t.top-e.height-(i=void 0===i?{x:0,y:0}:i).y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Me(e){return[E,A,D,L].some(function(t){return 0<=e[t]})}var je={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,t=t.name,i=e.rects.reference,n=e.rects.popper,o=e.modifiersData.preventOverflow,s=Le(e,{elementContext:"reference"}),r=Le(e,{altBoundary:!0}),s=$e(s,i),i=$e(r,n,o),r=Me(s),n=Me(i);e.modifiersData[t]={referenceClippingOffsets:s,popperEscapeOffsets:i,isReferenceHidden:r,hasPopperEscaped:n},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":r,"data-popper-escaped":n})}};var Pe={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var r=t.state,e=t.options,t=t.name,a=void 0===(e=e.offset)?[0,0]:e,e=qt.reduce(function(t,e){var i,n,o,s;return t[e]=(e=e,i=r.rects,n=a,o=O(e),s=0<=[L,E].indexOf(o)?-1:1,e=(i="function"==typeof n?n(Object.assign({},i,{placement:e})):n)[0]||0,n=(i[1]||0)*s,0<=[L,A].indexOf(o)?{x:n,y:e}:{x:e,y:n}),t},{}),i=(n=e[r.placement]).x,n=n.y;null!=r.modifiersData.popperOffsets&&(r.modifiersData.popperOffsets.x+=i,r.modifiersData.popperOffsets.y+=n),r.modifiersData[t]=e}};var Ne={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,t=t.name;e.modifiersData[t]=Ae({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}};var Ie={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e,i,n,o,s,r,a,l,c,d=t.state,u=t.options,t=t.name,h=void 0===(h=u.mainAxis)||h,p=void 0!==(p=u.altAxis)&&p,f=u.boundary,m=u.rootBoundary,g=u.altBoundary,y=u.padding,v=void 0===(v=u.tether)||v,u=void 0===(u=u.tetherOffset)?0:u,f=Le(d,{boundary:f,rootBoundary:m,padding:y,altBoundary:g}),m=O(d.placement),g=!(y=De(d.placement)),b="x"===(m=oe(m))?"y":"x",w=d.modifiersData.popperOffsets,_=d.rects.reference,k=d.rects.popper,u="function"==typeof u?u(Object.assign({},d.rects,{placement:d.placement})):u,x={x:0,y:0};w&&((h||p)&&(s="y"===m?"height":"width",e=w[m],i=w[m]+f[c="y"===m?E:L],n=w[m]-f[a="y"===m?D:A],r=v?-k[s]/2:0,o=(y===jt?_:k)[s],y=y===jt?-k[s]:-_[s],k=d.elements.arrow,k=v&&k?Kt(k):{width:0,height:0},c=(l=d.modifiersData["arrow#persistent"]?d.modifiersData["arrow#persistent"].padding:le())[c],l=l[a],a=ae(0,_[s],k[s]),k=g?_[s]/2-r-a-c-u:o-a-c-u,o=g?-_[s]/2+r+a+l+u:y+a+l+u,g=(c=d.elements.arrow&&ne(d.elements.arrow))?"y"===m?c.clientTop||0:c.clientLeft||0:0,_=d.modifiersData.offset?d.modifiersData.offset[d.placement][m]:0,s=w[m]+k-_-g,r=w[m]+o-_,h&&(y=ae(v?se(i,s):i,e,v?T(n,r):n),w[m]=y,x[m]=y-e),p)&&(l=(a=w[b])+f["x"===m?E:L],u=a-f["x"===m?D:A],c=ae(v?se(l,s):l,a,v?T(u,r):u),w[b]=c,x[b]=c-a),d.modifiersData[t]=x)},requiresIfExists:["offset"]};function He(t,e,i){void 0===i&&(i=!1);var n=x(e),t=Jt(t),o=_(e),s={scrollLeft:0,scrollTop:0},r={x:0,y:0};return!o&&i||("body"===b(e)&&!xe(n)||(s=(o=e)!==w(o)&&_(o)?{scrollLeft:o.scrollLeft,scrollTop:o.scrollTop}:_e(o)),_(e)?((r=Jt(e)).x+=e.clientLeft,r.y+=e.clientTop):n&&(r.x=ke(n))),{x:t.left+s.scrollLeft-r.x,y:t.top+s.scrollTop-r.y,width:t.width,height:t.height}}function Fe(t){var i=new Map,n=new Set,o=[];return t.forEach(function(t){i.set(t.name,t)}),t.forEach(function(t){n.has(t.name)||!function e(t){n.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach(function(t){n.has(t)||(t=i.get(t))&&e(t)}),o.push(t)}(t)}),o}var Re={placement:"bottom",modifiers:[],strategy:"absolute"};function qe(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return!e.some(function(t){return!(t&&"function"==typeof t.getBoundingClientRect)})}function Ye(t){var t=t=void 0===t?{}:t,e=t.defaultModifiers,u=void 0===e?[]:e,e=t.defaultOptions,h=void 0===e?Re:e;return function(n,o,e){void 0===e&&(e=h);var i,s,r={placement:"bottom",orderedModifiers:[],options:Object.assign({},Re,h),modifiersData:{},elements:{reference:n,popper:o},attributes:{},styles:{}},a=[],l=!1,c={state:r,setOptions:function(t){d(),r.options=Object.assign({},h,r.options,t),r.scrollParents={reference:Xt(n)?Te(n):n.contextElement?Te(n.contextElement):[],popper:Te(o)};t=[].concat(u,r.options.modifiers),e=t.reduce(function(t,e){var i=t[e.name];return t[e.name]=i?Object.assign({},i,e,{options:Object.assign({},i.options,e.options),data:Object.assign({},i.data,e.data)}):e,t},{}),t=Object.keys(e).map(function(t){return e[t]}),i=Fe(t);var i,e,t=Vt.reduce(function(t,e){return t.concat(i.filter(function(t){return t.phase===e}))},[]);return r.orderedModifiers=t.filter(function(t){return t.enabled}),r.orderedModifiers.forEach(function(t){var e=t.name,i=t.options,t=t.effect;"function"==typeof t&&(t=t({state:r,name:e,instance:c,options:void 0===i?{}:i}),a.push(t||function(){}))}),c.update()},forceUpdate:function(){if(!l){var t=r.elements,e=t.reference,t=t.popper;if(qe(e,t)){r.rects={reference:He(e,ne(t),"fixed"===r.options.strategy),popper:Kt(t)},r.reset=!1,r.placement=r.options.placement,r.orderedModifiers.forEach(function(t){return r.modifiersData[t.name]=Object.assign({},t.data)});for(var i,n,o,s=0;s<r.orderedModifiers.length;s++)!0===r.reset?(r.reset=!1,s=-1):(i=(o=r.orderedModifiers[s]).fn,n=o.options,o=o.name,"function"==typeof i&&(r=i({state:r,options:void 0===n?{}:n,name:o,instance:c})||r))}}},update:(i=function(){return new Promise(function(t){c.forceUpdate(),t(r)})},function(){return s=s||new Promise(function(t){Promise.resolve().then(function(){s=void 0,t(i())})})}),destroy:function(){d(),l=!0}};return qe(n,o)&&c.setOptions(e).then(function(t){!l&&e.onFirstUpdate&&e.onFirstUpdate(t)}),c;function d(){a.forEach(function(t){return t()}),a=[]}}}var We=Ye({defaultModifiers:[ge,Ne,fe,Qt,Pe,Oe,Ie,ue,je]}),Be=Object.freeze({__proto__:null,popperGenerator:Ye,detectOverflow:Le,createPopperBase:Ye(),createPopper:We,createPopperLite:Ye({defaultModifiers:[ge,Ne,fe,Qt]}),top:E,bottom:D,right:A,left:L,auto:$t,basePlacements:Mt,start:jt,end:Pt,clippingParents:Nt,viewport:It,popper:Ht,reference:Ft,variationPlacements:Rt,placements:qt,beforeRead:Yt,read:"read",afterRead:Wt,beforeMain:Bt,main:"main",afterMain:zt,beforeWrite:Ut,write:"write",afterWrite:Gt,modifierPhases:Vt,applyStyles:Qt,arrow:ue,computeStyles:fe,eventListeners:ge,flip:Oe,hide:je,offset:Pe,popperOffsets:Ne,preventOverflow:Ie});const ze="dropdown",Ue="bs.dropdown",S="."+Ue;Yt=".data-api";const Ge="Escape",Ve="ArrowUp",Xe="ArrowDown",Ze=new RegExp(Ve+`|${Xe}|`+Ge),Qe="hide"+S,Je="hidden"+S;S,S,S;Wt="click"+S+Yt,Bt="keydown"+S+Yt;S;const Ke="disabled",C="show",ti='[data-bs-toggle="dropdown"]',ei=".dropdown-menu",ii=e()?"top-end":"top-start",ni=e()?"top-start":"top-end",oi=e()?"bottom-end":"bottom-start",si=e()?"bottom-start":"bottom-end",ri=e()?"left-start":"right-start",ai=e()?"right-start":"left-start",li={offset:[0,2],boundary:"clippingParents",reference:"toggle",display:"dynamic",popperConfig:null},ci={offset:"(array|string|function)",boundary:"(string|element)",reference:"(string|element|object)",display:"string",popperConfig:"(null|object|function)"};class $ extends s{constructor(t,e){super(t),this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}static get Default(){return li}static get DefaultType(){return ci}static get DATA_KEY(){return Ue}toggle(){var t;this._element.disabled||this._element.classList.contains(Ke)||(t=this._element.classList.contains(C),$.clearMenus(),t)||this.show()}show(){if(!(this._element.disabled||this._element.classList.contains(Ke)||this._menu.classList.contains(C))){var e=$.getParentFromElement(this._element),t={relatedTarget:this._element},i=m.trigger(this._element,"show.bs.dropdown",t);if(!i.defaultPrevented){if(this._inNavbar)l.setDataAttribute(this._menu,"popper","none");else{if(void 0===Be)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let t=this._element;"parent"===this._config.reference?t=e:r(this._config.reference)?(t=this._config.reference,void 0!==this._config.reference.jquery&&(t=this._config.reference[0])):"object"==typeof this._config.reference&&(t=this._config.reference);var i=this._getPopperConfig(),n=i.modifiers.find(t=>"applyStyles"===t.name&&!1===t.enabled);this._popper=We(t,this._menu,i),n&&l.setDataAttribute(this._menu,"popper","static")}"ontouchstart"in document.documentElement&&!e.closest(".navbar-nav")&&[].concat(...document.body.children).forEach(t=>m.on(t,"mouseover",null,B())),this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.toggle(C),this._element.classList.toggle(C),m.trigger(this._element,"shown.bs.dropdown",t)}}}hide(){var t;this._element.disabled||this._element.classList.contains(Ke)||!this._menu.classList.contains(C)||(t={relatedTarget:this._element},m.trigger(this._element,Qe,t).defaultPrevented)||(this._popper&&this._popper.destroy(),this._menu.classList.toggle(C),this._element.classList.toggle(C),l.removeDataAttribute(this._menu,"popper"),m.trigger(this._element,Je,t))}dispose(){m.off(this._element,S),this._menu=null,this._popper&&(this._popper.destroy(),this._popper=null),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_addEventListeners(){m.on(this._element,"click.bs.dropdown",t=>{t.preventDefault(),this.toggle()})}_getConfig(t){if(t={...this.constructor.Default,...l.getDataAttributes(this._element),...t},i(ze,t,this.constructor.DefaultType),"object"!=typeof t.reference||r(t.reference)||"function"==typeof t.reference.getBoundingClientRect)return t;throw new TypeError(ze.toUpperCase()+': Option "reference" provided type "object" without a required "getBoundingClientRect" method.')}_getMenuElement(){return h.next(this._element,ei)[0]}_getPlacement(){var t,e=this._element.parentNode;return e.classList.contains("dropend")?ri:e.classList.contains("dropstart")?ai:(t="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim(),e.classList.contains("dropup")?t?ni:ii:t?si:oi)}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const e=this._config["offset"];return"string"==typeof e?e.split(",").map(t=>Number.parseInt(t,10)):"function"==typeof e?t=>e(t,this._element):e}_getPopperConfig(){var t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return"static"===this._config.display&&(t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}static dropdownInterface(t,e){let i=a(t,Ue);var n="object"==typeof e?e:null;if(i=i||new $(t,n),"string"==typeof e){if(void 0===i[e])throw new TypeError(`No method named "${e}"`);i[e]()}}static jQueryInterface(t){return this.each(function(){$.dropdownInterface(this,t)})}static clearMenus(i){if(i){if(2===i.button||"keyup"===i.type&&"Tab"!==i.key)return;if(/input|select|textarea|form/i.test(i.target.tagName))return}var n=h.find(ti);for(let t=0,e=n.length;t<e;t++){var o=a(n[t],Ue),s={relatedTarget:n[t]};if(i&&"click"===i.type&&(s.clickEvent=i),o){var r=o._menu;if(n[t].classList.contains(C)){if(i){if([o._element].some(t=>i.composedPath().includes(t)))continue;if("keyup"===i.type&&"Tab"===i.key&&r.contains(i.target))continue}m.trigger(n[t],Qe,s).defaultPrevented||("ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach(t=>m.off(t,"mouseover",null,B())),n[t].setAttribute("aria-expanded","false"),o._popper&&o._popper.destroy(),r.classList.remove(C),n[t].classList.remove(C),l.removeDataAttribute(r,"popper"),m.trigger(n[t],Je,s))}}}}static getParentFromElement(t){return o(t)||t.parentNode}static dataApiKeydownHandler(e){if((/input|textarea/i.test(e.target.tagName)?!("Space"===e.key||e.key!==Ge&&(e.key!==Xe&&e.key!==Ve||e.target.closest(ei))):Ze.test(e.key))&&(e.preventDefault(),e.stopPropagation(),!this.disabled)&&!this.classList.contains(Ke)){var t=$.getParentFromElement(this),i=this.classList.contains(C);if(e.key===Ge)(this.matches(ti)?this:h.prev(this,ti)[0]).focus(),$.clearMenus();else if(i||e.key!==Ve&&e.key!==Xe)if(i&&"Space"!==e.key){i=h.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",t).filter(q);if(i.length){let t=i.indexOf(e.target);e.key===Ve&&0<t&&t--,e.key===Xe&&t<i.length-1&&t++,i[t=-1===t?0:t].focus()}}else $.clearMenus();else(this.matches(ti)?this:h.prev(this,ti)[0]).click()}}}m.on(document,Bt,ti,$.dataApiKeydownHandler),m.on(document,Bt,ei,$.dataApiKeydownHandler),m.on(document,Wt,$.clearMenus),m.on(document,"keyup.bs.dropdown.data-api",$.clearMenus),m.on(document,Wt,ti,function(t){t.preventDefault(),$.dropdownInterface(this)}),t(ze,$);const di="bs.modal",M="."+di;const ui={backdrop:!0,keyboard:!0,focus:!0},hi={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean"},pi=(M,M,"hidden"+M),fi="show"+M,mi=(M,"focusin"+M),gi="resize"+M,yi="click.dismiss"+M,vi="keydown.dismiss"+M,bi=(M,"mousedown.dismiss"+M);M;const wi="modal-open",_i="show",ki="modal-static";const xi=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",Ti=".sticky-top";class Si extends s{constructor(t,e){super(t),this._config=this._getConfig(e),this._dialog=h.findOne(".modal-dialog",this._element),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}static get Default(){return ui}static get DATA_KEY(){return di}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){var e;this._isShown||this._isTransitioning||(this._isAnimated()&&(this._isTransitioning=!0),e=m.trigger(this._element,fi,{relatedTarget:t}),this._isShown)||e.defaultPrevented||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),m.on(this._element,yi,'[data-bs-dismiss="modal"]',t=>this.hide(t)),m.on(this._dialog,bi,()=>{m.one(this._element,"mouseup.dismiss.bs.modal",t=>{t.target===this._element&&(this._ignoreBackdropClick=!0)})}),this._showBackdrop(()=>this._showElement(t)))}hide(t){t&&t.preventDefault(),!this._isShown||this._isTransitioning||m.trigger(this._element,"hide.bs.modal").defaultPrevented||(this._isShown=!1,(t=this._isAnimated())&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),m.off(document,mi),this._element.classList.remove(_i),m.off(this._element,yi),m.off(this._dialog,bi),t?(t=d(this._element),m.one(this._element,"transitionend",t=>this._hideModal(t)),u(this._element,t)):this._hideModal())}dispose(){[window,this._element,this._dialog].forEach(t=>m.off(t,M)),super.dispose(),m.off(document,mi),this._config=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null}handleUpdate(){this._adjustDialog()}_getConfig(t){return t={...ui,...t},i("modal",t,hi),t}_showElement(t){var e=this._isAnimated(),i=h.findOne(".modal-body",this._dialog),i=(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0,i&&(i.scrollTop=0),e&&z(this._element),this._element.classList.add(_i),this._config.focus&&this._enforceFocus(),()=>{this._config.focus&&this._element.focus(),this._isTransitioning=!1,m.trigger(this._element,"shown.bs.modal",{relatedTarget:t})});e?(e=d(this._dialog),m.one(this._dialog,"transitionend",i),u(this._dialog,e)):i()}_enforceFocus(){m.off(document,mi),m.on(document,mi,t=>{document===t.target||this._element===t.target||this._element.contains(t.target)||this._element.focus()})}_setEscapeEvent(){this._isShown?m.on(this._element,vi,t=>{this._config.keyboard&&"Escape"===t.key?(t.preventDefault(),this.hide()):this._config.keyboard||"Escape"!==t.key||this._triggerBackdropTransition()}):m.off(this._element,vi)}_setResizeEvent(){this._isShown?m.on(window,gi,()=>this._adjustDialog()):m.off(window,gi)}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._showBackdrop(()=>{document.body.classList.remove(wi),this._resetAdjustments(),this._resetScrollbar(),m.trigger(this._element,pi)})}_removeBackdrop(){this._backdrop.parentNode.removeChild(this._backdrop),this._backdrop=null}_showBackdrop(t){var e,i=this._isAnimated();this._isShown&&this._config.backdrop?(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",i&&this._backdrop.classList.add("fade"),document.body.appendChild(this._backdrop),m.on(this._element,yi,t=>{this._ignoreBackdropClick?this._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"===this._config.backdrop?this._triggerBackdropTransition():this.hide())}),i&&z(this._backdrop),this._backdrop.classList.add(_i),i?(e=d(this._backdrop),m.one(this._backdrop,"transitionend",t),u(this._backdrop,e)):t()):!this._isShown&&this._backdrop?(this._backdrop.classList.remove(_i),e=()=>{this._removeBackdrop(),t()},i?(i=d(this._backdrop),m.one(this._backdrop,"transitionend",e),u(this._backdrop,i)):e()):t()}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){var t=m.trigger(this._element,"hidePrevented.bs.modal");if(!t.defaultPrevented){const e=this._element.scrollHeight>document.documentElement.clientHeight,i=(e||(this._element.style.overflowY="hidden"),this._element.classList.add(ki),d(this._dialog));m.off(this._element,"transitionend"),m.one(this._element,"transitionend",()=>{this._element.classList.remove(ki),e||(m.one(this._element,"transitionend",()=>{this._element.style.overflowY=""}),u(this._element,i))}),u(this._element,i),this._element.focus()}}_adjustDialog(){var t=this._element.scrollHeight>document.documentElement.clientHeight;(!this._isBodyOverflowing&&t&&!e()||this._isBodyOverflowing&&!t&&e())&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),(this._isBodyOverflowing&&!t&&!e()||!this._isBodyOverflowing&&t&&e())&&(this._element.style.paddingRight=this._scrollbarWidth+"px")}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}_checkScrollbar(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()}_setScrollbar(){this._isBodyOverflowing&&(this._setElementAttributes(xi,"paddingRight",t=>t+this._scrollbarWidth),this._setElementAttributes(Ti,"marginRight",t=>t-this._scrollbarWidth),this._setElementAttributes("body","paddingRight",t=>t+this._scrollbarWidth)),document.body.classList.add(wi)}_setElementAttributes(t,n,o){h.find(t).forEach(t=>{var e,i;t!==document.body&&window.innerWidth>t.clientWidth+this._scrollbarWidth||(e=t.style[n],i=window.getComputedStyle(t)[n],l.setDataAttribute(t,n,e),t.style[n]=o(Number.parseFloat(i))+"px")})}_resetScrollbar(){this._resetElementAttributes(xi,"paddingRight"),this._resetElementAttributes(Ti,"marginRight"),this._resetElementAttributes("body","paddingRight")}_resetElementAttributes(t,i){h.find(t).forEach(t=>{var e=l.getDataAttribute(t,i);void 0===e&&t===document.body?t.style[i]="":(l.removeDataAttribute(t,i),t.style[i]=e)})}_getScrollbarWidth(){var t=document.createElement("div"),e=(t.className="modal-scrollbar-measure",document.body.appendChild(t),t.getBoundingClientRect().width-t.clientWidth);return document.body.removeChild(t),e}static jQueryInterface(i,n){return this.each(function(){let t=a(this,di);var e={...ui,...l.getDataAttributes(this),..."object"==typeof i&&i?i:{}};if(t=t||new Si(this,e),"string"==typeof i){if(void 0===t[i])throw new TypeError(`No method named "${i}"`);t[i](n)}})}}m.on(document,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',function(t){const e=o(this);"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault(),m.one(e,fi,t=>{t.defaultPrevented||m.one(e,pi,()=>{q(this)&&this.focus()})});let i=a(e,di);i||(t={...l.getDataAttributes(e),...l.getDataAttributes(this)},i=new Si(e,t)),i.toggle(this)}),t("modal",Si);const Ci=".fixed-top, .fixed-bottom, .is-fixed",Ei=".sticky-top",Di=()=>{var t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)},Ai=(t,n,o)=>{const s=Di();h.find(t).forEach(t=>{var e,i;t!==document.body&&window.innerWidth>t.clientWidth+s||(e=t.style[n],i=window.getComputedStyle(t)[n],l.setDataAttribute(t,n,e),t.style[n]=o(Number.parseFloat(i))+"px")})},Li=(t,i)=>{h.find(t).forEach(t=>{var e=l.getDataAttribute(t,i);void 0===e&&t===document.body?t.style.removeProperty(i):(l.removeDataAttribute(t,i),t.style[i]=e)})},Oi="offcanvas",$i="bs.offcanvas";zt="."+$i,Ut=".data-api";const Mi={backdrop:!0,keyboard:!0,scroll:!1},ji={backdrop:"boolean",keyboard:"boolean",scroll:"boolean"},Pi="offcanvas-backdrop",Ni="offcanvas-toggling",Ii=".offcanvas.show",Hi=(Ii,Ni,"hidden"+zt),Fi="focusin"+zt,Ri="click"+zt+Ut;class qi extends s{constructor(t,e){super(t),this._config=this._getConfig(e),this._isShown=!1,this._addEventListeners()}static get Default(){return Mi}static get DATA_KEY(){return $i}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){var e;this._isShown||m.trigger(this._element,"show.bs.offcanvas",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._element.style.visibility="visible",this._config.backdrop&&document.body.classList.add(Pi),this._config.scroll||(e=Di(),document.body.style.overflow="hidden",Ai(Ci,"paddingRight",t=>t+e),Ai(Ei,"marginRight",t=>t-e),Ai("body","paddingRight",t=>t+e)),this._element.classList.add(Ni),this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add("show"),setTimeout(()=>{this._element.classList.remove(Ni),m.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:t}),this._enforceFocusOnElement(this._element)},d(this._element)))}hide(){this._isShown&&!m.trigger(this._element,"hide.bs.offcanvas").defaultPrevented&&(this._element.classList.add(Ni),m.off(document,Fi),this._element.blur(),this._isShown=!1,this._element.classList.remove("show"),setTimeout(()=>{this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._element.style.visibility="hidden",this._config.backdrop&&document.body.classList.remove(Pi),this._config.scroll||(document.body.style.overflow="auto",Li(Ci,"paddingRight"),Li(Ei,"marginRight"),Li("body","paddingRight")),m.trigger(this._element,Hi),this._element.classList.remove(Ni)},d(this._element)))}_getConfig(t){return t={...Mi,...l.getDataAttributes(this._element),..."object"==typeof t?t:{}},i(Oi,t,ji),t}_enforceFocusOnElement(e){m.off(document,Fi),m.on(document,Fi,t=>{document===t.target||e===t.target||e.contains(t.target)||e.focus()}),e.focus()}_addEventListeners(){m.on(this._element,"click.dismiss.bs.offcanvas",'[data-bs-dismiss="offcanvas"]',()=>this.hide()),m.on(document,"keydown",t=>{this._config.keyboard&&"Escape"===t.key&&this.hide()}),m.on(document,Ri,t=>{var e=h.findOne(F(t.target));this._element.contains(t.target)||e===this._element||this.hide()})}static jQueryInterface(e){return this.each(function(){var t=a(this,$i)||new qi(this,"object"==typeof e?e:{});if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e](this)}})}}m.on(document,Ri,'[data-bs-toggle="offcanvas"]',function(t){var e=o(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),Y(this)||(m.one(e,Hi,()=>{q(this)&&this.focus()}),(t=h.findOne(".offcanvas.show, .offcanvas-toggling"))&&t!==e)||(a(e,$i)||new qi(e)).toggle(this)}),m.on(window,"load.bs.offcanvas.data-api",()=>{h.find(Ii).forEach(t=>(a(t,$i)||new qi(t)).show())}),t(Oi,qi);const Yi=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]);const Wi=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i,Bi=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;Gt={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]};function zi(t,i,e){if(!t.length)return t;if(e&&"function"==typeof e)return e(t);var e=(new window.DOMParser).parseFromString(t,"text/html"),n=Object.keys(i),o=[].concat(...e.body.querySelectorAll("*"));for(let t=0,e=o.length;t<e;t++){const a=o[t];var s=a.nodeName.toLowerCase();if(n.includes(s)){var r=[].concat(...a.attributes);const l=[].concat(i["*"]||[],i[s]||[]);r.forEach(t=>{((t,e)=>{var i=t.nodeName.toLowerCase();if(e.includes(i))return!Yi.has(i)||Boolean(Wi.test(t.nodeValue)||Bi.test(t.nodeValue));var n=e.filter(t=>t instanceof RegExp);for(let t=0,e=n.length;t<e;t++)if(n[t].test(i))return!0;return!1})(t,l)||a.removeAttribute(t.nodeName)})}else a.parentNode.removeChild(a)}return e.body.innerHTML}const Ui="tooltip",Gi="bs.tooltip",j="."+Gi,Vi="bs-tooltip",Xi=new RegExp(`(^|\\s)${Vi}\\S+`,"g"),Zi=new Set(["sanitize","allowList","sanitizeFn"]),Qi={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(array|string|function)",container:"(string|element|boolean)",fallbackPlacements:"array",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",allowList:"object",popperConfig:"(null|object|function)"},Ji={AUTO:"auto",TOP:"top",RIGHT:e()?"left":"right",BOTTOM:"bottom",LEFT:e()?"right":"left"},Ki={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:[0,0],container:!1,fallbackPlacements:["top","right","bottom","left"],boundary:"clippingParents",customClass:"",sanitize:!0,sanitizeFn:null,allowList:Gt,popperConfig:null},tn={HIDE:"hide"+j,HIDDEN:"hidden"+j,SHOW:"show"+j,SHOWN:"shown"+j,INSERTED:"inserted"+j,CLICK:"click"+j,FOCUSIN:"focusin"+j,FOCUSOUT:"focusout"+j,MOUSEENTER:"mouseenter"+j,MOUSELEAVE:"mouseleave"+j},en="fade",nn="show",on="show",sn="hover",rn="focus";class an extends s{constructor(t,e){if(void 0===Be)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t),this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.config=this._getConfig(e),this.tip=null,this._setListeners()}static get Default(){return Ki}static get NAME(){return Ui}static get DATA_KEY(){return Gi}static get Event(){return tn}static get EVENT_KEY(){return j}static get DefaultType(){return Qi}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(t){this._isEnabled&&(t?((t=this._initializeOnDelegatedTarget(t))._activeTrigger.click=!t._activeTrigger.click,t._isWithActiveTrigger()?t._enter(null,t):t._leave(null,t)):this.getTipElement().classList.contains(nn)?this._leave(null,this):this._enter(null,this))}dispose(){clearTimeout(this._timeout),m.off(this._element,this.constructor.EVENT_KEY),m.off(this._element.closest(".modal"),"hide.bs.modal",this._hideModalHandler),this.tip&&this.tip.parentNode&&this.tip.parentNode.removeChild(this.tip),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.config=null,this.tip=null,super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");var t,e,i;this.isWithContent()&&this._isEnabled&&(i=m.trigger(this._element,this.constructor.Event.SHOW),e=(null===(e=W(this._element))?this._element.ownerDocument.documentElement:e).contains(this._element),!i.defaultPrevented)&&e&&(i=this.getTipElement(),e=I(this.constructor.NAME),i.setAttribute("id",e),this._element.setAttribute("aria-describedby",e),this.setContent(),this.config.animation&&i.classList.add(en),e="function"==typeof this.config.placement?this.config.placement.call(this,i,this._element):this.config.placement,e=this._getAttachment(e),this._addAttachmentClass(e),t=this._getContainer(),G(i,this.constructor.DATA_KEY,this),this._element.ownerDocument.documentElement.contains(this.tip)||(t.appendChild(i),m.trigger(this._element,this.constructor.Event.INSERTED)),this._popper?this._popper.update():this._popper=We(this._element,i,this._getPopperConfig(e)),i.classList.add(nn),(t="function"==typeof this.config.customClass?this.config.customClass():this.config.customClass)&&i.classList.add(...t.split(" ")),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach(t=>{m.on(t,"mouseover",B())}),e=()=>{var t=this._hoverState;this._hoverState=null,m.trigger(this._element,this.constructor.Event.SHOWN),"out"===t&&this._leave(null,this)},this.tip.classList.contains(en)?(i=d(this.tip),m.one(this.tip,"transitionend",e),u(this.tip,i)):e())}hide(){if(this._popper){const i=this.getTipElement();var t,e=()=>{this._isWithActiveTrigger()||(this._hoverState!==on&&i.parentNode&&i.parentNode.removeChild(i),this._cleanTipClass(),this._element.removeAttribute("aria-describedby"),m.trigger(this._element,this.constructor.Event.HIDDEN),this._popper&&(this._popper.destroy(),this._popper=null))};m.trigger(this._element,this.constructor.Event.HIDE).defaultPrevented||(i.classList.remove(nn),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach(t=>m.off(t,"mouseover",B)),this._activeTrigger.click=!1,this._activeTrigger[rn]=!1,this._activeTrigger[sn]=!1,this.tip.classList.contains(en)?(t=d(i),m.one(i,"transitionend",e),u(i,t)):e(),this._hoverState="")}}update(){null!==this._popper&&this._popper.update()}isWithContent(){return Boolean(this.getTitle())}getTipElement(){var t;return this.tip||((t=document.createElement("div")).innerHTML=this.config.template,this.tip=t.children[0]),this.tip}setContent(){var t=this.getTipElement();this.setElementContent(h.findOne(".tooltip-inner",t),this.getTitle()),t.classList.remove(en,nn)}setElementContent(t,e){null!==t&&("object"==typeof e&&r(e)?(e.jquery&&(e=e[0]),this.config.html?e.parentNode!==t&&(t.innerHTML="",t.appendChild(e)):t.textContent=e.textContent):this.config.html?(this.config.sanitize&&(e=zi(e,this.config.allowList,this.config.sanitizeFn)),t.innerHTML=e):t.textContent=e)}getTitle(){let t=this._element.getAttribute("data-bs-original-title");return t=t||("function"==typeof this.config.title?this.config.title.call(this._element):this.config.title)}updateAttachment(t){return"right"===t?"end":"left"===t?"start":t}_initializeOnDelegatedTarget(t,e){var i=this.constructor.DATA_KEY;return(e=e||a(t.delegateTarget,i))||(e=new this.constructor(t.delegateTarget,this._getDelegateConfig()),G(t.delegateTarget,i,e)),e}_getOffset(){const e=this.config["offset"];return"string"==typeof e?e.split(",").map(t=>Number.parseInt(t,10)):"function"==typeof e?t=>e(t,this._element):e}_getPopperConfig(t){t={placement:t,modifiers:[{name:"flip",options:{altBoundary:!0,fallbackPlacements:this.config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this.config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"onChange",enabled:!0,phase:"afterWrite",fn:t=>this._handlePopperPlacementChange(t)}],onFirstUpdate:t=>{t.options.placement!==t.placement&&this._handlePopperPlacementChange(t)}};return{...t,..."function"==typeof this.config.popperConfig?this.config.popperConfig(t):this.config.popperConfig}}_addAttachmentClass(t){this.getTipElement().classList.add(Vi+"-"+this.updateAttachment(t))}_getContainer(){return!1===this.config.container?document.body:r(this.config.container)?this.config.container:h.findOne(this.config.container)}_getAttachment(t){return Ji[t.toUpperCase()]}_setListeners(){this.config.trigger.split(" ").forEach(t=>{var e;"click"===t?m.on(this._element,this.constructor.Event.CLICK,this.config.selector,t=>this.toggle(t)):"manual"!==t&&(e=t===sn?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,t=t===sn?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT,m.on(this._element,e,this.config.selector,t=>this._enter(t)),m.on(this._element,t,this.config.selector,t=>this._leave(t)))}),this._hideModalHandler=()=>{this._element&&this.hide()},m.on(this._element.closest(".modal"),"hide.bs.modal",this._hideModalHandler),this.config.selector?this.config={...this.config,trigger:"manual",selector:""}:this._fixTitle()}_fixTitle(){var t=this._element.getAttribute("title"),e=typeof this._element.getAttribute("data-bs-original-title");!t&&"string"==e||(this._element.setAttribute("data-bs-original-title",t||""),!t||this._element.getAttribute("aria-label")||this._element.textContent||this._element.setAttribute("aria-label",t),this._element.setAttribute("title",""))}_enter(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusin"===t.type?rn:sn]=!0),e.getTipElement().classList.contains(nn)||e._hoverState===on?e._hoverState=on:(clearTimeout(e._timeout),e._hoverState=on,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(()=>{e._hoverState===on&&e.show()},e.config.delay.show):e.show())}_leave(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusout"===t.type?rn:sn]=e._element.contains(t.relatedTarget)),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState="out",e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(()=>{"out"===e._hoverState&&e.hide()},e.config.delay.hide):e.hide())}_isWithActiveTrigger(){for(const t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1}_getConfig(t){const e=l.getDataAttributes(this._element);return Object.keys(e).forEach(t=>{Zi.has(t)&&delete e[t]}),t&&"object"==typeof t.container&&t.container.jquery&&(t.container=t.container[0]),"number"==typeof(t={...this.constructor.Default,...e,..."object"==typeof t&&t?t:{}}).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),i(Ui,t,this.constructor.DefaultType),t.sanitize&&(t.template=zi(t.template,t.allowList,t.sanitizeFn)),t}_getDelegateConfig(){var t={};if(this.config)for(const e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t}_cleanTipClass(){const e=this.getTipElement();var t=e.getAttribute("class").match(Xi);null!==t&&0<t.length&&t.map(t=>t.trim()).forEach(t=>e.classList.remove(t))}_handlePopperPlacementChange(t){t=t.state;t&&(this.tip=t.elements.popper,this._cleanTipClass(),this._addAttachmentClass(this._getAttachment(t.placement)))}static jQueryInterface(i){return this.each(function(){let t=a(this,Gi);var e="object"==typeof i&&i;if((t||!/dispose|hide/.test(i))&&(t=t||new an(this,e),"string"==typeof i)){if(void 0===t[i])throw new TypeError(`No method named "${i}"`);t[i]()}})}}t(Ui,an);const ln="popover",cn="bs.popover",P="."+cn,dn="bs-popover",un=new RegExp(`(^|\\s)${dn}\\S+`,"g"),hn={...an.Default,placement:"right",offset:[0,8],trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'},pn={...an.DefaultType,content:"(string|element|function)"},fn={HIDE:"hide"+P,HIDDEN:"hidden"+P,SHOW:"show"+P,SHOWN:"shown"+P,INSERTED:"inserted"+P,CLICK:"click"+P,FOCUSIN:"focusin"+P,FOCUSOUT:"focusout"+P,MOUSEENTER:"mouseenter"+P,MOUSELEAVE:"mouseleave"+P};class mn extends an{static get Default(){return hn}static get NAME(){return ln}static get DATA_KEY(){return cn}static get Event(){return fn}static get EVENT_KEY(){return P}static get DefaultType(){return pn}isWithContent(){return this.getTitle()||this._getContent()}setContent(){var t=this.getTipElement();this.setElementContent(h.findOne(".popover-header",t),this.getTitle());let e=this._getContent();"function"==typeof e&&(e=e.call(this._element)),this.setElementContent(h.findOne(".popover-body",t),e),t.classList.remove("fade","show")}_addAttachmentClass(t){this.getTipElement().classList.add(dn+"-"+this.updateAttachment(t))}_getContent(){return this._element.getAttribute("data-bs-content")||this.config.content}_cleanTipClass(){const e=this.getTipElement();var t=e.getAttribute("class").match(un);null!==t&&0<t.length&&t.map(t=>t.trim()).forEach(t=>e.classList.remove(t))}static jQueryInterface(i){return this.each(function(){let t=a(this,cn);var e="object"==typeof i?i:null;if((t||!/dispose|hide/.test(i))&&(t||(t=new mn(this,e),G(this,cn,t)),"string"==typeof i)){if(void 0===t[i])throw new TypeError(`No method named "${i}"`);t[i]()}})}}t(ln,mn);const gn="scrollspy",yn="bs.scrollspy",vn="."+yn;const bn={offset:10,method:"auto",target:""},wn={offset:"number",method:"string",target:"(string|element)"};vn,vn;vn;const _n="dropdown-item",kn="active",xn=".nav-link",Tn=".list-group-item",Sn="position";class Cn extends s{constructor(t,e){super(t),this._scrollElement="BODY"===this._element.tagName?window:this._element,this._config=this._getConfig(e),this._selector=`${this._config.target} ${xn}, ${this._config.target} ${Tn}, ${this._config.target} .`+_n,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,m.on(this._scrollElement,"scroll.bs.scrollspy",()=>this._process()),this.refresh(),this._process()}static get Default(){return bn}static get DATA_KEY(){return yn}refresh(){var t=this._scrollElement===this._scrollElement.window?"offset":Sn;const n="auto"===this._config.method?t:this._config.method,o=n===Sn?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),h.find(this._selector).map(t=>{var t=F(t),e=t?h.findOne(t):null;if(e){var i=e.getBoundingClientRect();if(i.width||i.height)return[l[n](e).top+o,t]}return null}).filter(t=>t).sort((t,e)=>t[0]-e[0]).forEach(t=>{this._offsets.push(t[0]),this._targets.push(t[1])})}dispose(){super.dispose(),m.off(this._scrollElement,vn),this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null}_getConfig(e){if("string"!=typeof(e={...bn,..."object"==typeof e&&e?e:{}}).target&&r(e.target)){let t=e.target["id"];t||(t=I(gn),e.target.id=t),e.target="#"+t}return i(gn,e,wn),e}_getScrollTop(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){var e=this._getScrollTop()+this._config.offset,t=this._getScrollHeight(),i=this._config.offset+t-this._getOffsetHeight();if(this._scrollHeight!==t&&this.refresh(),i<=e)t=this._targets[this._targets.length-1],this._activeTarget!==t&&this._activate(t);else if(this._activeTarget&&e<this._offsets[0]&&0<this._offsets[0])this._activeTarget=null,this._clear();else for(let t=this._offsets.length;t--;)this._activeTarget!==this._targets[t]&&e>=this._offsets[t]&&(void 0===this._offsets[t+1]||e<this._offsets[t+1])&&this._activate(this._targets[t])}_activate(e){this._activeTarget=e,this._clear();var t=this._selector.split(",").map(t=>t+`[data-bs-target="${e}"],${t}[href="${e}"]`),t=h.findOne(t.join(","));t.classList.contains(_n)?(h.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(kn),t.classList.add(kn)):(t.classList.add(kn),h.parents(t,".nav, .list-group").forEach(t=>{h.prev(t,xn+", "+Tn).forEach(t=>t.classList.add(kn)),h.prev(t,".nav-item").forEach(t=>{h.children(t,xn).forEach(t=>t.classList.add(kn))})})),m.trigger(this._scrollElement,"activate.bs.scrollspy",{relatedTarget:e})}_clear(){h.find(this._selector).filter(t=>t.classList.contains(kn)).forEach(t=>t.classList.remove(kn))}static jQueryInterface(i){return this.each(function(){let t=a(this,yn);var e="object"==typeof i&&i;if(t=t||new Cn(this,e),"string"==typeof i){if(void 0===t[i])throw new TypeError(`No method named "${i}"`);t[i]()}})}}m.on(window,"load.bs.scrollspy.data-api",()=>{h.find('[data-bs-spy="scroll"]').forEach(t=>new Cn(t,l.getDataAttributes(t)))}),t(gn,Cn);const En="bs.tab";En;const Dn="active",An=".active",Ln=":scope > li > .active";class On extends s{static get DATA_KEY(){return En}show(){if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&this._element.classList.contains(Dn)||Y(this._element))){let t;var e=o(this._element),i=this._element.closest(".nav, .list-group"),n=(i&&(n="UL"===i.nodeName||"OL"===i.nodeName?Ln:An,t=(t=h.find(n,i))[t.length-1]),t?m.trigger(t,"hide.bs.tab",{relatedTarget:this._element}):null);m.trigger(this._element,"show.bs.tab",{relatedTarget:t}).defaultPrevented||null!==n&&n.defaultPrevented||(this._activate(this._element,i),n=()=>{m.trigger(t,"hidden.bs.tab",{relatedTarget:this._element}),m.trigger(this._element,"shown.bs.tab",{relatedTarget:t})},e?this._activate(e,e.parentNode,n):n())}}_activate(t,e,i){const n=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?h.children(e,An):h.find(Ln,e))[0];var e=i&&n&&n.classList.contains("fade"),o=()=>this._transitionComplete(t,n,i);n&&e?(e=d(n),n.classList.remove("show"),m.one(n,"transitionend",o),u(n,e)):o()}_transitionComplete(t,e,i){var n;e&&(e.classList.remove(Dn),(n=h.findOne(":scope > .dropdown-menu .active",e.parentNode))&&n.classList.remove(Dn),"tab"===e.getAttribute("role"))&&e.setAttribute("aria-selected",!1),t.classList.add(Dn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),z(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&t.parentNode.classList.contains("dropdown-menu")&&(t.closest(".dropdown")&&h.find(".dropdown-toggle").forEach(t=>t.classList.add(Dn)),t.setAttribute("aria-expanded",!0)),i&&i()}static jQueryInterface(e){return this.each(function(){var t=a(this,En)||new On(this);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}})}}m.on(document,"click.bs.tab.data-api",'[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',function(t){t.preventDefault(),(a(this,En)||new On(this)).show()}),t("tab",On);const $n="bs.toast";Qt="."+$n;const Mn="click.dismiss"+Qt,jn="show",Pn="showing",Nn={animation:"boolean",autohide:"boolean",delay:"number"},In={animation:!0,autohide:!0,delay:5e3};class Hn extends s{constructor(t,e){super(t),this._config=this._getConfig(e),this._timeout=null,this._setListeners()}static get DefaultType(){return Nn}static get Default(){return In}static get DATA_KEY(){return $n}show(){var t,e;m.trigger(this._element,"show.bs.toast").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),t=()=>{this._element.classList.remove(Pn),this._element.classList.add(jn),m.trigger(this._element,"shown.bs.toast"),this._config.autohide&&(this._timeout=setTimeout(()=>{this.hide()},this._config.delay))},this._element.classList.remove("hide"),z(this._element),this._element.classList.add(Pn),this._config.animation?(e=d(this._element),m.one(this._element,"transitionend",t),u(this._element,e)):t())}hide(){var t,e;this._element.classList.contains(jn)&&!m.trigger(this._element,"hide.bs.toast").defaultPrevented&&(t=()=>{this._element.classList.add("hide"),m.trigger(this._element,"hidden.bs.toast")},this._element.classList.remove(jn),this._config.animation?(e=d(this._element),m.one(this._element,"transitionend",t),u(this._element,e)):t())}dispose(){this._clearTimeout(),this._element.classList.contains(jn)&&this._element.classList.remove(jn),m.off(this._element,Mn),super.dispose(),this._config=null}_getConfig(t){return t={...In,...l.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}},i("toast",t,this.constructor.DefaultType),t}_setListeners(){m.on(this._element,Mn,'[data-bs-dismiss="toast"]',()=>this.hide())}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(i){return this.each(function(){let t=a(this,$n);var e="object"==typeof i&&i;if(t=t||new Hn(this,e),"string"==typeof i){if(void 0===t[i])throw new TypeError(`No method named "${i}"`);t[i](this)}})}}return t("toast",Hn),{Alert:ct,Button:ht,Carousel:y,Collapse:Ot,Dropdown:$,Modal:Si,Offcanvas:qi,Popover:mn,ScrollSpy:Cn,Tab:On,Toast:Hn,Tooltip:an}}),!function(t){var e;"function"==typeof define&&define.amd?define("jquery-typeahead",["jquery"],t):"object"==typeof module&&module.exports?module.exports=(void 0===e&&(e="undefined"!=typeof window?require("jquery"):require("jquery")(void 0)),t(e)):t(jQuery)}(function(A){"use strict";function r(t,e){this.rawQuery=t.val()||"",this.query=t.val()||"",this.selector=t[0].selector,this.deferred=null,this.tmpSource={},this.source={},this.dynamicGroups=[],this.hasDynamicGroups=!1,this.generatedGroupCount=0,this.groupBy="group",this.groups=[],this.searchGroups=[],this.generateGroups=[],this.requestGroups=[],this.result=[],this.tmpResult={},this.groupTemplate="",this.resultHtml=null,this.resultCount=0,this.resultCountPerGroup={},this.options=e,this.node=t,this.namespace="."+this.helper.slugify.call(this,this.selector)+".typeahead",this.isContentEditable=void 0!==this.node.attr("contenteditable")&&"false"!==this.node.attr("contenteditable"),this.container=null,this.resultContainer=null,this.item=null,this.items=null,this.comparedItems=null,this.xhr={},this.hintIndex=null,this.filters={dropdown:{},dynamic:{}},this.dropdownFilter={static:[],dynamic:[]},this.dropdownFilterAll=null,this.isDropdownEvent=!1,this.requests={},this.backdrop={},this.hint={},this.label={},this.hasDragged=!1,this.focusOnly=!1,this.displayEmptyTemplate,this.__construct()}var i,n={input:null,minLength:2,maxLength:!(window.Typeahead={version:"2.11.1"}),maxItem:8,dynamic:!1,delay:300,order:null,offset:!1,hint:!1,accent:!1,highlight:!0,multiselect:null,group:!1,groupOrder:null,maxItemPerGroup:null,dropdownFilter:!1,dynamicFilter:null,backdrop:!1,backdropOnFocus:!1,cache:!1,ttl:36e5,compression:!1,searchOnFocus:!1,blurOnTab:!0,resultContainer:null,generateOnLoad:null,mustSelectItem:!1,href:null,display:["display"],template:null,templateValue:null,groupTemplate:null,correlativeTemplate:!1,emptyTemplate:!1,cancelButton:!0,loadingAnimation:!0,asyncResult:!1,filter:!0,matcher:null,source:null,callback:{onInit:null,onReady:null,onShowLayout:null,onHideLayout:null,onSearch:null,onResult:null,onLayoutBuiltBefore:null,onLayoutBuiltAfter:null,onNavigateBefore:null,onNavigateAfter:null,onEnter:null,onLeave:null,onClickBefore:null,onClickAfter:null,onDropdownFilter:null,onSendRequest:null,onReceiveRequest:null,onPopulateSource:null,onCacheSave:null,onSubmit:null,onCancel:null},selector:{container:"typeahead__container",result:"typeahead__result",list:"typeahead__list",group:"typeahead__group",item:"typeahead__item",empty:"typeahead__empty",display:"typeahead__display",query:"typeahead__query",filter:"typeahead__filter",filterButton:"typeahead__filter-button",dropdown:"typeahead__dropdown",dropdownItem:"typeahead__dropdown-item",labelContainer:"typeahead__label-container",label:"typeahead__label",button:"typeahead__button",backdrop:"typeahead__backdrop",hint:"typeahead__hint",cancelButton:"typeahead__cancel-button"},debug:!1},o={from:"ãàáäâẽèéëêìíïîõòóöôùúüûñç",to:"aaaaaeeeeeiiiiooooouuuunc"},s=~window.navigator.appVersion.indexOf("MSIE 9."),a=~window.navigator.appVersion.indexOf("MSIE 10"),l=!!~window.navigator.userAgent.indexOf("Trident")&&~window.navigator.userAgent.indexOf("rv:11"),e=(r.prototype={_validateCacheMethod:function(t){var e;if(!0===t)t="localStorage";else if("string"==typeof t&&!~["localStorage","sessionStorage"].indexOf(t))return!1;e=void 0!==window[t];try{window[t].setItem("typeahead","typeahead"),window[t].removeItem("typeahead")}catch(t){e=!1}return e&&t||!1},extendOptions:function(){if(this.options.cache=this._validateCacheMethod(this.options.cache),!this.options.compression||"object"==typeof LZString&&this.options.cache||(this.options.compression=!1),this.options.maxLength&&!isNaN(this.options.maxLength)||(this.options.maxLength=1/0),void 0!==this.options.maxItem&&~[0,!1].indexOf(this.options.maxItem)&&(this.options.maxItem=1/0),this.options.maxItemPerGroup&&!/^\d+$/.test(this.options.maxItemPerGroup)&&(this.options.maxItemPerGroup=null),this.options.display&&!Array.isArray(this.options.display)&&(this.options.display=[this.options.display]),this.options.multiselect&&(this.items=[],this.comparedItems=[],"string"==typeof this.options.multiselect.matchOn)&&(this.options.multiselect.matchOn=[this.options.multiselect.matchOn]),!this.options.group||Array.isArray(this.options.group)||("string"==typeof this.options.group?this.options.group={key:this.options.group}:"boolean"==typeof this.options.group&&(this.options.group={key:"group"}),this.options.group.key=this.options.group.key||"group"),this.options.highlight&&!~["any",!0].indexOf(this.options.highlight)&&(this.options.highlight=!1),this.options.dropdownFilter&&this.options.dropdownFilter instanceof Object){Array.isArray(this.options.dropdownFilter)||(this.options.dropdownFilter=[this.options.dropdownFilter]);for(var t=0,e=this.options.dropdownFilter.length;t<e;++t)this.dropdownFilter[this.options.dropdownFilter[t].value?"static":"dynamic"].push(this.options.dropdownFilter[t])}this.options.dynamicFilter&&!Array.isArray(this.options.dynamicFilter)&&(this.options.dynamicFilter=[this.options.dynamicFilter]),this.options.accent&&("object"==typeof this.options.accent?this.options.accent.from&&this.options.accent.to&&(this.options.accent.from.length,this.options.accent.to.length):this.options.accent=o),this.options.groupTemplate&&(this.groupTemplate=this.options.groupTemplate),this.options.resultContainer&&("string"==typeof this.options.resultContainer&&(this.options.resultContainer=A(this.options.resultContainer)),this.options.resultContainer instanceof A)&&this.options.resultContainer[0]&&(this.resultContainer=this.options.resultContainer),this.options.group&&this.options.group.key&&(this.groupBy=this.options.group.key),this.options.callback&&this.options.callback.onClick&&(this.options.callback.onClickBefore=this.options.callback.onClick,delete this.options.callback.onClick),this.options.callback&&this.options.callback.onNavigate&&(this.options.callback.onNavigateBefore=this.options.callback.onNavigate,delete this.options.callback.onNavigate),this.options=A.extend(!0,{},n,this.options)},unifySourceFormat:function(){var t,e,i;for(t in this.dynamicGroups=[],Array.isArray(this.options.source)&&(this.options.source={group:{data:this.options.source}}),"string"==typeof this.options.source&&(this.options.source={group:{ajax:{url:this.options.source}}}),this.options.source.ajax&&(this.options.source={group:{ajax:this.options.source.ajax}}),(this.options.source.url||this.options.source.data)&&(this.options.source={group:this.options.source}),this.options.source)if(this.options.source.hasOwnProperty(t)){if(i=(e="string"==typeof(e=this.options.source[t])?{ajax:{url:e}}:e).url||e.ajax,Array.isArray(i)?(e.ajax="string"==typeof i[0]?{url:i[0]}:i[0],e.ajax.path=e.ajax.path||i[1]||null):"object"==typeof e.url?e.ajax=e.url:"string"==typeof e.url&&(e.ajax={url:e.url}),delete e.url,!e.data&&!e.ajax)return!1;e.display&&!Array.isArray(e.display)&&(e.display=[e.display]),e.minLength=("number"==typeof e.minLength?e:this.options).minLength,e.maxLength=("number"==typeof e.maxLength?e:this.options).maxLength,e.dynamic="boolean"==typeof e.dynamic||this.options.dynamic,e.minLength>e.maxLength&&(e.minLength=e.maxLength),this.options.source[t]=e,this.options.source[t].dynamic&&this.dynamicGroups.push(t),e.cache=void 0!==e.cache?this._validateCacheMethod(e.cache):this.options.cache,!e.compression||"object"==typeof LZString&&e.cache||(e.compression=!1)}return this.hasDynamicGroups=this.options.dynamic||!!this.dynamicGroups.length,!0},init:function(){this.helper.executeCallback.call(this,this.options.callback.onInit,[this.node]),this.container=this.node.closest("."+this.options.selector.container)},delegateEvents:function(){var e,i=this,t=["focus"+this.namespace,"input"+this.namespace,"propertychange"+this.namespace,"keydown"+this.namespace,"keyup"+this.namespace,"search"+this.namespace,"generate"+this.namespace],n=(A("html").on("touchmove",function(){i.hasDragged=!0}).on("touchstart",function(){i.hasDragged=!1}),this.node.closest("form").on("submit",function(t){if(!i.options.mustSelectItem||!i.helper.isEmpty(i.item))return i.options.backdropOnFocus||i.hideLayout(),i.options.callback.onSubmit?i.helper.executeCallback.call(i,i.options.callback.onSubmit,[i.node,this,i.item||i.items,t]):void 0;t.preventDefault()}).on("reset",function(){setTimeout(function(){i.node.trigger("input"+i.namespace),i.hideLayout()})}),!1);this.node.attr("placeholder")&&(a||l)&&(e=!0,this.node.on("focusin focusout",function(){e=!(this.value||!this.placeholder)}),this.node.on("input",function(t){e&&(t.stopImmediatePropagation(),e=!1)})),this.node.off(this.namespace).on(t.join(" "),function(t,e){switch(t.type){case"generate":i.generateSource(Object.keys(i.options.source));break;case"focus":i.focusOnly?i.focusOnly=!1:(i.options.backdropOnFocus&&(i.buildBackdropLayout(),i.showLayout()),i.options.searchOnFocus&&!i.item&&(i.deferred=A.Deferred(),i.assignQuery(),i.generateSource()));break;case"keydown":8===t.keyCode&&i.options.multiselect&&i.options.multiselect.cancelOnBackspace&&""===i.query&&i.items.length?i.cancelMultiselectItem(i.items.length-1,null,t):t.keyCode&&~[9,13,27,38,39,40].indexOf(t.keyCode)&&(n=!0,i.navigate(t));break;case"keyup":s&&i.node[0].value.replace(/^\s+/,"").toString().length<i.query.length&&i.node.trigger("input"+i.namespace);break;case"propertychange":if(n){n=!1;break}case"input":i.deferred=A.Deferred(),i.assignQuery(),""===i.rawQuery&&""===i.query&&(t.originalEvent=e||{},i.helper.executeCallback.call(i,i.options.callback.onCancel,[i.node,i.item,t]),i.item=null),i.options.cancelButton&&i.toggleCancelButtonVisibility(),i.options.hint&&i.hint.container&&""!==i.hint.container.val()&&0!==i.hint.container.val().indexOf(i.rawQuery)&&(i.hint.container.val(""),i.isContentEditable)&&i.hint.container.text(""),i.hasDynamicGroups?i.helper.typeWatch(function(){i.generateSource()},i.options.delay):i.generateSource();break;case"search":i.searchResult(),i.buildLayout(),i.result.length||i.searchGroups.length&&i.displayEmptyTemplate?i.showLayout():i.hideLayout(),i.deferred&&i.deferred.resolve()}return i.deferred&&i.deferred.promise()}),this.options.generateOnLoad&&this.node.trigger("generate"+this.namespace)},assignQuery:function(){this.isContentEditable?this.rawQuery=this.node.text():this.rawQuery=this.node.val().toString(),this.rawQuery=this.rawQuery.replace(/^\s+/,""),this.rawQuery!==this.query&&(this.query=this.rawQuery)},filterGenerateSource:function(){if(this.searchGroups=[],this.generateGroups=[],!this.focusOnly||this.options.multiselect)for(var t in this.options.source)if(this.options.source.hasOwnProperty(t)&&this.query.length>=this.options.source[t].minLength&&this.query.length<=this.options.source[t].maxLength){if(this.filters.dropdown&&"group"===this.filters.dropdown.key&&this.filters.dropdown.value!==t)continue;if(this.searchGroups.push(t),!this.options.source[t].dynamic&&this.source[t])continue;this.generateGroups.push(t)}},generateSource:function(t){if(this.filterGenerateSource(),this.generatedGroupCount=0,Array.isArray(t)&&t.length)this.generateGroups=t;else if(!this.generateGroups.length)return void this.node.trigger("search"+this.namespace);if(this.requestGroups=[],this.options.loadingAnimation&&this.container.addClass("loading"),!this.helper.isEmpty(this.xhr)){for(var e in this.xhr)this.xhr.hasOwnProperty(e)&&this.xhr[e].abort();this.xhr={}}for(var i,n,o,s,r,a,l=this,c=(e=0,this.generateGroups.length);e<c;++e){if(i=this.generateGroups[e],s=(o=this.options.source[i]).cache,a=o.compression,this.options.asyncResult&&delete this.source[i],s&&(r=window[s].getItem("TYPEAHEAD_"+this.selector+":"+i))){a&&(r=LZString.decompressFromUTF16(r)),a=!1;try{(r=JSON.parse(r+"")).data&&r.ttl>(new Date).getTime()?(this.populateSource(r.data,i),a=!0):window[s].removeItem("TYPEAHEAD_"+this.selector+":"+i)}catch(t){}if(a)continue}!o.data||o.ajax?o.ajax&&(this.requests[i]||(this.requests[i]=this.generateRequestObject(i)),this.requestGroups.push(i)):"function"==typeof o.data?(n=o.data.call(this),Array.isArray(n)?l.populateSource(n,i):"function"==typeof n.promise&&function(e){A.when(n).then(function(t){t&&Array.isArray(t)&&l.populateSource(t,e)})}(i)):this.populateSource(A.extend(!0,[],o.data),i)}return this.requestGroups.length&&this.handleRequests(),this.options.asyncResult&&this.searchGroups.length!==this.generateGroups&&this.node.trigger("search"+this.namespace),!!this.generateGroups.length},generateRequestObject:function(i){var n=this,o=this.options.source[i],t={request:{url:o.ajax.url||null,dataType:"json",beforeSend:function(t,e){n.xhr[i]=t;t=n.requests[i].callback.beforeSend||o.ajax.beforeSend;"function"==typeof t&&t.apply(null,arguments)}},callback:{beforeSend:null,done:null,fail:null,then:null,always:null},extra:{path:o.ajax.path||null,group:i},validForGroup:[i]};if("function"!=typeof o.ajax&&(o.ajax instanceof Object&&(t=this.extendXhrObject(t,o.ajax)),1<Object.keys(this.options.source).length))for(var e in this.requests)!this.requests.hasOwnProperty(e)||this.requests[e].isDuplicated||t.request.url&&t.request.url===this.requests[e].request.url&&(this.requests[e].validForGroup.push(i),t.isDuplicated=!0,delete t.validForGroup);return t},extendXhrObject:function(t,e){return"object"==typeof e.callback&&(t.callback=e.callback,delete e.callback),"function"==typeof e.beforeSend&&(t.callback.beforeSend=e.beforeSend,delete e.beforeSend),t.request=A.extend(!0,t.request,e),"jsonp"!==t.request.dataType.toLowerCase()||t.request.jsonpCallback||(t.request.jsonpCallback="callback_"+t.extra.group),t},handleRequests:function(){var t,c=this,d=this.requestGroups.length;if(!1!==this.helper.executeCallback.call(this,this.options.callback.onSendRequest,[this.node,this.query]))for(var e=0,i=this.requestGroups.length;e<i;++e)t=this.requestGroups[e],this.requests[t].isDuplicated||function(t,r){if("function"==typeof c.options.source[t].ajax){var e=c.options.source[t].ajax.call(c,c.query);if("object"!=typeof(r=c.extendXhrObject(c.generateRequestObject(t),"object"==typeof e?e:{})).request||!r.request.url)return c.populateSource([],t);c.requests[t]=r}var a,i=!1,l={};if(~r.request.url.indexOf("{{query}}")&&(i||(r=A.extend(!0,{},r),i=!0),r.request.url=r.request.url.replace("{{query}}",encodeURIComponent(c.query))),r.request.data)for(var n in r.request.data)if(r.request.data.hasOwnProperty(n)&&~String(r.request.data[n]).indexOf("{{query}}")){i||(r=A.extend(!0,{},r),i=!0),r.request.data[n]=r.request.data[n].replace("{{query}}",c.query);break}A.ajax(r.request).done(function(t,e,i){for(var n,o=0,s=r.validForGroup.length;o<s;o++)n=r.validForGroup[o],"function"==typeof(a=c.requests[n]).callback.done&&(l[n]=a.callback.done.call(c,t,e,i))}).fail(function(t,e,i){for(var n=0,o=r.validForGroup.length;n<o;n++)(a=c.requests[r.validForGroup[n]]).callback.fail instanceof Function&&a.callback.fail.call(c,t,e,i)}).always(function(t,e,i){for(var n,o=0,s=r.validForGroup.length;o<s;o++){if(n=r.validForGroup[o],(a=c.requests[n]).callback.always instanceof Function&&a.callback.always.call(c,t,e,i),"abort"===e)return;c.populateSource((null!==t&&"function"==typeof t.promise?[]:l[n])||t,a.extra.group,a.extra.path||a.request.path),0==--d&&c.helper.executeCallback.call(c,c.options.callback.onReceiveRequest,[c.node,c.query])}}).then(function(t,e){for(var i=0,n=r.validForGroup.length;i<n;i++)(a=c.requests[r.validForGroup[i]]).callback.then instanceof Function&&a.callback.then.call(c,t,e)})}(t,this.requests[t])},populateSource:function(i,t,e){var n=this,o=this.options.source[t],s=o.ajax&&o.data;e&&"string"==typeof e&&(i=this.helper.namespace.call(this,e,i)),Array.isArray(i)||(i=[]),s&&("function"==typeof s&&(s=s()),Array.isArray(s))&&(i=i.concat(s));for(var r,a=o.display?"compiled"===o.display[0]?o.display[1]:o.display[0]:"compiled"===this.options.display[0]?this.options.display[1]:this.options.display[0],l=0,c=i.length;l<c;l++)null!==i[l]&&"boolean"!=typeof i[l]&&("string"==typeof i[l]&&((r={})[a]=i[l],i[l]=r),i[l].group=t);if(!this.hasDynamicGroups&&this.dropdownFilter.dynamic.length)for(var d,u,h={},l=0,c=i.length;l<c;l++)for(var p=0,f=this.dropdownFilter.dynamic.length;p<f;p++)d=this.dropdownFilter.dynamic[p].key,(u=i[l][d])&&(this.dropdownFilter.dynamic[p].value||(this.dropdownFilter.dynamic[p].value=[]),h[d]||(h[d]=[]),~h[d].indexOf(u.toLowerCase())||(h[d].push(u.toLowerCase()),this.dropdownFilter.dynamic[p].value.push(u)));if(this.options.correlativeTemplate){var s=o.template||this.options.template,m="";if(s="function"==typeof s?s.call(this,"",{}):s){if(Array.isArray(this.options.correlativeTemplate))for(l=0,c=this.options.correlativeTemplate.length;l<c;l++)m+="{{"+this.options.correlativeTemplate[l]+"}} ";else m=s.replace(/<.+?>/g," ").replace(/\s{2,}/," ").trim();for(l=0,c=i.length;l<c;l++)i[l].compiled=A("<textarea />").html(m.replace(/\{\{([\w\-\.]+)(?:\|(\w+))?}}/g,function(t,e){return n.helper.namespace.call(n,e,i[l],"get","")}).trim()).text();o.display?~o.display.indexOf("compiled")||o.display.unshift("compiled"):~this.options.display.indexOf("compiled")||this.options.display.unshift("compiled")}}this.options.callback.onPopulateSource&&(i=this.helper.executeCallback.call(this,this.options.callback.onPopulateSource,[this.node,i,t,e])),this.tmpSource[t]=Array.isArray(i)&&i||[];var s=this.options.source[t].cache,o=this.options.source[t].compression,g=this.options.source[t].ttl||this.options.ttl;s&&!window[s].getItem("TYPEAHEAD_"+this.selector+":"+t)&&(this.options.callback.onCacheSave&&(i=this.helper.executeCallback.call(this,this.options.callback.onCacheSave,[this.node,i,t,e])),e=JSON.stringify({data:i,ttl:(new Date).getTime()+g}),o&&(e=LZString.compressToUTF16(e)),window[s].setItem("TYPEAHEAD_"+this.selector+":"+t,e)),this.incrementGeneratedGroup(t)},incrementGeneratedGroup:function(t){if(this.generatedGroupCount++,this.generatedGroupCount===this.generateGroups.length||this.options.asyncResult){this.xhr&&this.xhr[t]&&delete this.xhr[t];for(var e=0,i=this.generateGroups.length;e<i;e++)this.source[this.generateGroups[e]]=this.tmpSource[this.generateGroups[e]];this.hasDynamicGroups||this.buildDropdownItemLayout("dynamic"),this.generatedGroupCount===this.generateGroups.length&&(this.xhr={},this.options.loadingAnimation)&&this.container.removeClass("loading"),this.node.trigger("search"+this.namespace)}},navigate:function(t){var e,i,n,o,s;this.helper.executeCallback.call(this,this.options.callback.onNavigateBefore,[this.node,this.query,t]),27===t.keyCode?(t.preventDefault(),this.query.length?(this.resetInput(),this.node.trigger("input"+this.namespace,[t])):(this.node.blur(),this.hideLayout())):this.result.length&&(i=(s=(e=this.resultContainer.find("."+this.options.selector.item).not("[disabled]")).filter(".active"))[0]?e.index(s):null,n=s[0]?s.attr("data-index"):null,o=null,this.clearActiveItem(),this.helper.executeCallback.call(this,this.options.callback.onLeave,[this.node,null!==i&&e.eq(i)||void 0,null!==n&&this.result[n]||void 0,t]),13===t.keyCode?(t.preventDefault(),0<s.length?"javascript:;"===s.find("a:first")[0].href?s.find("a:first").trigger("click",t):s.find("a:first")[0].click():this.node.closest("form").trigger("submit")):39!==t.keyCode?(9===t.keyCode?this.options.blurOnTab?this.hideLayout():0<s.length?i+1<e.length?(t.preventDefault(),this.addActiveItem(e.eq(o=i+1))):this.hideLayout():e.length?(t.preventDefault(),o=0,this.addActiveItem(e.first())):this.hideLayout():38===t.keyCode?(t.preventDefault(),0<s.length?0<=i-1&&this.addActiveItem(e.eq(o=i-1)):e.length&&(o=e.length-1,this.addActiveItem(e.last()))):40===t.keyCode&&(t.preventDefault(),0<s.length?i+1<e.length&&this.addActiveItem(e.eq(o=i+1)):e.length&&(o=0,this.addActiveItem(e.first()))),n=null!==o?e.eq(o).attr("data-index"):null,this.helper.executeCallback.call(this,this.options.callback.onEnter,[this.node,null!==o&&e.eq(o)||void 0,null!==n&&this.result[n]||void 0,t]),t.preventInputChange&&~[38,40].indexOf(t.keyCode)&&this.buildHintLayout(null!==n&&n<this.result.length?[this.result[n]]:null),this.options.hint&&this.hint.container&&this.hint.container.css("color",t.preventInputChange?this.hint.css.color:null===n&&this.hint.css.color||this.hint.container.css("background-color")||"fff"),s=null===n||t.preventInputChange?this.rawQuery:this.getTemplateValue.call(this,this.result[n]),this.node.val(s),this.isContentEditable&&this.node.text(s),this.helper.executeCallback.call(this,this.options.callback.onNavigateAfter,[this.node,e,null!==o&&e.eq(o).find("a:first")||void 0,null!==n&&this.result[n]||void 0,this.query,t])):null!==i?e.eq(i).find("a:first")[0].click():this.options.hint&&""!==this.hint.container.val()&&this.helper.getCaret(this.node[0])>=this.query.length&&e.filter('[data-index="'+this.hintIndex+'"]').find("a:first")[0].click())},getTemplateValue:function(i){var t,n;if(i)return(t="function"==typeof(t=i.group&&this.options.source[i.group].templateValue||this.options.templateValue)?t.call(this):t)?(n=this,t.replace(/\{\{([\w\-.]+)}}/gi,function(t,e){return n.helper.namespace.call(n,e,i,"get","")})):this.helper.namespace.call(this,i.matchedKey,i).toString()},clearActiveItem:function(){this.resultContainer.find("."+this.options.selector.item).removeClass("active")},addActiveItem:function(t){t.addClass("active")},searchResult:function(){this.resetLayout(),!1!==this.helper.executeCallback.call(this,this.options.callback.onSearch,[this.node,this.query])&&(!this.searchGroups.length||this.options.multiselect&&this.options.multiselect.limit&&this.items.length>=this.options.multiselect.limit||this.searchResultData(),this.helper.executeCallback.call(this,this.options.callback.onResult,[this.node,this.query,this.result,this.resultCount,this.resultCountPerGroup]),this.isDropdownEvent)&&(this.helper.executeCallback.call(this,this.options.callback.onDropdownFilter,[this.node,this.query,this.filters.dropdown,this.result]),this.isDropdownEvent=!1)},searchResultData:function(){var t,e,i,n,o,s,r,a,l=this.groupBy,c=this.query.toLowerCase(),d=this.options.maxItem,u=this.options.maxItemPerGroup,h=this.filters.dynamic&&!this.helper.isEmpty(this.filters.dynamic),p="function"==typeof this.options.matcher&&this.options.matcher;this.options.accent&&(c=this.helper.removeAccent.call(this,c));for(var f=0,m=this.searchGroups.length;f<m;++f)if(S=this.searchGroups[f],(!this.filters.dropdown||"group"!==this.filters.dropdown.key||this.filters.dropdown.value===S)&&(i=(void 0!==this.options.source[S].filter?this.options.source[S]:this.options).filter,o="function"==typeof this.options.source[S].matcher&&this.options.source[S].matcher||p,this.source[S]))for(var g=0,y=this.source[S].length;g<y&&(!(this.resultItemCount>=d)||this.options.callback.onResult);g++)if((!h||this.dynamicFilter.validate.apply(this,[this.source[S][g]]))&&null!==(t=this.source[S][g])&&"boolean"!=typeof t&&(!this.options.multiselect||this.isMultiselectUniqueData(t))&&(!this.filters.dropdown||(t[this.filters.dropdown.key]||"").toLowerCase()===(this.filters.dropdown.value||"").toLowerCase())){if((a="group"===l?S:t[l]||t.group)&&!this.tmpResult[a]&&(this.tmpResult[a]=[],this.resultCountPerGroup[a]=0),u&&"group"===l&&this.tmpResult[a].length>=u&&!this.options.callback.onResult)break;for(var v=0,b=(C=this.options.source[S].display||this.options.display).length;v<b;++v){if(!1!==i){if(void 0===(e=/\./.test(C[v])?this.helper.namespace.call(this,C[v],t):t[C[v]])||""===e)continue;e=this.helper.cleanStringFromScript(e)}if("function"==typeof i){if(void 0===(n=i.call(this,t,e)))break;if(!n)continue;"object"==typeof n&&(t=n)}if(~[void 0,!0].indexOf(i)){if(null===e)continue;if(n=(n=e).toString().toLowerCase(),s=(n=this.options.accent?this.helper.removeAccent.call(this,n):n).indexOf(c),this.options.correlativeTemplate&&"compiled"===C[v]&&s<0&&/\s/.test(c))for(var w=!0,_=n,k=0,x=(r=c.split(" ")).length;k<x;k++)if(""!==r[k]){if(!~_.indexOf(r[k])){w=!1;break}_=_.replace(r[k],"")}if(s<0&&!w)continue;if(this.options.offset&&0!==s)continue;if(o){if(void 0===(s=o.call(this,t,e)))break;if(!s)continue;"object"==typeof s&&(t=s)}}if(this.resultCount++,this.resultCountPerGroup[a]++,this.resultItemCount<d){if(u&&this.tmpResult[a].length>=u)break;this.tmpResult[a].push(A.extend(!0,{matchedKey:C[v]},t)),this.resultItemCount++}break}if(!this.options.callback.onResult){if(this.resultItemCount>=d)break;if(u&&this.tmpResult[a].length>=u&&"group"===l)break}}if(this.options.order){var T,S,C=[];for(S in this.tmpResult)if(this.tmpResult.hasOwnProperty(S)){for(f=0,m=this.tmpResult[S].length;f<m;f++)T=this.options.source[this.tmpResult[S][f].group].display||this.options.display,~C.indexOf(T[0])||C.push(T[0]);this.tmpResult[S].sort(this.helper.sort(C,"asc"===this.options.order,function(t){return t?t.toString().toUpperCase():""}))}}for(var E,D=[],f=0,m=(E="function"==typeof this.options.groupOrder?this.options.groupOrder.apply(this,[this.node,this.query,this.tmpResult,this.resultCount,this.resultCountPerGroup]):Array.isArray(this.options.groupOrder)?this.options.groupOrder:"string"==typeof this.options.groupOrder&&~["asc","desc"].indexOf(this.options.groupOrder)?Object.keys(this.tmpResult).sort(this.helper.sort([],"asc"===this.options.groupOrder,function(t){return t.toString().toUpperCase()})):Object.keys(this.tmpResult)).length;f<m;f++)D=D.concat(this.tmpResult[E[f]]||[]);this.groups=JSON.parse(JSON.stringify(E)),this.result=D},buildLayout:function(){this.buildHtmlLayout(),this.buildBackdropLayout(),this.buildHintLayout(),this.options.callback.onLayoutBuiltBefore&&(this.tmpResultHtml=this.helper.executeCallback.call(this,this.options.callback.onLayoutBuiltBefore,[this.node,this.query,this.result,this.resultHtml])),this.tmpResultHtml instanceof A?this.resultContainer.html(this.tmpResultHtml):this.resultHtml instanceof A&&this.resultContainer.html(this.resultHtml),this.options.callback.onLayoutBuiltAfter&&this.helper.executeCallback.call(this,this.options.callback.onLayoutBuiltAfter,[this.node,this.query,this.result])},buildHtmlLayout:function(){if(!1!==this.options.resultContainer){var c;if(this.resultContainer||(this.resultContainer=A("<div/>",{class:this.options.selector.result}),this.container.append(this.resultContainer)),!this.result.length&&this.generatedGroupCount===this.generateGroups.length)if(this.options.multiselect&&this.options.multiselect.limit&&this.items.length>=this.options.multiselect.limit)c=this.options.multiselect.limitTemplate?"function"==typeof this.options.multiselect.limitTemplate?this.options.multiselect.limitTemplate.call(this,this.query):this.options.multiselect.limitTemplate.replace(/\{\{query}}/gi,A("<div>").text(this.helper.cleanStringFromScript(this.query)).html()):"Can't select more than "+this.items.length+" items.";else{if(!this.options.emptyTemplate||""===this.query)return;c="function"==typeof this.options.emptyTemplate?this.options.emptyTemplate.call(this,this.query):this.options.emptyTemplate.replace(/\{\{query}}/gi,A("<div>").text(this.helper.cleanStringFromScript(this.query)).html())}this.displayEmptyTemplate=!!c;var o=this.query.toLowerCase(),d=(this.options.accent&&(o=this.helper.removeAccent.call(this,o)),this),t=this.groupTemplate||"<ul></ul>",u=!1;this.groupTemplate?t=A(t.replace(/<([^>]+)>\{\{(.+?)}}<\/[^>]+>/g,function(t,e,i,n,o){var s="",r="group"===i?d.groups:[i];if(!d.result.length)return!0===u?"":(u=!0,"<"+e+' class="'+d.options.selector.empty+'">'+c+"</"+e+">");for(var a=0,l=r.length;a<l;++a)s+="<"+e+' data-group-template="'+r[a]+'"><ul></ul></'+e+">";return s})):(t=A(t),this.result.length||t.append(c instanceof A?c:'<li class="'+d.options.selector.empty+'">'+c+"</li>")),t.addClass(this.options.selector.list+(this.helper.isEmpty(this.result)?" empty":""));for(var e,i,s,n,r,a,l,h,p,f,m=this.groupTemplate&&this.result.length&&d.groups||[],g=0,y=this.result.length;g<y;++g)e=(s=this.result[g]).group,n=!this.options.multiselect&&this.options.source[s.group].href||this.options.href,l=[],h=this.options.source[s.group].display||this.options.display,this.options.group&&(e=s[this.options.group.key],this.options.group.template&&("function"==typeof this.options.group.template?i=this.options.group.template.call(this,s):"string"==typeof this.options.group.template&&(i=this.options.group.template.replace(/\{\{([\w\-\.]+)}}/gi,function(t,e){return d.helper.namespace.call(d,e,s,"get","")}))),t.find('[data-search-group="'+e+'"]')[0]||(this.groupTemplate?t.find('[data-group-template="'+e+'"] ul'):t).append(A("<li/>",{class:d.options.selector.group,html:A("<a/>",{href:"javascript:;",html:i||e,tabindex:-1}),"data-search-group":e}))),this.groupTemplate&&m.length&&~(f=m.indexOf(e||s.group))&&m.splice(f,1),f=A("<li/>",{class:d.options.selector.item+" "+d.options.selector.group+"-"+this.helper.slugify.call(this,e),disabled:!!s.disabled,"data-group":e,"data-index":g,html:A("<a/>",{href:n&&!s.disabled?s.href=d.generateHref.call(d,n,s):"javascript:;",html:function(){if(r=s.group&&d.options.source[s.group].template||d.options.template)"function"==typeof r&&(r=r.call(d,d.query,s)),a=r.replace(/\{\{([^\|}]+)(?:\|([^}]+))*}}/gi,function(t,e,i){var n=d.helper.cleanStringFromScript(String(d.helper.namespace.call(d,e,s,"get","")));return~(i=i&&i.split("|")||[]).indexOf("slugify")&&(n=d.helper.slugify.call(d,n)),~i.indexOf("raw")||!0===d.options.highlight&&o&&~h.indexOf(e)&&(n=d.helper.highlight.call(d,n,o.split(" "),d.options.accent)),n});else{for(var t=0,e=h.length;t<e;t++)void 0!==(p=/\./.test(h[t])?d.helper.namespace.call(d,h[t],s,"get",""):s[h[t]])&&""!==p&&l.push(p);a='<span class="'+d.options.selector.display+'">'+d.helper.cleanStringFromScript(String(l.join(" ")))+"</span>"}(!0===d.options.highlight&&o&&!r||"any"===d.options.highlight)&&(a=d.helper.highlight.call(d,a,o.split(" "),d.options.accent)),A(this).append(a)}})}),function(i,t){t.on("click",function(t,e){i.disabled||(e&&"object"==typeof e&&(t.originalEvent=e),d.options.mustSelectItem&&d.helper.isEmpty(i))?t.preventDefault():(d.options.multiselect||(d.item=i),!1===d.helper.executeCallback.call(d,d.options.callback.onClickBefore,[d.node,A(this),i,t])||t.originalEvent&&t.originalEvent.defaultPrevented||t.isDefaultPrevented()||(d.options.multiselect?(d.query=d.rawQuery="",d.addMultiselectItemLayout(i)):(d.focusOnly=!0,d.query=d.rawQuery=d.getTemplateValue.call(d,i),d.isContentEditable&&(d.node.text(d.query),d.helper.setCaretAtEnd(d.node[0]))),d.hideLayout(),d.node.val(d.query).focus(),d.options.cancelButton&&d.toggleCancelButtonVisibility(),d.helper.executeCallback.call(d,d.options.callback.onClickAfter,[d.node,A(this),i,t])))}),t.on("mouseenter",function(t){i.disabled||(d.clearActiveItem(),d.addActiveItem(A(this))),d.helper.executeCallback.call(d,d.options.callback.onEnter,[d.node,A(this),i,t])}),t.on("mouseleave",function(t){i.disabled||d.clearActiveItem(),d.helper.executeCallback.call(d,d.options.callback.onLeave,[d.node,A(this),i,t])})}(s,f),(this.groupTemplate?t.find('[data-group-template="'+e+'"] ul'):t).append(f);if(this.result.length&&m.length)for(g=0,y=m.length;g<y;++g)t.find('[data-group-template="'+m[g]+'"]').remove();this.resultHtml=t}},generateHref:function(t,n){var o=this;return"string"==typeof t?t=t.replace(/\{\{([^\|}]+)(?:\|([^}]+))*}}/gi,function(t,e,i){e=o.helper.namespace.call(o,e,n,"get","");return e=~(i=i&&i.split("|")||[]).indexOf("slugify")?o.helper.slugify.call(o,e):e}):"function"==typeof t&&(t=t.call(this,n)),t},getMultiselectComparedData:function(t){var e="";if(Array.isArray(this.options.multiselect.matchOn))for(var i=0,n=this.options.multiselect.matchOn.length;i<n;++i)e+=void 0!==t[this.options.multiselect.matchOn[i]]?t[this.options.multiselect.matchOn[i]]:"";else{for(var o=JSON.parse(JSON.stringify(t)),s=["group","matchedKey","compiled","href"],i=0,n=s.length;i<n;++i)delete o[s[i]];e=JSON.stringify(o)}return e},buildBackdropLayout:function(){this.options.backdrop&&(this.backdrop.container||(this.backdrop.css=A.extend({opacity:.6,filter:"alpha(opacity=60)",position:"fixed",top:0,right:0,bottom:0,left:0,"z-index":1040,"background-color":"#000"},this.options.backdrop),this.backdrop.container=A("<div/>",{class:this.options.selector.backdrop,css:this.backdrop.css}).insertAfter(this.container)),this.container.addClass("backdrop").css({"z-index":this.backdrop.css["z-index"]+1,position:"relative"}))},buildHintLayout:function(t){if(this.options.hint)if(this.node[0].scrollWidth>Math.ceil(this.node.innerWidth()))this.hint.container&&this.hint.container.val("");else{var e=this,i="",n=(t=t||this.result,this.query.toLowerCase());if(this.options.accent&&(n=this.helper.removeAccent.call(this,n)),this.hintIndex=null,this.searchGroups.length){if(this.hint.container||(this.hint.css=A.extend({"border-color":"transparent",position:"absolute",top:0,display:"inline","z-index":-1,float:"none",color:"silver","box-shadow":"none",cursor:"default","-webkit-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none"},this.options.hint),this.hint.container=A("<"+this.node[0].nodeName+"/>",{type:this.node.attr("type"),class:this.node.attr("class"),readonly:!0,unselectable:"on","aria-hidden":"true",tabindex:-1,click:function(){e.node.focus()}}).addClass(this.options.selector.hint).css(this.hint.css).insertAfter(this.node),this.node.parent().css({position:"relative"})),this.hint.container.css("color",this.hint.css.color),n)for(var o,s,r=0,a=t.length;r<a;r++)if(!t[r].disabled){for(var l=t[r].group,c=0,d=(o=this.options.source[l].display||this.options.display).length;c<d;c++)if(s=String(t[r][o[c]]).toLowerCase(),0===(s=this.options.accent?this.helper.removeAccent.call(this,s):s).indexOf(n)){i=String(t[r][o[c]]),this.hintIndex=r;break}if(null!==this.hintIndex)break}var u=0<i.length&&this.rawQuery+i.substring(this.query.length)||"";this.hint.container.val(u),this.isContentEditable&&this.hint.container.text(u)}}},buildDropdownLayout:function(){var i;this.options.dropdownFilter&&A("<span/>",{class:(i=this).options.selector.filter,html:function(){A(this).append(A("<button/>",{type:"button",class:i.options.selector.filterButton,style:"display: none;",click:function(){i.container.toggleClass("filter");var e=i.namespace+"-dropdown-filter";A("html").off(e),i.container.hasClass("filter")&&A("html").on("click"+e+" touchend"+e,function(t){A(t.target).closest("."+i.options.selector.filter)[0]&&A(t.target).closest(i.container)[0]||i.hasDragged||(i.container.removeClass("filter"),A("html").off(e))})}})),A(this).append(A("<ul/>",{class:i.options.selector.dropdown}))}}).insertAfter(i.container.find("."+i.options.selector.query))},buildDropdownItemLayout:function(t){if(this.options.dropdownFilter){var e,i,o=this,s="string"==typeof this.options.dropdownFilter&&this.options.dropdownFilter||"All",r=this.container.find("."+this.options.selector.dropdown);"static"!==t||!0!==this.options.dropdownFilter&&"string"!=typeof this.options.dropdownFilter||this.dropdownFilter.static.push({key:"group",template:"{{group}}",all:s,value:Object.keys(this.options.source)});for(var n=0,a=this.dropdownFilter[t].length;n<a;n++){i=this.dropdownFilter[t][n],Array.isArray(i.value)||(i.value=[i.value]),i.all&&(this.dropdownFilterAll=i.all);for(var l=0,c=i.value.length;l<=c;l++)l===c&&n!==a-1||l===c&&n===a-1&&"static"===t&&this.dropdownFilter.dynamic.length||(e=this.dropdownFilterAll||s,i.value[l]?e=i.template?i.template.replace(new RegExp("{{"+i.key+"}}","gi"),i.value[l]):i.value[l]:this.container.find("."+o.options.selector.filterButton).html(e),function(e,i,n){r.append(A("<li/>",{class:o.options.selector.dropdownItem+" "+o.helper.slugify.call(o,i.key+"-"+(i.value[e]||s)),html:A("<a/>",{href:"javascript:;",html:n,click:function(t){t.preventDefault(),d.call(o,{key:i.key,value:i.value[e]||"*",template:n})}})}))}(l,i,e))}this.dropdownFilter[t].length&&this.container.find("."+o.options.selector.filterButton).removeAttr("style")}function d(t){"*"===t.value?delete this.filters.dropdown:this.filters.dropdown=t,this.container.removeClass("filter").find("."+this.options.selector.filterButton).html(t.template),this.isDropdownEvent=!0,this.node.trigger("input"+this.namespace),this.options.multiselect&&this.adjustInputSize(),this.node.focus()}},dynamicFilter:{init:function(){this.options.dynamicFilter&&(this.dynamicFilter.bind.call(this),this.isDynamicFilterEnabled=!0)},validate:function(t){var e,i,n,o=null,s=null;for(n in this.filters.dynamic)if(this.filters.dynamic.hasOwnProperty(n)&&(i=~n.indexOf(".")?this.helper.namespace.call(this,n,t,"get"):t[n],"|"===this.filters.dynamic[n].modifier&&(o=o||(i==this.filters.dynamic[n].value||!1)),"&"===this.filters.dynamic[n].modifier)){if(i!=this.filters.dynamic[n].value){s=!1;break}s=!0}return e=o,!!(e=null!==s&&!0===(e=s)&&null!==o?o:e)},set:function(t,e){t=t.match(/^([|&])?(.+)/);e?this.filters.dynamic[t[2]]={modifier:t[1]||"|",value:e}:delete this.filters.dynamic[t[2]],this.isDynamicFilterEnabled&&this.generateSource()},bind:function(){for(var t,e=this,i=0,n=this.options.dynamicFilter.length;i<n;i++)"string"==typeof(t=this.options.dynamicFilter[i]).selector&&(t.selector=A(t.selector)),t.selector instanceof A&&t.selector[0]&&t.key&&function(t){t.selector.off(e.namespace).on("change"+e.namespace,function(){e.dynamicFilter.set.apply(e,[t.key,e.dynamicFilter.getValue(this)])}).trigger("change"+e.namespace)}(t)},getValue:function(t){var e;return"SELECT"===t.tagName?e=t.value:"INPUT"===t.tagName&&("checkbox"===t.type?e=t.checked&&t.getAttribute("value")||t.checked||null:"radio"===t.type&&t.checked&&(e=t.value)),e}},buildMultiselectLayout:function(){var t,e;this.options.multiselect&&((e=this).label.container=A("<span/>",{class:this.options.selector.labelContainer,"data-padding-left":parseFloat(this.node.css("padding-left"))||0,"data-padding-right":parseFloat(this.node.css("padding-right"))||0,"data-padding-top":parseFloat(this.node.css("padding-top"))||0,click:function(t){A(t.target).hasClass(e.options.selector.labelContainer)&&e.node.focus()}}),this.node.closest("."+this.options.selector.query).prepend(this.label.container),this.options.multiselect.data)&&(Array.isArray(this.options.multiselect.data)?this.populateMultiselectData(this.options.multiselect.data):"function"==typeof this.options.multiselect.data&&(t=this.options.multiselect.data.call(this),Array.isArray(t)?this.populateMultiselectData(t):"function"==typeof t.promise&&A.when(t).then(function(t){t&&Array.isArray(t)&&e.populateMultiselectData(t)})))},isMultiselectUniqueData:function(t){for(var e=!0,i=0,n=this.comparedItems.length;i<n;++i)if(this.comparedItems[i]===this.getMultiselectComparedData(t)){e=!1;break}return e},populateMultiselectData:function(t){for(var e=0,i=t.length;e<i;++e)this.addMultiselectItemLayout(t[e]);this.node.trigger("search"+this.namespace,{origin:"populateMultiselectData"})},addMultiselectItemLayout:function(t){var n,e;if(this.isMultiselectUniqueData(t))return this.items.push(t),this.comparedItems.push(this.getMultiselectComparedData(t)),t=this.getTemplateValue(t),e=(n=this).options.multiselect.href?"a":"span",(t=A("<span/>",{class:this.options.selector.label,html:A("<"+e+"/>",{text:t,click:function(t){var e=A(this).closest("."+n.options.selector.label),e=n.label.container.find("."+n.options.selector.label).index(e);n.options.multiselect.callback&&n.helper.executeCallback.call(n,n.options.multiselect.callback.onClick,[n.node,n.items[e],t])},href:this.options.multiselect.href?(e=n.items[n.items.length-1],n.generateHref.call(n,n.options.multiselect.href,e)):null})})).append(A("<span/>",{class:this.options.selector.cancelButton,html:"×",click:function(t){var e=A(this).closest("."+n.options.selector.label),i=n.label.container.find("."+n.options.selector.label).index(e);n.cancelMultiselectItem(i,e,t)}})),this.label.container.append(t),this.adjustInputSize(),!0},cancelMultiselectItem:function(t,e,i){var n=this.items[t];(e=e||this.label.container.find("."+this.options.selector.label).eq(t)).remove(),this.items.splice(t,1),this.comparedItems.splice(t,1),this.options.multiselect.callback&&this.helper.executeCallback.call(this,this.options.multiselect.callback.onCancel,[this.node,n,i]),this.adjustInputSize(),this.focusOnly=!0,this.node.focus().trigger("input"+this.namespace,{origin:"cancelMultiselectItem"})},adjustInputSize:function(){var i,n=this.node[0].getBoundingClientRect().width-(parseFloat(this.label.container.data("padding-right"))||0)-(parseFloat(this.label.container.css("padding-left"))||0),o=0,s=0,r=!1,a=0,t=(this.label.container.find("."+this.options.selector.label).filter(function(t,e){0===t&&(a=A(e)[0].getBoundingClientRect().height+parseFloat(A(e).css("margin-bottom")||0)),i=A(e)[0].getBoundingClientRect().width+parseFloat(A(e).css("margin-right")||0),.7*n<s+i&&!r&&(o++,r=!0),s+i<n?s+=i:(r=!1,s=i)}),parseFloat(this.label.container.data("padding-left")||0)+(r?0:s)),e=o*a+parseFloat(this.label.container.data("padding-top")||0);this.container.find("."+this.options.selector.query).find("input, textarea, [contenteditable], .typeahead__hint").css({paddingLeft:t,paddingTop:e})},showLayout:function(){!this.container.hasClass("result")&&(this.result.length||this.displayEmptyTemplate||this.options.backdropOnFocus)&&(function(){var e=this;A("html").off("keydown"+this.namespace).on("keydown"+this.namespace,function(t){t.keyCode&&9===t.keyCode&&setTimeout(function(){A(":focus").closest(e.container).find(e.node)[0]||e.hideLayout()},0)}),A("html").off("click"+this.namespace+" touchend"+this.namespace).on("click"+this.namespace+" touchend"+this.namespace,function(t){A(t.target).closest(e.container)[0]||A(t.target).closest("."+e.options.selector.item)[0]||t.target.className===e.options.selector.cancelButton||e.hasDragged||e.hideLayout()})}.call(this),this.container.addClass([this.result.length||this.searchGroups.length&&this.displayEmptyTemplate?"result ":"",this.options.hint&&this.searchGroups.length?"hint":"",this.options.backdrop||this.options.backdropOnFocus?"backdrop":""].join(" ")),this.helper.executeCallback.call(this,this.options.callback.onShowLayout,[this.node,this.query]))},hideLayout:function(){(this.container.hasClass("result")||this.container.hasClass("backdrop"))&&(this.container.removeClass("result hint filter"+(this.options.backdropOnFocus&&A(this.node).is(":focus")?"":" backdrop")),this.options.backdropOnFocus&&this.container.hasClass("backdrop")||(A("html").off(this.namespace),this.helper.executeCallback.call(this,this.options.callback.onHideLayout,[this.node,this.query])))},resetLayout:function(){this.result=[],this.tmpResult={},this.groups=[],this.resultCount=0,this.resultCountPerGroup={},this.resultItemCount=0,this.resultHtml=null,this.options.hint&&this.hint.container&&(this.hint.container.val(""),this.isContentEditable)&&this.hint.container.text("")},resetInput:function(){this.node.val(""),this.isContentEditable&&this.node.text(""),this.query="",this.rawQuery=""},buildCancelButtonLayout:function(){var e;this.options.cancelButton&&A("<span/>",{class:(e=this).options.selector.cancelButton,html:"×",mousedown:function(t){t.stopImmediatePropagation(),t.preventDefault(),e.resetInput(),e.node.trigger("input"+e.namespace,[t])}}).insertBefore(this.node)},toggleCancelButtonVisibility:function(){this.container.toggleClass("cancel",!!this.query.length)},__construct:function(){this.extendOptions(),this.unifySourceFormat()&&(this.dynamicFilter.init.apply(this),this.init(),this.buildDropdownLayout(),this.buildDropdownItemLayout("static"),this.buildMultiselectLayout(),this.delegateEvents(),this.buildCancelButtonLayout(),this.helper.executeCallback.call(this,this.options.callback.onReady,[this.node]))},helper:{isEmpty:function(t){for(var e in t)if(t.hasOwnProperty(e))return!1;return!0},removeAccent:function(t){var e;if("string"==typeof t)return e=o,"object"==typeof this.options.accent&&(e=this.options.accent),t.toLowerCase().replace(new RegExp("["+e.from+"]","g"),function(t){return e.to[e.from.indexOf(t)]})},slugify:function(t){return t=""!==(t=String(t))?(t=this.helper.removeAccent.call(this,t)).replace(/[^-a-z0-9]+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,""):t},sort:function(n,i,o){function s(t){for(var e=0,i=n.length;e<i;e++)if(void 0!==t[n[e]])return o(t[n[e]]);return t}return i=[-1,1][+!!i],function(t,e){return t=s(t),e=s(e),i*((e<t)-(t<e))}},replaceAt:function(t,e,i,n){return t.substring(0,e)+n+t.substring(e+i)},highlight:function(t,e,i){t=String(t);var i=i&&this.helper.removeAccent.call(this,t)||t,n=[];(e=Array.isArray(e)?e:[e]).sort(function(t,e){return e.length-t.length});for(var o=e.length-1;0<=o;o--)""!==e[o].trim()?e[o]=e[o].replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"):e.splice(o,1);for(i.replace(new RegExp("(?:"+e.join("|")+")(?!([^<]+)?>)","gi"),function(t,e,i){n.push({offset:i,length:t.length})}),o=n.length-1;0<=o;o--)t=this.helper.replaceAt(t,n[o].offset,n[o].length,"<strong>"+t.substr(n[o].offset,n[o].length)+"</strong>");return t},getCaret:function(t){var e=0;if(t.selectionStart)return t.selectionStart;if(document.selection){var i=document.selection.createRange();if(null===i)return e;var n=t.createTextRange(),o=n.duplicate();n.moveToBookmark(i.getBookmark()),o.setEndPoint("EndToStart",n),e=o.text.length}else window.getSelection&&(i=window.getSelection()).rangeCount&&(n=i.getRangeAt(0)).commonAncestorContainer.parentNode==t&&(e=n.endOffset);return e},setCaretAtEnd:function(t){var e,i;void 0!==window.getSelection&&void 0!==document.createRange?((e=document.createRange()).selectNodeContents(t),e.collapse(!1),(i=window.getSelection()).removeAllRanges(),i.addRange(e)):void 0!==document.body.createTextRange&&((i=document.body.createTextRange()).moveToElementText(t),i.collapse(!1),i.select())},cleanStringFromScript:function(t){return"string"==typeof t&&t.replace(/<\/?(?:script|iframe)\b[^>]*>/gm,"")||t},executeCallback:function(t,e){if(t){var i;if("function"==typeof t)i=t;else if(("string"==typeof t||Array.isArray(t))&&"function"!=typeof(i=this.helper.namespace.call(this,(t="string"==typeof t?[t,[]]:t)[0],window)))return;return i.apply(this,(t[1]||[]).concat(e||[]))}},namespace:function(t,e,i,n){if("string"!=typeof t||""===t)return!1;var o=void 0!==n?n:void 0;if(!~t.indexOf("."))return e[t]||o;for(var s,r=t.split("."),a=e||window,l=(i=i||"get",0),c=r.length;l<c;l++){if(void 0===a[s=r[l]]){if(~["get","delete"].indexOf(i))return void 0!==n?n:void 0;a[s]={}}if(~["set","create","delete"].indexOf(i)&&l===c-1){if("set"!==i&&"create"!==i)return delete a[s],!0;a[s]=o}a=a[s]}return a},typeWatch:(i=0,function(t,e){clearTimeout(i),i=setTimeout(t,e)})}},A.fn.typeahead=A.typeahead=function(t){return e.typeahead(this,t)},{typeahead:function(t,e){if(e&&e.source&&"object"==typeof e.source){if("function"==typeof t){if(!e.input)return;t=A(e.input)}if(t.length){if(void 0===t[0].value&&(t[0].value=t.text()),1===t.length)return t[0].selector=t.selector||e.input||t[0].nodeName.toLowerCase(),window.Typeahead[t[0].selector]=new r(t,e);for(var i,n={},o=0,s=t.length;o<s;++o)void 0!==n[i=t[o].nodeName.toLowerCase()]&&(i+=o),t[o].selector=i,window.Typeahead[i]=n[i]=new r(t.eq(o),e);return n}}}});return window.console=window.console||{log:function(){}},Array.isArray||(Array.isArray=function(t){return"[object Array]"===Object.prototype.toString.call(t)}),"trim"in String.prototype||(String.prototype.trim=function(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}),"indexOf"in Array.prototype||(Array.prototype.indexOf=function(t,e){(e=void 0===e?0:e)<0&&(e+=this.length),e<0&&(e=0);for(var i=this.length;e<i;e++)if(e in this&&this[e]===t)return e;return-1}),Object.keys||(Object.keys=function(t){var e,i=[];for(e in t)Object.prototype.hasOwnProperty.call(t,e)&&i.push(e);return i}),r}),!function(r,h){function t(i){return"object"!=typeof i||!i||"length"in i||w(i).forEach(function(t){if(/^(?:forceHandCursor|title|zIndex|bubbleEvents|fixLineEndings)$/.test(t))A[t]=i[t];else if(null==T.bridge){if(!("containerId"!==t&&"swfObjectId"!==t||"string"==typeof(e=i[t])&&e&&/^[A-Za-z][A-Za-z0-9_:\-\.]*$/.test(e)))throw new Error("The specified `"+t+"` value is not valid as an HTML4 Element ID");A[t]=i[t]}var e}),"string"==typeof i&&i?_.call(A,i)?A[i]:void 0:s(A)}function c(){return!!(m.addEventListener&&f.Object.keys&&f.Array.prototype.map)}function i(t){var e,i;if((t=W(t))&&!function(t){var e=t.target||l||null,i=t._source==="swf";switch(delete t._source,t.type){case"error":var n=t.name==="flash-sandboxed"||kt(t);if(typeof n==="boolean")T.sandboxed=n;if(t.name==="browser-unsupported")x(T,{disabled:false,outdated:false,unavailable:false,degraded:false,deactivated:false,overdue:false,ready:false});else if(D.indexOf(t.name)!==-1)x(T,{disabled:t.name==="flash-disabled",outdated:t.name==="flash-outdated",insecure:t.name==="flash-insecure",unavailable:t.name==="flash-unavailable",degraded:t.name==="flash-degraded",deactivated:t.name==="flash-deactivated",overdue:t.name==="flash-overdue",ready:false});else if(t.name==="version-mismatch"){u=t.swfVersion;x(T,{disabled:false,outdated:false,insecure:false,unavailable:false,degraded:false,deactivated:false,overdue:false,ready:false})}j();break;case"ready":u=t.swfVersion;var o=T.deactivated===true;x(T,{sandboxed:false,disabled:false,outdated:false,insecure:false,unavailable:false,degraded:false,deactivated:false,overdue:o,ready:!o});j();break;case"beforecopy":p=e;break;case"copy":var s,r,a=t.relatedTarget;if(!(C["text/html"]||C["text/plain"])&&a&&(r=a.value||a.outerHTML||a.innerHTML)&&(s=a.value||a.textContent||a.innerText)){t.clipboardData.clearData();t.clipboardData.setData("text/plain",s);if(r!==s)t.clipboardData.setData("text/html",r)}else if(!C["text/plain"]&&t.target&&(s=t.target.getAttribute("data-clipboard-text"))){t.clipboardData.clearData();t.clipboardData.setData("text/plain",s)}break;case"aftercopy":xt(t);P.clearData();if(e&&e!==Ot()&&e.focus)e.focus();break;case"_mouseover":P.focus(e);if(A.bubbleEvents===true&&i){if(e&&e!==t.relatedTarget&&!rt(t.relatedTarget,e))L(x({},t,{type:"mouseenter",bubbles:false,cancelable:false}));L(x({},t,{type:"mouseover"}))}break;case"_mouseout":P.blur();if(A.bubbleEvents===true&&i){if(e&&e!==t.relatedTarget&&!rt(t.relatedTarget,e))L(x({},t,{type:"mouseleave",bubbles:false,cancelable:false}));L(x({},t,{type:"mouseout"}))}break;case"_mousedown":$t(e,A.activeClass);if(A.bubbleEvents===true&&i)L(x({},t,{type:t.type.slice(1)}));break;case"_mouseup":$(e,A.activeClass);if(A.bubbleEvents===true&&i)L(x({},t,{type:t.type.slice(1)}));break;case"_click":p=null;if(A.bubbleEvents===true&&i)L(x({},t,{type:t.type.slice(1)}));break;case"_mousemove":if(A.bubbleEvents===true&&i)L(x({},t,{type:t.type.slice(1)}));break}if(/^_(?:click|mouse(?:over|out|down|up|move))$/.test(t.type))return true}(t))return"ready"===t.type&&!0===T.overdue?P.emit({type:"error",name:"flash-overdue"}):(i=x({},t),function(t){if("object"==typeof t&&t&&t.type){var e=wt(t),i=S["*"]||[],n=S[t.type]||[],o=i.concat(n);if(o&&o.length)for(var s,r,a,l,c,d=this,s=0,r=o.length;s<r;s++)l=this,"function"==typeof(a="object"==typeof(a="string"==typeof(a=o[s])&&"function"==typeof f[a]?f[a]:a)&&a&&"function"==typeof a.handleEvent?(l=a).handleEvent:a)&&(c=x({},t),_t(a,l,[c],e));return this}}.call(this,i),"copy"===t.type&&(e=(i=function(t){var e={},i={};if("object"==typeof t&&t){for(var n in t)if(n&&_.call(t,n)&&"string"==typeof t[n]&&t[n])switch(n.toLowerCase()){case"text/plain":case"text":case"air:text":case"flash:text":e.text=t[n],i.text=n;break;case"text/html":case"html":case"air:html":case"flash:html":e.html=t[n],i.html=n;break;case"application/rtf":case"text/rtf":case"rtf":case"richtext":case"air:rtf":case"flash:rtf":e.rtf=t[n],i.rtf=n}return{data:e,formatMap:i}}}(C)).data,n=i.formatMap),e)}function H(){var t=T.sandboxed;if(c()){if(d(),"boolean"!=typeof T.ready&&(T.ready=!1),T.sandboxed!==t&&!0===T.sandboxed)T.ready=!1,P.emit({type:"error",name:"flash-sandboxed"});else if(!P.isFlashUnusable()&&null===T.bridge)if((t=yt())&&t!==f.location.protocol)P.emit({type:"error",name:"flash-insecure"});else{"number"==typeof(t=A.flashLoadTimeout)&&0<=t&&(E=y(function(){"boolean"!=typeof T.deactivated&&(T.deactivated=!0),!0===T.deactivated&&P.emit({type:"error",name:"flash-deactivated"})},t)),T.overdue=!1;var t=T.bridge,e=O(t);if(!t){var i=Lt(f.location.host,A);var n=i==="never"?"none":"all";var o=At(x({jsVersion:P.version},A));var s=A.swfPath+Dt(A.swfPath,A);if(ut)s=Ct(s);e=St();var r=m.createElement("div");e.appendChild(r);m.body.appendChild(e);var a=m.createElement("div");var l=T.pluginType==="activex";a.innerHTML='<object id="'+A.swfObjectId+'" name="'+A.swfObjectId+'" '+'width="100%" height="100%" '+(l?'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"':'type="application/x-shockwave-flash" data="'+s+'"')+">"+(l?'<param name="movie" value="'+s+'"/>':"")+'<param name="allowScriptAccess" value="'+i+'"/>'+'<param name="allowNetworking" value="'+n+'"/>'+'<param name="menu" value="false"/>'+'<param name="wmode" value="transparent"/>'+'<param name="flashvars" value="'+o+'"/>'+'<div id="'+A.swfObjectId+'_fallbackContent"> </div>'+"</object>";t=a.firstChild;a=null;st(t).ZeroClipboard=P;e.replaceChild(t,r);Tt()}if(!t){t=m[A.swfObjectId];if(t&&(l=t.length))t=t[l-1];if(!t&&e)t=e.firstChild}T.bridge=t||null}}else T.ready=!1,P.emit({type:"error",name:"browser-unsupported"})}function F(){P.clearData(),P.blur(),P.emit("destroy");var i,n=T.bridge;n&&((i=O(n))&&("activex"===T.pluginType&&"readyState"in n?(n.style.display="none",function t(){if(4===n.readyState){for(var e in n)"function"==typeof n[e]&&(n[e]=null);n.parentNode&&n.parentNode.removeChild(n),i.parentNode&&i.parentNode.removeChild(i)}else y(t,10)}()):(n.parentNode&&n.parentNode.removeChild(n),i.parentNode&&i.parentNode.removeChild(i))),j(),T.ready=null,T.bridge=null,T.deactivated=null,T.insecure=null,u=h),P.off()}function R(t,e){var i,n;if("object"==typeof t&&t&&void 0===e)i=t,P.clearData();else{if("string"!=typeof t||!t)return;(i={})[t]=e}for(n in i)"string"==typeof n&&n&&_.call(i,n)&&"string"==typeof i[n]&&i[n]&&(C[n]=function(t){var e=/(\r\n|\r|\n)/g;if(typeof t==="string"&&A.fixLineEndings===true)if(ct()){if(/((^|[^\r])\n|\r([^\n]|$))/.test(t))t=t.replace(e,"\r\n")}else if(/\r/.test(t))t=t.replace(e,"\n");return t}(i[n]))}function q(t){if(void 0===t){var e=C;if(e)for(var i in e)_.call(e,i)&&delete e[i];n=null}else"string"==typeof t&&_.call(C,t)&&delete C[t]}function Y(t){if(t&&1===t.nodeType){l&&($(l,A.activeClass),l!==t)&&$(l,A.hoverClass),$t(l=t,A.hoverClass);var e=t.getAttribute("title")||A.title;"string"==typeof e&&e&&(i=O(T.bridge))&&i.setAttribute("title",e);var i=!0===A.forceHandCursor||"pointer"===Mt(t,"cursor");if(T.ready===true)if(T.bridge&&typeof T.bridge.setHandCursor==="function")T.bridge.setHandCursor(i);else T.ready=false;if(l&&(e=O(T.bridge))){t=M(l);x(e.style,{width:t.width+"px",height:t.height+"px",top:t.top+"px",left:t.left+"px",zIndex:""+o(A.zIndex)})}}}function W(t){var e;if("string"==typeof t&&t?(e=t,t={}):"object"==typeof t&&t&&"string"==typeof t.type&&t.type&&(e=t.type),e)return e=e.toLowerCase(),!t.target&&(/^(copy|aftercopy|_click)$/.test(e)||"error"===e&&"clipboard-error"===t.name)&&(t.target=p),x(t,{type:e,target:t.target||l||null,relatedTarget:t.relatedTarget||null,currentTarget:T&&T.bridge||null,timeStamp:t.timeStamp||nt()||null}),e=pt[t.type],(e="error"===t.type&&t.name?e&&e[t.name]:e)&&(t.message=e),"ready"===t.type&&x(t,{target:null,version:T.version}),"error"===t.type&&(mt.test(t.name)&&x(t,{target:null,minimumVersion:ht}),gt.test(t.name)&&x(t,{version:T.version}),"flash-insecure"===t.name)&&x(t,{pageProtocol:f.location.protocol,swfProtocol:yt()}),"copy"===t.type&&(t.clipboardData={setData:P.setData,clearData:P.clearData}),(t="aftercopy"===t.type?Et(t,n):t).target&&!t.relatedTarget&&(t.relatedTarget=vt(t.target)),bt(t)}function a(t){var e,i;return null!=t&&""!==t&&""!==(t=t.replace(/^\s+|\s+$/g,""))&&(!(t=-1===(i=(t=-1===(e=t.indexOf("//"))?t:t.slice(e+2)).indexOf("/"))?t:-1===e||0===i?null:t.slice(0,i))||".swf"!==t.slice(-4).toLowerCase())&&t||null}function d(t){var e,i,n,o=T.sandboxed,s=null;if(t=!0===t,!1==dt)s=!1;else{try{i=r.frameElement||null}catch(t){n={name:t.name,message:t.message}}if(i&&1===i.nodeType&&"IFRAME"===i.nodeName)try{s=i.hasAttribute("sandbox")}catch(t){s=null}else{try{e=document.domain||null}catch(t){e=null}(null===e||n&&"SecurityError"===n.name&&/(^|[\s\(\[@])sandbox(es|ed|ing|[\s\.,!\)\]@]|$)/.test(n.message.toLowerCase()))&&(s=!0)}}o===(T.sandboxed=s)||t||B(K)}function B(e){var i,t,n=!1,o=!1,s=!1,r="";function a(t){t=t.match(/[\d]+/g);return t.length=3,t.join(".")}function l(t){t&&(n=!0,!(r=t.version?a(t.version):r)&&t.description&&(r=a(t.description)),t.filename)&&(t=t.filename,s=!!t&&(t=t.toLowerCase())&&(/^(pepflashplayer\.dll|libpepflashplayer\.so|pepperflashplayer\.plugin)$/.test(t)||"chrome.plugin"===t.slice(-13)))}if(g.plugins&&g.plugins.length)l(g.plugins["Shockwave Flash"]),g.plugins["Shockwave Flash 2.0"]&&(n=!0,r="2.0.0.11");else if(g.mimeTypes&&g.mimeTypes.length)l((t=g.mimeTypes["application/x-shockwave-flash"])&&t.enabledPlugin);else if(void 0!==e){o=!0;try{i=new e("ShockwaveFlash.ShockwaveFlash.7"),n=!0,r=a(i.GetVariable("$version"))}catch(t){try{i=new e("ShockwaveFlash.ShockwaveFlash.6"),n=!0,r="6.0.21"}catch(t){try{i=new e("ShockwaveFlash.ShockwaveFlash"),n=!0,r=a(i.GetVariable("$version"))}catch(t){o=!1}}}}T.disabled=!0!==n,T.outdated=r&&b(r)<b(ht),T.version=r||"0.0.0",T.pluginType=s?"pepper":o?"activex":n?"netscape":"unknown"}function z(t){return function(t){if(!(t&&t.type))return false;if(t.client&&t.client!==this)return false;var e=N[this.id],i=e&&e.elements,n=!!i&&i.length>0,o=!t.target||n&&i.indexOf(t.target)!==-1,s=t.relatedTarget&&n&&i.indexOf(t.relatedTarget)!==-1,r=t.client&&t.client===this;return e&&(o||s||r)?!0:!1}.call(this,t)&&("object"==typeof t&&t&&"string"==typeof t.type&&t.type&&(t=x({},t)),t=x({},W(t),{client:this}),function(t){var e=N[this.id];if("object"==typeof t&&t&&t.type&&e){var i=wt(t),n=e&&e.handlers["*"]||[],o=e&&e.handlers[t.type]||[],s=n.concat(o);if(s&&s.length)for(var r,a,l,c,d,u=this,r=0,a=s.length;r<a;r++)c=this,"function"==typeof(l="object"==typeof(l="string"==typeof(l=s[r])&&"function"==typeof f[l]?f[l]:l)&&l&&"function"==typeof l.handleEvent?(c=l).handleEvent:l)&&(d=x({},t),_t(l,c,[d],i))}}.call(this,t)),this}function U(t){if(!N[this.id])throw new Error("Attempted to clip element(s) to a destroyed ZeroClipboard client instance");t=V(t);for(var e,i=0;i<t.length;i++)_.call(t,i)&&t[i]&&1===t[i].nodeType&&(t[i].zcClippingId?-1===I[t[i].zcClippingId].indexOf(this.id)&&I[t[i].zcClippingId].push(this.id):(t[i].zcClippingId="zcClippingId_"+Pt++,I[t[i].zcClippingId]=[this.id],!0===A.autoActivate&&function(e){var i,t;e&&1===e.nodeType&&(e.addEventListener("mouseover",t=function(t){(t=t||f.event)&&(i(t),P.focus(e))},!(i=function(t){(t=t||f.event)&&("js"!==t._source&&(t.stopImmediatePropagation(),t.preventDefault()),delete t._source)})),e.addEventListener("mouseout",i,!1),e.addEventListener("mouseenter",i,!1),e.addEventListener("mouseleave",i,!1),e.addEventListener("mousemove",i,!1),Nt[e.zcClippingId]={mouseover:t,mouseout:i,mouseenter:i,mouseleave:i,mousemove:i})}(t[i])),-1===(e=N[this.id]&&N[this.id].elements).indexOf(t[i]))&&e.push(t[i]);return this}function G(t){var e=N[this.id];if(e)for(var i,n=e.elements,o=(t=void 0===t?n.slice(0):V(t)).length;o--;)if(_.call(t,o)&&t[o]&&1===t[o].nodeType){for(i=0;-1!==(i=n.indexOf(t[o],i));)n.splice(i,1);var s=I[t[o].zcClippingId];if(s){for(i=0;-1!==(i=s.indexOf(this.id,i));)s.splice(i,1);if(0===s.length){if(!0===A.autoActivate){h=u=d=c=l=a=void 0;var r=t[o];if(r&&1===r.nodeType){var a=Nt[r.zcClippingId];if("object"==typeof a&&a){for(var l,c,d=["move","leave","enter","out","over"],u=0,h=d.length;u<h;u++)"function"==typeof(c=a[l="mouse"+d[u]])&&r.removeEventListener(l,c,!1);delete Nt[r.zcClippingId]}}}delete t[o].zcClippingId}}}return this}function V(t){return"number"!=typeof(t="string"==typeof t?[]:t).length?[t]:t}var u,l,p,f=r,m=f.document,g=f.navigator,y=f.setTimeout,X=f.clearTimeout,Z=f.setInterval,Q=f.clearInterval,J=f.getComputedStyle,v=f.encodeURIComponent,K=f.ActiveXObject,tt=f.Error,et=f.Number.parseInt||f.parseInt,b=f.Number.parseFloat||f.parseFloat,it=f.Number.isNaN||f.isNaN,nt=f.Date.now,w=f.Object.keys,_=f.Object.prototype.hasOwnProperty,ot=f.Array.prototype.slice,st=function(){var t=function(t){return t};if("function"==typeof f.wrap&&"function"==typeof f.unwrap)try{var e=m.createElement("div"),i=f.unwrap(e);1===e.nodeType&&i&&1===i.nodeType&&(t=f.unwrap)}catch(t){}return t}(),k=function(t){return ot.call(t,0)},x=function(){for(var t,e,i,n=k(arguments),o=n[0]||{},s=1,r=n.length;s<r;s++)if(null!=(t=n[s]))for(e in t)_.call(t,e)&&(o[e],o!==(i=t[e]))&&i!==h&&(o[e]=i);return o},s=function(t){var e,i,n,o;if("object"!=typeof t||null==t||"number"==typeof t.nodeType)e=t;else if("number"==typeof t.length)for(e=[],i=0,n=t.length;i<n;i++)_.call(t,i)&&(e[i]=s(t[i]));else for(o in e={},t)_.call(t,o)&&(e[o]=s(t[o]));return e},rt=function(t,e){if(t&&1===t.nodeType&&t.ownerDocument&&e&&(1===e.nodeType&&e.ownerDocument&&e.ownerDocument===t.ownerDocument||9===e.nodeType&&!e.ownerDocument&&e===t.ownerDocument))do{if(t===e)return!0}while(t=t.parentNode);return!1},at=function(t){var e;return"string"==typeof t&&t&&(e=t.split("#")[0].split("?")[0],e=t.slice(0,t.lastIndexOf("/")+1)),e},lt=function(){var t,e,i,n;try{throw new tt}catch(t){e=t}return t=e?e.sourceURL||e.fileName||(e=e.stack,i="string"==typeof e&&e&&((n=e.match(/^(?:|[^:@]*@|.+\)@(?=http[s]?|file)|.+?\s+(?: at |@)(?:[^:\(]+ )*[\(]?)((?:http[s]?|file):\/\/[\/]?.+?\/[^:\)]*?)(?::\d+)(?::\d+)?/))&&n[1]||(n=e.match(/\)@((?:http[s]?|file):\/\/[\/]?.+?\/[^:\)]*?)(?::\d+)(?::\d+)?/))&&n[1])?n[1]:i):t},ct=function(){var t=/win(dows|[\s]?(nt|me|ce|xp|vista|[\d]+))/i;return!!g&&(t.test(g.appVersion||"")||t.test(g.platform||"")||-1!==(g.userAgent||"").indexOf("Windows"))},dt=null==f.opener&&(!!f.top&&f!=f.top||!!f.parent&&f!=f.parent),ut="html"===m.documentElement.nodeName,T={bridge:null,version:"0.0.0",pluginType:"unknown",sandboxed:null,disabled:null,outdated:null,insecure:null,unavailable:null,degraded:null,deactivated:null,overdue:null,ready:null},ht="11.0.0",S={},C={},n=null,E=0,e=0,pt={ready:"Flash communication is established",error:{"flash-sandboxed":"Attempting to run Flash in a sandboxed iframe, which is impossible","flash-disabled":"Flash is disabled or not installed. May also be attempting to run Flash in a sandboxed iframe, which is impossible.","flash-outdated":"Flash is too outdated to support ZeroClipboard","flash-insecure":"Flash will be unable to communicate due to a protocol mismatch between your `swfPath` configuration and the page","flash-unavailable":"Flash is unable to communicate bidirectionally with JavaScript","flash-degraded":"Flash is unable to preserve data fidelity when communicating with JavaScript","flash-deactivated":"Flash is too outdated for your browser and/or is configured as click-to-activate.\nThis may also mean that the ZeroClipboard SWF object could not be loaded, so please check your `swfPath` configuration and/or network connectivity.\nMay also be attempting to run Flash in a sandboxed iframe, which is impossible.","flash-overdue":"Flash communication was established but NOT within the acceptable time limit","version-mismatch":"ZeroClipboard JS version number does not match ZeroClipboard SWF version number","clipboard-error":"At least one error was thrown while ZeroClipboard was attempting to inject your data into the clipboard","config-mismatch":"ZeroClipboard configuration does not match Flash's reality","swf-not-found":"The ZeroClipboard SWF object could not be loaded, so please check your `swfPath` configuration and/or network connectivity","browser-unsupported":"The browser does not support the required HTML DOM and JavaScript features"}},ft=["flash-unavailable","flash-degraded","flash-overdue","version-mismatch","config-mismatch","clipboard-error"],D=["flash-sandboxed","flash-disabled","flash-outdated","flash-insecure","flash-unavailable","flash-degraded","flash-deactivated","flash-overdue"],mt=new RegExp("^flash-("+D.map(function(t){return t.replace(/^flash-/,"")}).join("|")+")$"),gt=new RegExp("^flash-("+D.filter(function(t){return"flash-disabled"!==t}).map(function(t){return t.replace(/^flash-/,"")}).join("|")+")$"),A={swfPath:(at(function(){var t,e,i;if(m.currentScript&&(t=m.currentScript.src))return t;if(1===(e=m.getElementsByTagName("script")).length)return e[0].src||h;if("readyState"in(e[0]||document.createElement("script")))for(i=e.length;i--;)if("interactive"===e[i].readyState&&(t=e[i].src))return t;return"loading"===m.readyState&&(t=e[e.length-1].src)?t:(t=lt())||h}())||function(){for(var t,e,i=m.getElementsByTagName("script"),n=i.length;n--;){if(!(e=i[n].src)){t=null;break}if(e=at(e),null==t)t=e;else if(t!==e){t=null;break}}return t||h}()||"")+"ZeroClipboard.swf",trustedDomains:f.location.host?[f.location.host]:[],cacheBust:!0,forceEnhancedClipboard:!1,flashLoadTimeout:3e4,autoActivate:!0,bubbleEvents:!0,fixLineEndings:!0,containerId:"global-zeroclipboard-html-bridge",containerClass:"global-zeroclipboard-container",swfObjectId:"global-zeroclipboard-flash-bridge",hoverClass:!1,activeClass:!1,forceHandCursor:!1,title:null,zIndex:999999999},yt=function(){var t=A.swfPath||"",e=t.slice(0,2),t=t.slice(0,t.indexOf("://")+1);return"\\\\"===e?"file:":"//"===e||""===t?f.location.protocol:t},vt=function(t){t=t&&t.getAttribute&&t.getAttribute("data-clipboard-target");return t?m.getElementById(t):null},bt=function(t){var e,i,n,o,s,r,a,l,c,d,u;return t&&/^_(?:click|mouse(?:over|out|down|up|move))$/.test(t.type)&&(e=t.target,i="_mouseover"===t.type&&t.relatedTarget?t.relatedTarget:h,n="_mouseout"===t.type&&t.relatedTarget?t.relatedTarget:h,a=M(e),o=f.screenLeft||f.screenX||0,s=f.screenTop||f.screenY||0,r=m.body.scrollLeft+m.documentElement.scrollLeft,c=m.body.scrollTop+m.documentElement.scrollTop,l=o+(r=(o=a.left+("number"==typeof t._stageX?t._stageX:0))-r),c=s+(a=(s=a.top+("number"==typeof t._stageY?t._stageY:0))-c),d="number"==typeof t.movementX?t.movementX:0,u="number"==typeof t.movementY?t.movementY:0,delete t._stageX,delete t._stageY,x(t,{srcElement:e,fromElement:i,toElement:n,screenX:l,screenY:c,pageX:o,pageY:s,clientX:r,clientY:a,x:r,y:a,movementX:d,movementY:u,offsetX:0,offsetY:0,layerX:0,layerY:0})),t},wt=function(t){t=t&&"string"==typeof t.type&&t.type||"";return!/^(?:(?:before)?copy|destroy)$/.test(t)},_t=function(t,e,i,n){n?y(function(){t.apply(e,i)},0):t.apply(e,i)},kt=function(t){var e=null;return e=!1==dt||t&&"error"===t.type&&t.name&&-1!==ft.indexOf(t.name)?!1:e},xt=function(t){var e;t.errors&&0<t.errors.length&&(e=s(t),x(e,{type:"error",name:"clipboard-error"}),delete e.success,y(function(){P.emit(e)},0))},L=function(t){var e,i,n;t&&"string"==typeof t.type&&t&&(n={view:(i=(e=t.target||null)&&e.ownerDocument||m).defaultView||f,canBubble:!0,cancelable:!0,detail:"click"===t.type?1:0,button:"number"==typeof t.which?t.which-1:"number"==typeof t.button?t.button:i.createEvent?0:1},n=x(n,t),e)&&i.createEvent&&e.dispatchEvent&&(n=[n.type,n.canBubble,n.cancelable,n.view,n.detail,n.screenX,n.screenY,n.clientX,n.clientY,n.ctrlKey,n.altKey,n.shiftKey,n.metaKey,n.button,n.relatedTarget],(t=i.createEvent("MouseEvents")).initMouseEvent)&&(t.initMouseEvent.apply(t,n),t._source="js",e.dispatchEvent(t))},Tt=function(){var a,t=A.flashLoadTimeout;"number"==typeof t&&0<=t&&(t=Math.min(1e3,t/10),a=A.swfObjectId+"_fallbackContent",e=Z(function(){var t,e,i,n,o,s,r=m.getElementById(a);(r=r)&&!!(t=J(r,null))&&(e=0<b(t.height),i=0<b(t.width),n=0<=b(t.top),o=0<=b(t.left),r=(s=e&&i&&n&&o)?null:M(r),"none"!==t.display)&&"collapse"!==t.visibility&&(s||!!r&&(e||0<r.height)&&(i||0<r.width)&&(n||0<=r.top)&&(o||0<=r.left))&&(j(),T.deactivated=null,P.emit({type:"error",name:"swf-not-found"}))},t))},St=function(){var t=m.createElement("div");return t.id=A.containerId,t.className=A.containerClass,t.style.position="absolute",t.style.left="0px",t.style.top="-9999px",t.style.width="1px",t.style.height="1px",t.style.zIndex=""+o(A.zIndex),t},O=function(t){for(var e=t&&t.parentNode;e&&"OBJECT"===e.nodeName&&e.parentNode;)e=e.parentNode;return e||null},Ct=function(t){return"string"==typeof t&&t?t.replace(/["&'<>]/g,function(t){switch(t){case'"':return""";case"&":return"&";case"'":return"'";case"<":return"<";case">":return">";default:return t}}):t},Et=function(t,e){if("object"!=typeof t||!t||"object"!=typeof e||!e)return t;var i,n={};for(i in t)if(_.call(t,i))if("errors"===i){n[i]=t[i]?t[i].slice():[];for(var o=0,s=n[i].length;o<s;o++)n[i][o].format=e[n[i][o].format]}else if("success"!==i&&"data"!==i)n[i]=t[i];else{n[i]={};var r,a=t[i];for(r in a)r&&_.call(a,r)&&_.call(e,r)&&(n[i][e[r]]=a[r])}return n},Dt=function(t,e){return null==e||e&&!0===e.cacheBust?(-1===t.indexOf("?")?"?":"&")+"noCache="+nt():""},At=function(t){var e,i,n,o,s="",r=[];if(t.trustedDomains&&("string"==typeof t.trustedDomains?o=[t.trustedDomains]:"object"==typeof t.trustedDomains&&"length"in t.trustedDomains&&(o=t.trustedDomains)),o&&o.length)for(e=0,i=o.length;e<i;e++)if(_.call(o,e)&&o[e]&&"string"==typeof o[e]&&(n=a(o[e]))){if("*"===n){r.length=0,r.push(n);break}r.push.apply(r,[n,"//"+n,f.location.protocol+"//"+n])}return r.length&&(s+="trustedOrigins="+v(r.join(","))),!0===t.forceEnhancedClipboard&&(s+=(s?"&":"")+"forceEnhancedClipboard=true"),"string"==typeof t.swfObjectId&&t.swfObjectId&&(s+=(s?"&":"")+"swfObjectId="+v(t.swfObjectId)),"string"==typeof t.jsVersion&&t.jsVersion&&(s+=(s?"&":"")+"jsVersion="+v(t.jsVersion)),s},Lt=function(t,e){var i=a(e.swfPath),e=(null===i&&(i=t),function(t){var e,i,n,o=[];if("object"==typeof(t="string"==typeof t?[t]:t)&&t&&"number"==typeof t.length)for(e=0,i=t.length;e<i;e++)if(_.call(t,e)&&(n=a(t[e]))){if("*"===n){o.length=0,o.push("*");break}-1===o.indexOf(n)&&o.push(n)}return o}(e.trustedDomains)),n=e.length;if(0<n){if(1===n&&"*"===e[0])return"always";if(-1!==e.indexOf(t))return 1===n&&t===i?"sameDomain":"always"}return"never"},Ot=function(){try{return m.activeElement}catch(t){return null}},$t=function(t,e){var i,n,o,s=[];if("string"==typeof e&&e&&(s=e.split(/\s+/)),t&&1===t.nodeType&&0<s.length){for(o=(" "+(t.className||"")+" ").replace(/[\t\r\n\f]/g," "),i=0,n=s.length;i<n;i++)-1===o.indexOf(" "+s[i]+" ")&&(o+=s[i]+" ");(o=o.replace(/^\s+|\s+$/g,""))!==t.className&&(t.className=o)}return t},$=function(t,e){var i,n,o,s=[];if("string"==typeof e&&e&&(s=e.split(/\s+/)),t&&1===t.nodeType&&0<s.length&&t.className){for(o=(" "+t.className+" ").replace(/[\t\r\n\f]/g," "),i=0,n=s.length;i<n;i++)o=o.replace(" "+s[i]+" "," ");(o=o.replace(/^\s+|\s+$/g,""))!==t.className&&(t.className=o)}return t},Mt=function(t,e){var i=J(t,null).getPropertyValue(e);return"cursor"!==e||i&&"auto"!==i||"A"!==t.nodeName?i:"pointer"},M=function(t){var e,i,n,o,s,r,a,l,c={left:0,top:0,width:0,height:0};return t.getBoundingClientRect&&(t=t.getBoundingClientRect(),e=f.pageXOffset,i=f.pageYOffset,n=m.documentElement.clientLeft||0,o=m.documentElement.clientTop||0,l=a=0,"relative"===Mt(m.body,"position")&&(s=m.body.getBoundingClientRect(),r=m.documentElement.getBoundingClientRect(),a=s.left-r.left||0,l=s.top-r.top||0),c.left=t.left+e-n-a,c.top=t.top+i-o-l,c.width="width"in t?t.width:t.right-t.left,c.height="height"in t?t.height:t.bottom-t.top),c},j=function(){X(E),E=0,Q(e),e=0},o=function(t){var e;return/^(?:auto|inherit)$/.test(t)?t:("number"!=typeof t||it(t)?"string"==typeof t&&(e=o(et(t,10))):e=t,"number"==typeof e?e:"auto")},P=(B(K),d(!0),function(){if(!(this instanceof P))return new P;"function"==typeof P._createClient&&P._createClient.apply(this,k(arguments))}),jt=(P.version="2.4.0-beta.1",P.config=function(){return t.apply(this,k(arguments))},P.state=function(){return function(){return d(),{browser:x(function(t,e){for(var i={},n=0,o=e.length;n<o;n++)e[n]in t&&(i[e[n]]=t[e[n]]);return i}(g,["userAgent","platform","appName","appVersion"]),{isSupported:c()}),flash:function(t,e){var i,n={};for(i in t)-1===e.indexOf(i)&&(n[i]=t[i]);return n}(T,["bridge"]),zeroclipboard:{version:P.version,config:P.config()}}}.apply(this,k(arguments))},P.isFlashUnusable=function(){return function(){return!!(T.sandboxed||T.disabled||T.outdated||T.unavailable||T.degraded||T.deactivated)}.apply(this,k(arguments))},P.on=function(){return function(i,t){var e,n,o,s={};if("string"==typeof i&&i?o=i.toLowerCase().split(/\s+/):"object"!=typeof i||!i||"length"in i||void 0!==t||w(i).forEach(function(t){var e=i[t];"function"==typeof e&&P.on(t,e)}),o&&o.length&&t){for(e=0,n=o.length;e<n;e++)s[i=o[e].replace(/^on/,"")]=!0,S[i]||(S[i]=[]),S[i].push(t);if(s.ready&&T.ready&&P.emit({type:"ready"}),s.error){for(c()||P.emit({type:"error",name:"browser-unsupported"}),e=0,n=D.length;e<n;e++)if(!0===T[D[e].replace(/^flash-/,"")]){P.emit({type:"error",name:D[e]});break}u!==h&&P.version!==u&&P.emit({type:"error",name:"version-mismatch",jsVersion:P.version,swfVersion:u})}}return P}.apply(this,k(arguments))},P.off=function(){return function(i,t){var e,n,o,s,r;if(0===arguments.length?s=w(S):"string"==typeof i&&i?s=i.toLowerCase().split(/\s+/):"object"!=typeof i||!i||"length"in i||void 0!==t||w(i).forEach(function(t){var e=i[t];"function"==typeof e&&P.off(t,e)}),s&&s.length)for(e=0,n=s.length;e<n;e++)if(i=s[e].replace(/^on/,""),(r=S[i])&&r.length)if(t)for(o=r.indexOf(t);-1!==o;)r.splice(o,1),o=r.indexOf(t,o);else r.length=0;return P}.apply(this,k(arguments))},P.handlers=function(){return function(t){t="string"==typeof t&&t?s(S[t])||null:s(S);return t}.apply(this,k(arguments))},P.emit=function(){return i.apply(this,k(arguments))},P.create=function(){return H.apply(this,k(arguments))},P.destroy=function(){return F.apply(this,k(arguments))},P.setData=function(){return R.apply(this,k(arguments))},P.clearData=function(){return q.apply(this,k(arguments))},P.getData=function(){return function(t){return void 0===t?s(C):"string"==typeof t&&_.call(C,t)?C[t]:void 0}.apply(this,k(arguments))},P.focus=P.activate=function(){return Y.apply(this,k(arguments))},P.blur=P.deactivate=function(){return function(){var t=O(T.bridge);t&&(t.removeAttribute("title"),t.style.left="0px",t.style.top="-9999px",t.style.width="1px",t.style.height="1px"),l&&($(l,A.hoverClass),$(l,A.activeClass),l=null)}.apply(this,k(arguments))},P.activeElement=function(){return function(){return l||null}.apply(this,k(arguments))},0),N={},Pt=0,I={},Nt={};x(A,{autoActivate:!0});P._createClient=function(){!function(t){var e,i=this;i.id=""+jt++,N[i.id]=e={instance:i,elements:[],handlers:{},coreWildcardHandler:function(t){return i.emit(t)}},t&&i.clip(t),P.on("*",e.coreWildcardHandler),P.on("destroy",function(){i.destroy()}),P.create()}.apply(this,k(arguments))},P.prototype.on=function(){return function(i,t){var e,n,o,s={},r=this,a=N[r.id],l=a&&a.handlers;if(!a)throw new Error("Attempted to add new listener(s) to a destroyed ZeroClipboard client instance");if("string"==typeof i&&i?o=i.toLowerCase().split(/\s+/):"object"!=typeof i||!i||"length"in i||void 0!==t||w(i).forEach(function(t){var e=i[t];"function"==typeof e&&r.on(t,e)}),o&&o.length&&t){for(e=0,n=o.length;e<n;e++)s[i=o[e].replace(/^on/,"")]=!0,l[i]||(l[i]=[]),l[i].push(t);if(s.ready&&T.ready&&this.emit({type:"ready",client:this}),s.error){for(e=0,n=D.length;e<n;e++)if(T[D[e].replace(/^flash-/,"")]){this.emit({type:"error",name:D[e],client:this});break}u!==h&&P.version!==u&&this.emit({type:"error",name:"version-mismatch",jsVersion:P.version,swfVersion:u})}}return r}.apply(this,k(arguments))},P.prototype.off=function(){return function(i,t){var e,n,o,s,r,a=this,l=N[a.id],c=l&&l.handlers;if(c&&(0===arguments.length?s=w(c):"string"==typeof i&&i?s=i.split(/\s+/):"object"!=typeof i||!i||"length"in i||void 0!==t||w(i).forEach(function(t){var e=i[t];"function"==typeof e&&a.off(t,e)}),s)&&s.length)for(e=0,n=s.length;e<n;e++)if((r=c[i=s[e].toLowerCase().replace(/^on/,"")])&&r.length)if(t)for(o=r.indexOf(t);-1!==o;)r.splice(o,1),o=r.indexOf(t,o);else r.length=0;return a}.apply(this,k(arguments))},P.prototype.handlers=function(){return function(t){var e=null,i=N[this.id]&&N[this.id].handlers;return e=i?"string"==typeof t&&t?i[t]?i[t].slice(0):[]:s(i):e}.apply(this,k(arguments))},P.prototype.emit=function(){return z.apply(this,k(arguments))},P.prototype.clip=function(){return U.apply(this,k(arguments))},P.prototype.unclip=function(){return G.apply(this,k(arguments))},P.prototype.elements=function(){return function(){var t=N[this.id];return t&&t.elements?t.elements.slice(0):[]}.apply(this,k(arguments))},P.prototype.destroy=function(){return function(){var t=N[this.id];t&&(this.unclip(),this.off(),P.off("*",t.coreWildcardHandler),delete N[this.id])}.apply(this,k(arguments))},P.prototype.setText=function(t){if(N[this.id])return P.setData("text/plain",t),this;throw new Error("Attempted to set pending clipboard data from a destroyed ZeroClipboard client instance")},P.prototype.setHtml=function(t){if(N[this.id])return P.setData("text/html",t),this;throw new Error("Attempted to set pending clipboard data from a destroyed ZeroClipboard client instance")},P.prototype.setRichText=function(t){if(N[this.id])return P.setData("application/rtf",t),this;throw new Error("Attempted to set pending clipboard data from a destroyed ZeroClipboard client instance")},P.prototype.setData=function(){if(N[this.id])return P.setData.apply(this,k(arguments)),this;throw new Error("Attempted to set pending clipboard data from a destroyed ZeroClipboard client instance")},P.prototype.clearData=function(){if(N[this.id])return P.clearData.apply(this,k(arguments)),this;throw new Error("Attempted to clear pending clipboard data from a destroyed ZeroClipboard client instance")},P.prototype.getData=function(){if(N[this.id])return P.getData.apply(this,k(arguments));throw new Error("Attempted to get pending clipboard data from a destroyed ZeroClipboard client instance")},"function"==typeof define&&define.amd?define(function(){return P}):"object"==typeof module&&module&&"object"==typeof module.exports&&module.exports?module.exports=P:r.ZeroClipboard=P}(function(){return this||window}()),!function(t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Clipboard=t()}(function(){return function n(o,s,r){function a(i,t){if(!s[i]){if(!o[i]){var e="function"==typeof require&&require;if(!t&&e)return e(i,!0);if(l)return l(i,!0);t=new Error("Cannot find module '"+i+"'");throw t.code="MODULE_NOT_FOUND",t}e=s[i]={exports:{}};o[i][0].call(e.exports,function(t){var e=o[i][1][t];return a(e||t)},e,e.exports,n,o,s,r)}return s[i].exports}for(var l="function"==typeof require&&require,t=0;t<r.length;t++)a(r[t]);return a}({1:[function(t,e,i){var n;"undefined"==typeof Element||Element.prototype.matches||((n=Element.prototype).matches=n.matchesSelector||n.mozMatchesSelector||n.msMatchesSelector||n.oMatchesSelector||n.webkitMatchesSelector),e.exports=function(t,e){for(;t&&9!==t.nodeType;){if(t.matches(e))return t;t=t.parentNode}}},{}],2:[function(t,e,i){var r=t("./closest");e.exports=function(t,e,i,n,o){var s=function(e,i,t,n){return function(t){t.delegateTarget=r(t.target,i),t.delegateTarget&&n.call(e,t)}}.apply(this,arguments);return t.addEventListener(i,s,o),{destroy:function(){t.removeEventListener(i,s,o)}}}},{"./closest":1}],3:[function(t,e,i){i.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},i.nodeList=function(t){var e=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===e||"[object HTMLCollection]"===e)&&"length"in t&&(0===t.length||i.node(t[0]))},i.string=function(t){return"string"==typeof t||t instanceof String},i.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},{}],4:[function(t,e,i){var c=t("./is"),d=t("delegate");e.exports=function(t,e,i){if(!t&&!e&&!i)throw new Error("Missing required arguments");if(!c.string(e))throw new TypeError("Second argument must be a String");if(!c.fn(i))throw new TypeError("Third argument must be a Function");if(c.node(t))return a=e,l=i,(r=t).addEventListener(a,l),{destroy:function(){r.removeEventListener(a,l)}};if(c.nodeList(t))return n=t,o=e,s=i,Array.prototype.forEach.call(n,function(t){t.addEventListener(o,s)}),{destroy:function(){Array.prototype.forEach.call(n,function(t){t.removeEventListener(o,s)})}};if(c.string(t))return d(document.body,t,e,i);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList");var n,o,s,r,a,l}},{"./is":3,delegate:2}],5:[function(t,e,i){e.exports=function(t){var e,i;return t="SELECT"===t.nodeName?(t.focus(),t.value):"INPUT"===t.nodeName||"TEXTAREA"===t.nodeName?((e=t.hasAttribute("readonly"))||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),e||t.removeAttribute("readonly"),t.value):(t.hasAttribute("contenteditable")&&t.focus(),e=window.getSelection(),(i=document.createRange()).selectNodeContents(t),e.removeAllRanges(),e.addRange(i),e.toString())}},{}],6:[function(t,e,i){function n(){}n.prototype={on:function(t,e,i){var n=this.e||(this.e={});return(n[t]||(n[t]=[])).push({fn:e,ctx:i}),this},once:function(t,e,i){var n=this;function o(){n.off(t,o),e.apply(i,arguments)}return o._=e,this.on(t,o,i)},emit:function(t){for(var e=[].slice.call(arguments,1),i=((this.e||(this.e={}))[t]||[]).slice(),n=0,o=i.length;n<o;n++)i[n].fn.apply(i[n].ctx,e);return this},off:function(t,e){var i=this.e||(this.e={}),n=i[t],o=[];if(n&&e)for(var s=0,r=n.length;s<r;s++)n[s].fn!==e&&n[s].fn._!==e&&o.push(n[s]);return o.length?i[t]=o:delete i[t],this}},e.exports=n},{}],7:[function(t,e,i){var n,o;n=this,o=function(t,e){var i=(e=e)&&e.__esModule?e:{default:e};var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};function o(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}(function(t,e,i){e&&o(t.prototype,e),i&&o(t,i)})(s,[{key:"resolveOptions",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir"),e=(this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=document.body.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px",window.pageYOffset||document.documentElement.scrollTop);this.fakeElem.style.top=e+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,document.body.appendChild(this.fakeElem),this.selectedText=(0,i.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(document.body.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(document.body.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,i.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var e=void 0;try{e=document.execCommand(this.action)}catch(t){e=!1}this.handleResult(e)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.target&&this.target.blur(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){if(this._action=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"copy","copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":n(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]);e=s;function s(t){if(!(this instanceof s))throw new TypeError("Cannot call a class as a function");this.resolveOptions(t),this.initSelection()}t.exports=e},void 0!==i?o(e,t("select")):(o(o={exports:{}},n.select),n.clipboardAction=o.exports)},{select:5}],8:[function(t,e,i){var n,o;n=this,o=function(t,e,i,n){var o=r(e),e=r(i),s=r(n);function r(t){return t&&t.__esModule?t:{default:t}}var a=function(t,e,i){return e&&l(t.prototype,e),i&&l(t,i),t};function l(t,e){for(var i=0;i<e.length;i++){var n=e[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}i=function(t){var e=n;if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);function n(t,e){var i;if(this instanceof n)return(i=function(t,e){if(t)return!e||"object"!=typeof e&&"function"!=typeof e?t:e;throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}(this,(n.__proto__||Object.getPrototypeOf(n)).call(this))).resolveOptions(e),i.listenClick(t),i;throw new TypeError("Cannot call a class as a function")}return e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t),a(n,[{key:"resolveOptions",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,s.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){t=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new o.default({action:this.action(t),target:this.target(t),text:this.text(t),trigger:t,emitter:this})}},{key:"defaultAction",value:function(t){return c("action",t)}},{key:"defaultTarget",value:function(t){t=c("target",t);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(t){return c("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof t?[t]:t,e=!!document.queryCommandSupported;return t.forEach(function(t){e=e&&!!document.queryCommandSupported(t)}),e}}]),n}(e.default);function c(t,e){t="data-clipboard-"+t;if(e.hasAttribute(t))return e.getAttribute(t)}t.exports=i},void 0!==i?o(e,t("./clipboard-action"),t("tiny-emitter"),t("good-listener")):(o(o={exports:{}},n.clipboardAction,n.tinyEmitter,n.goodListener),n.clipboard=o.exports)},{"./clipboard-action":7,"good-listener":4,"tiny-emitter":6}]},{},[8])(8)}),!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):"undefined"!=typeof exports?module.exports=t(require("jquery")):t(jQuery)}(function(c){"use strict";var n,s=window.Slick||{};n=0,(s=function(t,e){var i=this;i.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:c(t),appendDots:c(t),arrows:!0,asNavFor:null,prevArrow:'<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',nextArrow:'<button class="slick-next" aria-label="Next" type="button">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(t,e){return c('<button type="button" />').text(e+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,focusOnChange:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnFocus:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},i.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,scrolling:!1,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,swiping:!1,$list:null,touchObject:{},transformsEnabled:!1,unslicked:!1},c.extend(i,i.initials),i.activeBreakpoint=null,i.animType=null,i.animProp=null,i.breakpoints=[],i.breakpointSettings=[],i.cssTransitions=!1,i.focussed=!1,i.interrupted=!1,i.hidden="hidden",i.paused=!0,i.positionProp=null,i.respondTo=null,i.rowCount=1,i.shouldClick=!0,i.$slider=c(t),i.$slidesCache=null,i.transformType=null,i.transitionType=null,i.visibilityChange="visibilitychange",i.windowWidth=0,i.windowTimer=null,t=c(t).data("slick")||{},i.options=c.extend({},i.defaults,e,t),i.currentSlide=i.options.initialSlide,i.originalSettings=i.options,void 0!==document.mozHidden?(i.hidden="mozHidden",i.visibilityChange="mozvisibilitychange"):void 0!==document.webkitHidden&&(i.hidden="webkitHidden",i.visibilityChange="webkitvisibilitychange"),i.autoPlay=c.proxy(i.autoPlay,i),i.autoPlayClear=c.proxy(i.autoPlayClear,i),i.autoPlayIterator=c.proxy(i.autoPlayIterator,i),i.changeSlide=c.proxy(i.changeSlide,i),i.clickHandler=c.proxy(i.clickHandler,i),i.selectHandler=c.proxy(i.selectHandler,i),i.setPosition=c.proxy(i.setPosition,i),i.swipeHandler=c.proxy(i.swipeHandler,i),i.dragHandler=c.proxy(i.dragHandler,i),i.keyHandler=c.proxy(i.keyHandler,i),i.instanceUid=n++,i.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,i.registerBreakpoints(),i.init(!0)}).prototype.activateADA=function(){this.$slideTrack.find(".slick-active").attr({"aria-hidden":"false"}).find("a, input, button, select").attr({tabindex:"0"})},s.prototype.addSlide=s.prototype.slickAdd=function(t,e,i){var n=this;if("boolean"==typeof e)i=e,e=null;else if(e<0||e>=n.slideCount)return!1;n.unload(),"number"==typeof e?0===e&&0===n.$slides.length?c(t).appendTo(n.$slideTrack):i?c(t).insertBefore(n.$slides.eq(e)):c(t).insertAfter(n.$slides.eq(e)):!0===i?c(t).prependTo(n.$slideTrack):c(t).appendTo(n.$slideTrack),n.$slides=n.$slideTrack.children(this.options.slide),n.$slideTrack.children(this.options.slide).detach(),n.$slideTrack.append(n.$slides),n.$slides.each(function(t,e){c(e).attr("data-slick-index",t)}),n.$slidesCache=n.$slides,n.reinit()},s.prototype.animateHeight=function(){var t;1===this.options.slidesToShow&&!0===this.options.adaptiveHeight&&!1===this.options.vertical&&(t=this.$slides.eq(this.currentSlide).outerHeight(!0),this.$list.animate({height:t},this.options.speed))},s.prototype.animateSlide=function(t,e){var i={},n=this;n.animateHeight(),!0===n.options.rtl&&!1===n.options.vertical&&(t=-t),!1===n.transformsEnabled?!1===n.options.vertical?n.$slideTrack.animate({left:t},n.options.speed,n.options.easing,e):n.$slideTrack.animate({top:t},n.options.speed,n.options.easing,e):!1===n.cssTransitions?(!0===n.options.rtl&&(n.currentLeft=-n.currentLeft),c({animStart:n.currentLeft}).animate({animStart:t},{duration:n.options.speed,easing:n.options.easing,step:function(t){t=Math.ceil(t),!1===n.options.vertical?i[n.animType]="translate("+t+"px, 0px)":i[n.animType]="translate(0px,"+t+"px)",n.$slideTrack.css(i)},complete:function(){e&&e.call()}})):(n.applyTransition(),t=Math.ceil(t),!1===n.options.vertical?i[n.animType]="translate3d("+t+"px, 0px, 0px)":i[n.animType]="translate3d(0px,"+t+"px, 0px)",n.$slideTrack.css(i),e&&setTimeout(function(){n.disableTransition(),e.call()},n.options.speed))},s.prototype.getNavTarget=function(){var t=this.options.asNavFor;return t=t&&null!==t?c(t).not(this.$slider):t},s.prototype.asNavFor=function(e){var t=this.getNavTarget();null!==t&&"object"==typeof t&&t.each(function(){var t=c(this).slick("getSlick");t.unslicked||t.slideHandler(e,!0)})},s.prototype.applyTransition=function(t){var e=this,i={};!1===e.options.fade?i[e.transitionType]=e.transformType+" "+e.options.speed+"ms "+e.options.cssEase:i[e.transitionType]="opacity "+e.options.speed+"ms "+e.options.cssEase,(!1===e.options.fade?e.$slideTrack:e.$slides.eq(t)).css(i)},s.prototype.autoPlay=function(){this.autoPlayClear(),this.slideCount>this.options.slidesToShow&&(this.autoPlayTimer=setInterval(this.autoPlayIterator,this.options.autoplaySpeed))},s.prototype.autoPlayClear=function(){this.autoPlayTimer&&clearInterval(this.autoPlayTimer)},s.prototype.autoPlayIterator=function(){var t=this,e=t.currentSlide+t.options.slidesToScroll;t.paused||t.interrupted||t.focussed||(!1===t.options.infinite&&(1===t.direction&&t.currentSlide+1===t.slideCount-1?t.direction=0:0===t.direction&&(e=t.currentSlide-t.options.slidesToScroll,t.currentSlide-1==0)&&(t.direction=1)),t.slideHandler(e))},s.prototype.buildArrows=function(){var t=this;!0===t.options.arrows&&(t.$prevArrow=c(t.options.prevArrow).addClass("slick-arrow"),t.$nextArrow=c(t.options.nextArrow).addClass("slick-arrow"),t.slideCount>t.options.slidesToShow?(t.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),t.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),t.htmlExpr.test(t.options.prevArrow)&&t.$prevArrow.prependTo(t.options.appendArrows),t.htmlExpr.test(t.options.nextArrow)&&t.$nextArrow.appendTo(t.options.appendArrows),!0!==t.options.infinite&&t.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true")):t.$prevArrow.add(t.$nextArrow).addClass("slick-hidden").attr({"aria-disabled":"true",tabindex:"-1"}))},s.prototype.buildDots=function(){var t,e;if(!0===this.options.dots){for(this.$slider.addClass("slick-dotted"),e=c("<ul />").addClass(this.options.dotsClass),t=0;t<=this.getDotCount();t+=1)e.append(c("<li />").append(this.options.customPaging.call(this,this,t)));this.$dots=e.appendTo(this.options.appendDots),this.$dots.find("li").first().addClass("slick-active")}},s.prototype.buildOut=function(){var t=this;t.$slides=t.$slider.children(t.options.slide+":not(.slick-cloned)").addClass("slick-slide"),t.slideCount=t.$slides.length,t.$slides.each(function(t,e){c(e).attr("data-slick-index",t).data("originalStyling",c(e).attr("style")||"")}),t.$slider.addClass("slick-slider"),t.$slideTrack=0===t.slideCount?c('<div class="slick-track"/>').appendTo(t.$slider):t.$slides.wrapAll('<div class="slick-track"/>').parent(),t.$list=t.$slideTrack.wrap('<div class="slick-list"/>').parent(),t.$slideTrack.css("opacity",0),!0!==t.options.centerMode&&!0!==t.options.swipeToSlide||(t.options.slidesToScroll=1),c("img[data-lazy]",t.$slider).not("[src]").addClass("slick-loading"),t.setupInfinite(),t.buildArrows(),t.buildDots(),t.updateDots(),t.setSlideClasses("number"==typeof t.currentSlide?t.currentSlide:0),!0===t.options.draggable&&t.$list.addClass("draggable")},s.prototype.buildRows=function(){var t,e,i,n=this,o=document.createDocumentFragment(),s=n.$slider.children();if(1<n.options.rows){for(i=n.options.slidesPerRow*n.options.rows,e=Math.ceil(s.length/i),t=0;t<e;t++){for(var r=document.createElement("div"),a=0;a<n.options.rows;a++){for(var l=document.createElement("div"),c=0;c<n.options.slidesPerRow;c++){var d=t*i+(a*n.options.slidesPerRow+c);s.get(d)&&l.appendChild(s.get(d))}r.appendChild(l)}o.appendChild(r)}n.$slider.empty().append(o),n.$slider.children().children().children().css({width:100/n.options.slidesPerRow+"%",display:"inline-block"})}},s.prototype.checkResponsive=function(t,e){var i,n,o,s=this,r=!1,a=s.$slider.width(),l=window.innerWidth||c(window).width();if("window"===s.respondTo?o=l:"slider"===s.respondTo?o=a:"min"===s.respondTo&&(o=Math.min(l,a)),s.options.responsive&&s.options.responsive.length&&null!==s.options.responsive){for(i in n=null,s.breakpoints)s.breakpoints.hasOwnProperty(i)&&(!1===s.originalSettings.mobileFirst?o<s.breakpoints[i]&&(n=s.breakpoints[i]):o>s.breakpoints[i]&&(n=s.breakpoints[i]));null!==n?null!==s.activeBreakpoint&&n===s.activeBreakpoint&&!e||(s.activeBreakpoint=n,"unslick"===s.breakpointSettings[n]?s.unslick(n):(s.options=c.extend({},s.originalSettings,s.breakpointSettings[n]),!0===t&&(s.currentSlide=s.options.initialSlide),s.refresh(t)),r=n):null!==s.activeBreakpoint&&(s.activeBreakpoint=null,s.options=s.originalSettings,!0===t&&(s.currentSlide=s.options.initialSlide),s.refresh(t),r=n),t||!1===r||s.$slider.trigger("breakpoint",[s,r])}},s.prototype.changeSlide=function(t,e){var i,n=this,o=c(t.currentTarget);switch(o.is("a")&&t.preventDefault(),o.is("li")||(o=o.closest("li")),i=n.slideCount%n.options.slidesToScroll!=0?0:(n.slideCount-n.currentSlide)%n.options.slidesToScroll,t.data.message){case"previous":s=0==i?n.options.slidesToScroll:n.options.slidesToShow-i,n.slideCount>n.options.slidesToShow&&n.slideHandler(n.currentSlide-s,!1,e);break;case"next":s=0==i?n.options.slidesToScroll:i,n.slideCount>n.options.slidesToShow&&n.slideHandler(n.currentSlide+s,!1,e);break;case"index":var s=0===t.data.index?0:t.data.index||o.index()*n.options.slidesToScroll;n.slideHandler(n.checkNavigable(s),!1,e),o.children().trigger("focus");break;default:return}},s.prototype.checkNavigable=function(t){var e=this.getNavigableIndexes(),i=0;if(t>e[e.length-1])t=e[e.length-1];else for(var n in e){if(t<e[n]){t=i;break}i=e[n]}return t},s.prototype.cleanUpEvents=function(){var t=this;t.options.dots&&null!==t.$dots&&(c("li",t.$dots).off("click.slick",t.changeSlide).off("mouseenter.slick",c.proxy(t.interrupt,t,!0)).off("mouseleave.slick",c.proxy(t.interrupt,t,!1)),!0===t.options.accessibility)&&t.$dots.off("keydown.slick",t.keyHandler),t.$slider.off("focus.slick blur.slick"),!0===t.options.arrows&&t.slideCount>t.options.slidesToShow&&(t.$prevArrow&&t.$prevArrow.off("click.slick",t.changeSlide),t.$nextArrow&&t.$nextArrow.off("click.slick",t.changeSlide),!0===t.options.accessibility)&&(t.$prevArrow&&t.$prevArrow.off("keydown.slick",t.keyHandler),t.$nextArrow)&&t.$nextArrow.off("keydown.slick",t.keyHandler),t.$list.off("touchstart.slick mousedown.slick",t.swipeHandler),t.$list.off("touchmove.slick mousemove.slick",t.swipeHandler),t.$list.off("touchend.slick mouseup.slick",t.swipeHandler),t.$list.off("touchcancel.slick mouseleave.slick",t.swipeHandler),t.$list.off("click.slick",t.clickHandler),c(document).off(t.visibilityChange,t.visibility),t.cleanUpSlideEvents(),!0===t.options.accessibility&&t.$list.off("keydown.slick",t.keyHandler),!0===t.options.focusOnSelect&&c(t.$slideTrack).children().off("click.slick",t.selectHandler),c(window).off("orientationchange.slick.slick-"+t.instanceUid,t.orientationChange),c(window).off("resize.slick.slick-"+t.instanceUid,t.resize),c("[draggable!=true]",t.$slideTrack).off("dragstart",t.preventDefault),c(window).off("load.slick.slick-"+t.instanceUid,t.setPosition)},s.prototype.cleanUpSlideEvents=function(){this.$list.off("mouseenter.slick",c.proxy(this.interrupt,this,!0)),this.$list.off("mouseleave.slick",c.proxy(this.interrupt,this,!1))},s.prototype.cleanUpRows=function(){var t;1<this.options.rows&&((t=this.$slides.children().children()).removeAttr("style"),this.$slider.empty().append(t))},s.prototype.clickHandler=function(t){!1===this.shouldClick&&(t.stopImmediatePropagation(),t.stopPropagation(),t.preventDefault())},s.prototype.destroy=function(t){var e=this;e.autoPlayClear(),e.touchObject={},e.cleanUpEvents(),c(".slick-cloned",e.$slider).detach(),e.$dots&&e.$dots.remove(),e.$prevArrow&&e.$prevArrow.length&&(e.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),e.htmlExpr.test(e.options.prevArrow))&&e.$prevArrow.remove(),e.$nextArrow&&e.$nextArrow.length&&(e.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),e.htmlExpr.test(e.options.nextArrow))&&e.$nextArrow.remove(),e.$slides&&(e.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function(){c(this).attr("style",c(this).data("originalStyling"))}),e.$slideTrack.children(this.options.slide).detach(),e.$slideTrack.detach(),e.$list.detach(),e.$slider.append(e.$slides)),e.cleanUpRows(),e.$slider.removeClass("slick-slider"),e.$slider.removeClass("slick-initialized"),e.$slider.removeClass("slick-dotted"),e.unslicked=!0,t||e.$slider.trigger("destroy",[e])},s.prototype.disableTransition=function(t){var e={};e[this.transitionType]="",(!1===this.options.fade?this.$slideTrack:this.$slides.eq(t)).css(e)},s.prototype.fadeSlide=function(t,e){var i=this;!1===i.cssTransitions?(i.$slides.eq(t).css({zIndex:i.options.zIndex}),i.$slides.eq(t).animate({opacity:1},i.options.speed,i.options.easing,e)):(i.applyTransition(t),i.$slides.eq(t).css({opacity:1,zIndex:i.options.zIndex}),e&&setTimeout(function(){i.disableTransition(t),e.call()},i.options.speed))},s.prototype.fadeSlideOut=function(t){!1===this.cssTransitions?this.$slides.eq(t).animate({opacity:0,zIndex:this.options.zIndex-2},this.options.speed,this.options.easing):(this.applyTransition(t),this.$slides.eq(t).css({opacity:0,zIndex:this.options.zIndex-2}))},s.prototype.filterSlides=s.prototype.slickFilter=function(t){null!==t&&(this.$slidesCache=this.$slides,this.unload(),this.$slideTrack.children(this.options.slide).detach(),this.$slidesCache.filter(t).appendTo(this.$slideTrack),this.reinit())},s.prototype.focusHandler=function(){var i=this;i.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick","*",function(t){t.stopImmediatePropagation();var e=c(this);setTimeout(function(){i.options.pauseOnFocus&&(i.focussed=e.is(":focus"),i.autoPlay())},0)})},s.prototype.getCurrent=s.prototype.slickCurrentSlide=function(){return this.currentSlide},s.prototype.getDotCount=function(){var t=this,e=0,i=0,n=0;if(!0===t.options.infinite)if(t.slideCount<=t.options.slidesToShow)++n;else for(;e<t.slideCount;)++n,e=i+t.options.slidesToScroll,i+=t.options.slidesToScroll<=t.options.slidesToShow?t.options.slidesToScroll:t.options.slidesToShow;else if(!0===t.options.centerMode)n=t.slideCount;else if(t.options.asNavFor)for(;e<t.slideCount;)++n,e=i+t.options.slidesToScroll,i+=t.options.slidesToScroll<=t.options.slidesToShow?t.options.slidesToScroll:t.options.slidesToShow;else n=1+Math.ceil((t.slideCount-t.options.slidesToShow)/t.options.slidesToScroll);return n-1},s.prototype.getLeft=function(t){var e,i,n=this,o=0;return n.slideOffset=0,e=n.$slides.first().outerHeight(!0),!0===n.options.infinite?(n.slideCount>n.options.slidesToShow&&(n.slideOffset=n.slideWidth*n.options.slidesToShow*-1,i=-1,!0===n.options.vertical&&!0===n.options.centerMode&&(2===n.options.slidesToShow?i=-1.5:1===n.options.slidesToShow&&(i=-2)),o=e*n.options.slidesToShow*i),n.slideCount%n.options.slidesToScroll!=0&&t+n.options.slidesToScroll>n.slideCount&&n.slideCount>n.options.slidesToShow&&(o=t>n.slideCount?(n.slideOffset=(n.options.slidesToShow-(t-n.slideCount))*n.slideWidth*-1,(n.options.slidesToShow-(t-n.slideCount))*e*-1):(n.slideOffset=n.slideCount%n.options.slidesToScroll*n.slideWidth*-1,n.slideCount%n.options.slidesToScroll*e*-1))):t+n.options.slidesToShow>n.slideCount&&(n.slideOffset=(t+n.options.slidesToShow-n.slideCount)*n.slideWidth,o=(t+n.options.slidesToShow-n.slideCount)*e),n.slideCount<=n.options.slidesToShow&&(o=n.slideOffset=0),!0===n.options.centerMode&&n.slideCount<=n.options.slidesToShow?n.slideOffset=n.slideWidth*Math.floor(n.options.slidesToShow)/2-n.slideWidth*n.slideCount/2:!0===n.options.centerMode&&!0===n.options.infinite?n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)-n.slideWidth:!0===n.options.centerMode&&(n.slideOffset=0,n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)),i=!1===n.options.vertical?t*n.slideWidth*-1+n.slideOffset:t*e*-1+o,!0===n.options.variableWidth&&(e=n.slideCount<=n.options.slidesToShow||!1===n.options.infinite?n.$slideTrack.children(".slick-slide").eq(t):n.$slideTrack.children(".slick-slide").eq(t+n.options.slidesToShow),i=!0===n.options.rtl?e[0]?-1*(n.$slideTrack.width()-e[0].offsetLeft-e.width()):0:e[0]?-1*e[0].offsetLeft:0,!0===n.options.centerMode)&&(e=n.slideCount<=n.options.slidesToShow||!1===n.options.infinite?n.$slideTrack.children(".slick-slide").eq(t):n.$slideTrack.children(".slick-slide").eq(t+n.options.slidesToShow+1),i=!0===n.options.rtl?e[0]?-1*(n.$slideTrack.width()-e[0].offsetLeft-e.width()):0:e[0]?-1*e[0].offsetLeft:0,i+=(n.$list.width()-e.outerWidth())/2),i},s.prototype.getOption=s.prototype.slickGetOption=function(t){return this.options[t]},s.prototype.getNavigableIndexes=function(){for(var t=this,e=0,i=0,n=[],o=!1===t.options.infinite?t.slideCount:(e=-1*t.options.slidesToScroll,i=-1*t.options.slidesToScroll,2*t.slideCount);e<o;)n.push(e),e=i+t.options.slidesToScroll,i+=t.options.slidesToScroll<=t.options.slidesToShow?t.options.slidesToScroll:t.options.slidesToShow;return n},s.prototype.getSlick=function(){return this},s.prototype.getSlideCount=function(){var i,n=this,o=!0===n.options.centerMode?n.slideWidth*Math.floor(n.options.slidesToShow/2):0;return!0===n.options.swipeToSlide?(n.$slideTrack.find(".slick-slide").each(function(t,e){if(e.offsetLeft-o+c(e).outerWidth()/2>-1*n.swipeLeft)return i=e,!1}),Math.abs(c(i).attr("data-slick-index")-n.currentSlide)||1):n.options.slidesToScroll},s.prototype.goTo=s.prototype.slickGoTo=function(t,e){this.changeSlide({data:{message:"index",index:parseInt(t)}},e)},s.prototype.init=function(t){var e=this;c(e.$slider).hasClass("slick-initialized")||(c(e.$slider).addClass("slick-initialized"),e.buildRows(),e.buildOut(),e.setProps(),e.startLoad(),e.loadSlider(),e.initializeEvents(),e.updateArrows(),e.updateDots(),e.checkResponsive(!0),e.focusHandler()),t&&e.$slider.trigger("init",[e]),!0===e.options.accessibility&&e.initADA(),e.options.autoplay&&(e.paused=!1,e.autoPlay())},s.prototype.initADA=function(){var i=this,n=Math.ceil(i.slideCount/i.options.slidesToShow),o=i.getNavigableIndexes().filter(function(t){return 0<=t&&t<i.slideCount});i.$slides.add(i.$slideTrack.find(".slick-cloned")).attr({"aria-hidden":"true",tabindex:"-1"}).find("a, input, button, select").attr({tabindex:"-1"}),null!==i.$dots&&(i.$slides.not(i.$slideTrack.find(".slick-cloned")).each(function(t){var e=o.indexOf(t);c(this).attr({role:"tabpanel",id:"slick-slide"+i.instanceUid+t,tabindex:-1}),-1!==e&&c(this).attr({"aria-describedby":"slick-slide-control"+i.instanceUid+e})}),i.$dots.attr("role","tablist").find("li").each(function(t){var e=o[t];c(this).attr({role:"presentation"}),c(this).find("button").first().attr({role:"tab",id:"slick-slide-control"+i.instanceUid+t,"aria-controls":"slick-slide"+i.instanceUid+e,"aria-label":t+1+" of "+n,"aria-selected":null,tabindex:"-1"})}).eq(i.currentSlide).find("button").attr({"aria-selected":"true",tabindex:"0"}).end());for(var t=i.currentSlide,e=t+i.options.slidesToShow;t<e;t++)i.$slides.eq(t).attr("tabindex",0);i.activateADA()},s.prototype.initArrowEvents=function(){var t=this;!0===t.options.arrows&&t.slideCount>t.options.slidesToShow&&(t.$prevArrow.off("click.slick").on("click.slick",{message:"previous"},t.changeSlide),t.$nextArrow.off("click.slick").on("click.slick",{message:"next"},t.changeSlide),!0===t.options.accessibility)&&(t.$prevArrow.on("keydown.slick",t.keyHandler),t.$nextArrow.on("keydown.slick",t.keyHandler))},s.prototype.initDotEvents=function(){var t=this;!0===t.options.dots&&(c("li",t.$dots).on("click.slick",{message:"index"},t.changeSlide),!0===t.options.accessibility)&&t.$dots.on("keydown.slick",t.keyHandler),!0===t.options.dots&&!0===t.options.pauseOnDotsHover&&c("li",t.$dots).on("mouseenter.slick",c.proxy(t.interrupt,t,!0)).on("mouseleave.slick",c.proxy(t.interrupt,t,!1))},s.prototype.initSlideEvents=function(){this.options.pauseOnHover&&(this.$list.on("mouseenter.slick",c.proxy(this.interrupt,this,!0)),this.$list.on("mouseleave.slick",c.proxy(this.interrupt,this,!1)))},s.prototype.initializeEvents=function(){var t=this;t.initArrowEvents(),t.initDotEvents(),t.initSlideEvents(),t.$list.on("touchstart.slick mousedown.slick",{action:"start"},t.swipeHandler),t.$list.on("touchmove.slick mousemove.slick",{action:"move"},t.swipeHandler),t.$list.on("touchend.slick mouseup.slick",{action:"end"},t.swipeHandler),t.$list.on("touchcancel.slick mouseleave.slick",{action:"end"},t.swipeHandler),t.$list.on("click.slick",t.clickHandler),c(document).on(t.visibilityChange,c.proxy(t.visibility,t)),!0===t.options.accessibility&&t.$list.on("keydown.slick",t.keyHandler),!0===t.options.focusOnSelect&&c(t.$slideTrack).children().on("click.slick",t.selectHandler),c(window).on("orientationchange.slick.slick-"+t.instanceUid,c.proxy(t.orientationChange,t)),c(window).on("resize.slick.slick-"+t.instanceUid,c.proxy(t.resize,t)),c("[draggable!=true]",t.$slideTrack).on("dragstart",t.preventDefault),c(window).on("load.slick.slick-"+t.instanceUid,t.setPosition),c(t.setPosition)},s.prototype.initUI=function(){!0===this.options.arrows&&this.slideCount>this.options.slidesToShow&&(this.$prevArrow.show(),this.$nextArrow.show()),!0===this.options.dots&&this.slideCount>this.options.slidesToShow&&this.$dots.show()},s.prototype.keyHandler=function(t){t.target.tagName.match("TEXTAREA|INPUT|SELECT")||(37===t.keyCode&&!0===this.options.accessibility?this.changeSlide({data:{message:!0===this.options.rtl?"next":"previous"}}):39===t.keyCode&&!0===this.options.accessibility&&this.changeSlide({data:{message:!0===this.options.rtl?"previous":"next"}}))},s.prototype.lazyLoad=function(){function t(t){c("img[data-lazy]",t).each(function(){var t=c(this),e=c(this).attr("data-lazy"),i=c(this).attr("data-srcset"),n=c(this).attr("data-sizes")||s.$slider.attr("data-sizes"),o=document.createElement("img");o.onload=function(){t.animate({opacity:0},100,function(){i&&(t.attr("srcset",i),n)&&t.attr("sizes",n),t.attr("src",e).animate({opacity:1},200,function(){t.removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading")}),s.$slider.trigger("lazyLoaded",[s,t,e])})},o.onerror=function(){t.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),s.$slider.trigger("lazyLoadError",[s,t,e])},o.src=e})}var e,i,n,s=this;if(!0===s.options.centerMode?n=!0===s.options.infinite?(i=s.currentSlide+(s.options.slidesToShow/2+1))+s.options.slidesToShow+2:(i=Math.max(0,s.currentSlide-(s.options.slidesToShow/2+1)),s.options.slidesToShow/2+1+2+s.currentSlide):(i=s.options.infinite?s.options.slidesToShow+s.currentSlide:s.currentSlide,n=Math.ceil(i+s.options.slidesToShow),!0===s.options.fade&&(0<i&&i--,n<=s.slideCount)&&n++),e=s.$slider.find(".slick-slide").slice(i,n),"anticipated"===s.options.lazyLoad)for(var o=i-1,r=n,a=s.$slider.find(".slick-slide"),l=0;l<s.options.slidesToScroll;l++)o<0&&(o=s.slideCount-1),e=(e=e.add(a.eq(o))).add(a.eq(r)),o--,r++;t(e),s.slideCount<=s.options.slidesToShow?t(s.$slider.find(".slick-slide")):s.currentSlide>=s.slideCount-s.options.slidesToShow?t(s.$slider.find(".slick-cloned").slice(0,s.options.slidesToShow)):0===s.currentSlide&&t(s.$slider.find(".slick-cloned").slice(-1*s.options.slidesToShow))},s.prototype.loadSlider=function(){this.setPosition(),this.$slideTrack.css({opacity:1}),this.$slider.removeClass("slick-loading"),this.initUI(),"progressive"===this.options.lazyLoad&&this.progressiveLazyLoad()},s.prototype.next=s.prototype.slickNext=function(){this.changeSlide({data:{message:"next"}})},s.prototype.orientationChange=function(){this.checkResponsive(),this.setPosition()},s.prototype.pause=s.prototype.slickPause=function(){this.autoPlayClear(),this.paused=!0},s.prototype.play=s.prototype.slickPlay=function(){this.autoPlay(),this.options.autoplay=!0,this.paused=!1,this.focussed=!1,this.interrupted=!1},s.prototype.postSlide=function(t){var e=this;e.unslicked||(e.$slider.trigger("afterChange",[e,t]),e.animating=!1,e.slideCount>e.options.slidesToShow&&e.setPosition(),e.swipeLeft=null,e.options.autoplay&&e.autoPlay(),!0===e.options.accessibility&&(e.initADA(),e.options.focusOnChange)&&c(e.$slides.get(e.currentSlide)).attr("tabindex",0).focus())},s.prototype.prev=s.prototype.slickPrev=function(){this.changeSlide({data:{message:"previous"}})},s.prototype.preventDefault=function(t){t.preventDefault()},s.prototype.progressiveLazyLoad=function(t){t=t||1;var e,i,n,o,s=this,r=c("img[data-lazy]",s.$slider);r.length?(e=r.first(),i=e.attr("data-lazy"),n=e.attr("data-srcset"),o=e.attr("data-sizes")||s.$slider.attr("data-sizes"),(r=document.createElement("img")).onload=function(){n&&(e.attr("srcset",n),o)&&e.attr("sizes",o),e.attr("src",i).removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading"),!0===s.options.adaptiveHeight&&s.setPosition(),s.$slider.trigger("lazyLoaded",[s,e,i]),s.progressiveLazyLoad()},r.onerror=function(){t<3?setTimeout(function(){s.progressiveLazyLoad(t+1)},500):(e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),s.$slider.trigger("lazyLoadError",[s,e,i]),s.progressiveLazyLoad())},r.src=i):s.$slider.trigger("allImagesLoaded",[s])},s.prototype.refresh=function(t){var e=this,i=e.slideCount-e.options.slidesToShow;!e.options.infinite&&e.currentSlide>i&&(e.currentSlide=i),e.slideCount<=e.options.slidesToShow&&(e.currentSlide=0),i=e.currentSlide,e.destroy(!0),c.extend(e,e.initials,{currentSlide:i}),e.init(),t||e.changeSlide({data:{message:"index",index:i}},!1)},s.prototype.registerBreakpoints=function(){var t,e,i,n=this,o=n.options.responsive||null;if("array"===c.type(o)&&o.length){for(t in n.respondTo=n.options.respondTo||"window",o)if(i=n.breakpoints.length-1,o.hasOwnProperty(t)){for(e=o[t].breakpoint;0<=i;)n.breakpoints[i]&&n.breakpoints[i]===e&&n.breakpoints.splice(i,1),i--;n.breakpoints.push(e),n.breakpointSettings[e]=o[t].settings}n.breakpoints.sort(function(t,e){return n.options.mobileFirst?t-e:e-t})}},s.prototype.reinit=function(){var t=this;t.$slides=t.$slideTrack.children(t.options.slide).addClass("slick-slide"),t.slideCount=t.$slides.length,t.currentSlide>=t.slideCount&&0!==t.currentSlide&&(t.currentSlide=t.currentSlide-t.options.slidesToScroll),t.slideCount<=t.options.slidesToShow&&(t.currentSlide=0),t.registerBreakpoints(),t.setProps(),t.setupInfinite(),t.buildArrows(),t.updateArrows(),t.initArrowEvents(),t.buildDots(),t.updateDots(),t.initDotEvents(),t.cleanUpSlideEvents(),t.initSlideEvents(),t.checkResponsive(!1,!0),!0===t.options.focusOnSelect&&c(t.$slideTrack).children().on("click.slick",t.selectHandler),t.setSlideClasses("number"==typeof t.currentSlide?t.currentSlide:0),t.setPosition(),t.focusHandler(),t.paused=!t.options.autoplay,t.autoPlay(),t.$slider.trigger("reInit",[t])},s.prototype.resize=function(){var t=this;c(window).width()!==t.windowWidth&&(clearTimeout(t.windowDelay),t.windowDelay=window.setTimeout(function(){t.windowWidth=c(window).width(),t.checkResponsive(),t.unslicked||t.setPosition()},50))},s.prototype.removeSlide=s.prototype.slickRemove=function(t,e,i){var n=this;if(t="boolean"==typeof t?!0===(e=t)?0:n.slideCount-1:!0===e?--t:t,n.slideCount<1||t<0||t>n.slideCount-1)return!1;n.unload(),(!0===i?n.$slideTrack.children():n.$slideTrack.children(this.options.slide).eq(t)).remove(),n.$slides=n.$slideTrack.children(this.options.slide),n.$slideTrack.children(this.options.slide).detach(),n.$slideTrack.append(n.$slides),n.$slidesCache=n.$slides,n.reinit()},s.prototype.setCSS=function(t){var e,i,n=this,o={};!0===n.options.rtl&&(t=-t),e="left"==n.positionProp?Math.ceil(t)+"px":"0px",i="top"==n.positionProp?Math.ceil(t)+"px":"0px",o[n.positionProp]=t,!1!==n.transformsEnabled&&(!(o={})===n.cssTransitions?o[n.animType]="translate("+e+", "+i+")":o[n.animType]="translate3d("+e+", "+i+", 0px)"),n.$slideTrack.css(o)},s.prototype.setDimensions=function(){var t=this,e=(!1===t.options.vertical?!0===t.options.centerMode&&t.$list.css({padding:"0px "+t.options.centerPadding}):(t.$list.height(t.$slides.first().outerHeight(!0)*t.options.slidesToShow),!0===t.options.centerMode&&t.$list.css({padding:t.options.centerPadding+" 0px"})),t.listWidth=t.$list.width(),t.listHeight=t.$list.height(),!1===t.options.vertical&&!1===t.options.variableWidth?(t.slideWidth=Math.ceil(t.listWidth/t.options.slidesToShow),t.$slideTrack.width(Math.ceil(t.slideWidth*t.$slideTrack.children(".slick-slide").length))):!0===t.options.variableWidth?t.$slideTrack.width(5e3*t.slideCount):(t.slideWidth=Math.ceil(t.listWidth),t.$slideTrack.height(Math.ceil(t.$slides.first().outerHeight(!0)*t.$slideTrack.children(".slick-slide").length))),t.$slides.first().outerWidth(!0)-t.$slides.first().width());!1===t.options.variableWidth&&t.$slideTrack.children(".slick-slide").width(t.slideWidth-e)},s.prototype.setFade=function(){var i,n=this;n.$slides.each(function(t,e){i=n.slideWidth*t*-1,!0===n.options.rtl?c(e).css({position:"relative",right:i,top:0,zIndex:n.options.zIndex-2,opacity:0}):c(e).css({position:"relative",left:i,top:0,zIndex:n.options.zIndex-2,opacity:0})}),n.$slides.eq(n.currentSlide).css({zIndex:n.options.zIndex-1,opacity:1})},s.prototype.setHeight=function(){var t;1===this.options.slidesToShow&&!0===this.options.adaptiveHeight&&!1===this.options.vertical&&(t=this.$slides.eq(this.currentSlide).outerHeight(!0),this.$list.css("height",t))},s.prototype.setOption=s.prototype.slickSetOption=function(){var t,e,i,n,o,s=this,r=!1;if("object"===c.type(arguments[0])?(i=arguments[0],r=arguments[1],o="multiple"):"string"===c.type(arguments[0])&&(i=arguments[0],n=arguments[1],r=arguments[2],"responsive"===arguments[0]&&"array"===c.type(arguments[1])?o="responsive":void 0!==arguments[1]&&(o="single")),"single"===o)s.options[i]=n;else if("multiple"===o)c.each(i,function(t,e){s.options[t]=e});else if("responsive"===o)for(e in n)if("array"!==c.type(s.options.responsive))s.options.responsive=[n[e]];else{for(t=s.options.responsive.length-1;0<=t;)s.options.responsive[t].breakpoint===n[e].breakpoint&&s.options.responsive.splice(t,1),t--;s.options.responsive.push(n[e])}r&&(s.unload(),s.reinit())},s.prototype.setPosition=function(){this.setDimensions(),this.setHeight(),!1===this.options.fade?this.setCSS(this.getLeft(this.currentSlide)):this.setFade(),this.$slider.trigger("setPosition",[this])},s.prototype.setProps=function(){var t=this,e=document.body.style;t.positionProp=!0===t.options.vertical?"top":"left","top"===t.positionProp?t.$slider.addClass("slick-vertical"):t.$slider.removeClass("slick-vertical"),void 0===e.WebkitTransition&&void 0===e.MozTransition&&void 0===e.msTransition||!0===t.options.useCSS&&(t.cssTransitions=!0),t.options.fade&&("number"==typeof t.options.zIndex?t.options.zIndex<3&&(t.options.zIndex=3):t.options.zIndex=t.defaults.zIndex),void 0!==e.OTransform&&(t.animType="OTransform",t.transformType="-o-transform",t.transitionType="OTransition",void 0===e.perspectiveProperty)&&void 0===e.webkitPerspective&&(t.animType=!1),void 0!==e.MozTransform&&(t.animType="MozTransform",t.transformType="-moz-transform",t.transitionType="MozTransition",void 0===e.perspectiveProperty)&&void 0===e.MozPerspective&&(t.animType=!1),void 0!==e.webkitTransform&&(t.animType="webkitTransform",t.transformType="-webkit-transform",t.transitionType="webkitTransition",void 0===e.perspectiveProperty)&&void 0===e.webkitPerspective&&(t.animType=!1),void 0!==e.msTransform&&(t.animType="msTransform",t.transformType="-ms-transform",t.transitionType="msTransition",void 0===e.msTransform)&&(t.animType=!1),void 0!==e.transform&&!1!==t.animType&&(t.animType="transform",t.transformType="transform",t.transitionType="transition"),t.transformsEnabled=t.options.useTransform&&null!==t.animType&&!1!==t.animType},s.prototype.setSlideClasses=function(t){var e,i,n,o=this,s=o.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden","true");o.$slides.eq(t).addClass("slick-current"),!0===o.options.centerMode?(i=o.options.slidesToShow%2==0?1:0,n=Math.floor(o.options.slidesToShow/2),!0===o.options.infinite&&((n<=t&&t<=o.slideCount-1-n?o.$slides.slice(t-n+i,t+n+1):(e=o.options.slidesToShow+t,s.slice(e-n+1+i,e+n+2))).addClass("slick-active").attr("aria-hidden","false"),0===t?s.eq(s.length-1-o.options.slidesToShow).addClass("slick-center"):t===o.slideCount-1&&s.eq(o.options.slidesToShow).addClass("slick-center")),o.$slides.eq(t).addClass("slick-center")):(0<=t&&t<=o.slideCount-o.options.slidesToShow?o.$slides.slice(t,t+o.options.slidesToShow):s.length<=o.options.slidesToShow?s:(i=o.slideCount%o.options.slidesToShow,e=!0===o.options.infinite?o.options.slidesToShow+t:t,o.options.slidesToShow==o.options.slidesToScroll&&o.slideCount-t<o.options.slidesToShow?s.slice(e-(o.options.slidesToShow-i),e+i):s.slice(e,e+o.options.slidesToShow))).addClass("slick-active").attr("aria-hidden","false"),"ondemand"!==o.options.lazyLoad&&"anticipated"!==o.options.lazyLoad||o.lazyLoad()},s.prototype.setupInfinite=function(){var t,e,i,n=this;if(!0===n.options.fade&&(n.options.centerMode=!1),!0===n.options.infinite&&!1===n.options.fade&&(e=null,n.slideCount>n.options.slidesToShow)){for(i=!0===n.options.centerMode?n.options.slidesToShow+1:n.options.slidesToShow,t=n.slideCount;t>n.slideCount-i;--t)c(n.$slides[e=t-1]).clone(!0).attr("id","").attr("data-slick-index",e-n.slideCount).prependTo(n.$slideTrack).addClass("slick-cloned");for(t=0;t<i+n.slideCount;t+=1)e=t,c(n.$slides[e]).clone(!0).attr("id","").attr("data-slick-index",e+n.slideCount).appendTo(n.$slideTrack).addClass("slick-cloned");n.$slideTrack.find(".slick-cloned").find("[id]").each(function(){c(this).attr("id","")})}},s.prototype.interrupt=function(t){t||this.autoPlay(),this.interrupted=t},s.prototype.selectHandler=function(t){t=c(t.target).is(".slick-slide")?c(t.target):c(t.target).parents(".slick-slide"),t=(t=parseInt(t.attr("data-slick-index")))||0;this.slideCount<=this.options.slidesToShow?this.slideHandler(t,!1,!0):this.slideHandler(t)},s.prototype.slideHandler=function(t,e,i){var n,o,s,r=this;e=e||!1,!0===r.animating&&!0===r.options.waitForAnimate||!0===r.options.fade&&r.currentSlide===t||(!1===e&&r.asNavFor(t),n=t,e=r.getLeft(n),s=r.getLeft(r.currentSlide),r.currentLeft=null===r.swipeLeft?s:r.swipeLeft,!1===r.options.infinite&&!1===r.options.centerMode&&(t<0||t>r.getDotCount()*r.options.slidesToScroll)||!1===r.options.infinite&&!0===r.options.centerMode&&(t<0||t>r.slideCount-r.options.slidesToScroll)?!1===r.options.fade&&(n=r.currentSlide,!0!==i?r.animateSlide(s,function(){r.postSlide(n)}):r.postSlide(n)):(r.options.autoplay&&clearInterval(r.autoPlayTimer),o=n<0?r.slideCount%r.options.slidesToScroll!=0?r.slideCount-r.slideCount%r.options.slidesToScroll:r.slideCount+n:n>=r.slideCount?r.slideCount%r.options.slidesToScroll!=0?0:n-r.slideCount:n,r.animating=!0,r.$slider.trigger("beforeChange",[r,r.currentSlide,o]),t=r.currentSlide,r.currentSlide=o,r.setSlideClasses(r.currentSlide),r.options.asNavFor&&(s=(s=r.getNavTarget()).slick("getSlick")).slideCount<=s.options.slidesToShow&&s.setSlideClasses(r.currentSlide),r.updateDots(),r.updateArrows(),!0===r.options.fade?(!0!==i?(r.fadeSlideOut(t),r.fadeSlide(o,function(){r.postSlide(o)})):r.postSlide(o),r.animateHeight()):!0!==i?r.animateSlide(e,function(){r.postSlide(o)}):r.postSlide(o)))},s.prototype.startLoad=function(){var t=this;!0===t.options.arrows&&t.slideCount>t.options.slidesToShow&&(t.$prevArrow.hide(),t.$nextArrow.hide()),!0===t.options.dots&&t.slideCount>t.options.slidesToShow&&t.$dots.hide(),t.$slider.addClass("slick-loading")},s.prototype.swipeDirection=function(){var t=this.touchObject.startX-this.touchObject.curX,e=this.touchObject.startY-this.touchObject.curY,e=Math.atan2(e,t);return(t=(t=Math.round(180*e/Math.PI))<0?360-Math.abs(t):t)<=45&&0<=t||t<=360&&315<=t?!1===this.options.rtl?"left":"right":135<=t&&t<=225?!1===this.options.rtl?"right":"left":!0===this.options.verticalSwiping?35<=t&&t<=135?"down":"up":"vertical"},s.prototype.swipeEnd=function(t){var e,i,n=this;if(n.dragging=!1,n.swiping=!1,n.scrolling)return n.scrolling=!1;if(n.interrupted=!1,n.shouldClick=!(10<n.touchObject.swipeLength),void 0===n.touchObject.curX)return!1;if(!0===n.touchObject.edgeHit&&n.$slider.trigger("edge",[n,n.swipeDirection()]),n.touchObject.swipeLength>=n.touchObject.minSwipe){switch(i=n.swipeDirection()){case"left":case"down":e=n.options.swipeToSlide?n.checkNavigable(n.currentSlide+n.getSlideCount()):n.currentSlide+n.getSlideCount(),n.currentDirection=0;break;case"right":case"up":e=n.options.swipeToSlide?n.checkNavigable(n.currentSlide-n.getSlideCount()):n.currentSlide-n.getSlideCount(),n.currentDirection=1}"vertical"!=i&&(n.slideHandler(e),n.touchObject={},n.$slider.trigger("swipe",[n,i]))}else n.touchObject.startX!==n.touchObject.curX&&(n.slideHandler(n.currentSlide),n.touchObject={})},s.prototype.swipeHandler=function(t){var e=this;if(!(!1===e.options.swipe||"ontouchend"in document&&!1===e.options.swipe||!1===e.options.draggable&&-1!==t.type.indexOf("mouse")))switch(e.touchObject.fingerCount=t.originalEvent&&void 0!==t.originalEvent.touches?t.originalEvent.touches.length:1,e.touchObject.minSwipe=e.listWidth/e.options.touchThreshold,!0===e.options.verticalSwiping&&(e.touchObject.minSwipe=e.listHeight/e.options.touchThreshold),t.data.action){case"start":e.swipeStart(t);break;case"move":e.swipeMove(t);break;case"end":e.swipeEnd(t)}},s.prototype.swipeMove=function(t){var e,i,n=this,o=void 0!==t.originalEvent?t.originalEvent.touches:null;return!(!n.dragging||n.scrolling||o&&1!==o.length)&&(e=n.getLeft(n.currentSlide),n.touchObject.curX=void 0!==o?o[0].pageX:t.clientX,n.touchObject.curY=void 0!==o?o[0].pageY:t.clientY,n.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(n.touchObject.curX-n.touchObject.startX,2))),o=Math.round(Math.sqrt(Math.pow(n.touchObject.curY-n.touchObject.startY,2))),!n.options.verticalSwiping&&!n.swiping&&4<o?!(n.scrolling=!0):(!0===n.options.verticalSwiping&&(n.touchObject.swipeLength=o),o=n.swipeDirection(),void 0!==t.originalEvent&&4<n.touchObject.swipeLength&&(n.swiping=!0,t.preventDefault()),t=(!1===n.options.rtl?1:-1)*(n.touchObject.curX>n.touchObject.startX?1:-1),!0===n.options.verticalSwiping&&(t=n.touchObject.curY>n.touchObject.startY?1:-1),i=n.touchObject.swipeLength,(n.touchObject.edgeHit=!1)===n.options.infinite&&(0===n.currentSlide&&"right"===o||n.currentSlide>=n.getDotCount()&&"left"===o)&&(i=n.touchObject.swipeLength*n.options.edgeFriction,n.touchObject.edgeHit=!0),!1===n.options.vertical?n.swipeLeft=e+i*t:n.swipeLeft=e+i*(n.$list.height()/n.listWidth)*t,!0===n.options.verticalSwiping&&(n.swipeLeft=e+i*t),!0!==n.options.fade&&!1!==n.options.touchMove&&(!0===n.animating?(n.swipeLeft=null,!1):void n.setCSS(n.swipeLeft))))},s.prototype.swipeStart=function(t){var e,i=this;if(i.interrupted=!0,1!==i.touchObject.fingerCount||i.slideCount<=i.options.slidesToShow)return!(i.touchObject={});void 0!==t.originalEvent&&void 0!==t.originalEvent.touches&&(e=t.originalEvent.touches[0]),i.touchObject.startX=i.touchObject.curX=void 0!==e?e.pageX:t.clientX,i.touchObject.startY=i.touchObject.curY=void 0!==e?e.pageY:t.clientY,i.dragging=!0},s.prototype.unfilterSlides=s.prototype.slickUnfilter=function(){null!==this.$slidesCache&&(this.unload(),this.$slideTrack.children(this.options.slide).detach(),this.$slidesCache.appendTo(this.$slideTrack),this.reinit())},s.prototype.unload=function(){var t=this;c(".slick-cloned",t.$slider).remove(),t.$dots&&t.$dots.remove(),t.$prevArrow&&t.htmlExpr.test(t.options.prevArrow)&&t.$prevArrow.remove(),t.$nextArrow&&t.htmlExpr.test(t.options.nextArrow)&&t.$nextArrow.remove(),t.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden","true").css("width","")},s.prototype.unslick=function(t){this.$slider.trigger("unslick",[this,t]),this.destroy()},s.prototype.updateArrows=function(){var t=this;Math.floor(t.options.slidesToShow/2),!0===t.options.arrows&&t.slideCount>t.options.slidesToShow&&!t.options.infinite&&(t.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false"),t.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false"),0===t.currentSlide?(t.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true"),t.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false")):(t.currentSlide>=t.slideCount-t.options.slidesToShow&&!1===t.options.centerMode||t.currentSlide>=t.slideCount-1&&!0===t.options.centerMode)&&(t.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),t.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")))},s.prototype.updateDots=function(){null!==this.$dots&&(this.$dots.find("li").removeClass("slick-active").end(),this.$dots.find("li").eq(Math.floor(this.currentSlide/this.options.slidesToScroll)).addClass("slick-active"))},s.prototype.visibility=function(){this.options.autoplay&&(document[this.hidden]?this.interrupted=!0:this.interrupted=!1)},c.fn.slick=function(){for(var t,e=arguments[0],i=Array.prototype.slice.call(arguments,1),n=this.length,o=0;o<n;o++)if("object"==typeof e||void 0===e?this[o].slick=new s(this[o],e):t=this[o].slick[e].apply(this[o].slick,i),void 0!==t)return t;return this}});var isOldIE=$("html").is(".lt-ie9"),Portal={MenuOpened:!1,MobileVerifier:{IsMobile:!1,IsTablet:!1,IsDesktop:!1,DetectMobile:function(t){var e={detectMobileBrowsers:{fullPattern:/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,shortPattern:/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i}};return e.detectMobileBrowsers.fullPattern.test(t)||e.detectMobileBrowsers.shortPattern.test(t.substr(0,4))},DetectTablet:function(t){var e={detectMobileBrowsers:{tabletPattern:/android|ipad|playbook|silk/i}};return e.detectMobileBrowsers.tabletPattern.test(t)},Detect:function(){Portal.MobileVerifier.DetectMobile(navigator.userAgent)&&(Portal.MobileVerifier.IsMobile=!0),Portal.MobileVerifier.DetectTablet(navigator.userAgent)&&(Portal.MobileVerifier.IsTablet=!0),990<$(window).innerWidth()&&(Portal.MobileVerifier.IsDesktop=!0)}},Init:function(){Portal.MobileVerifier.Detect(),!Portal.MobileVerifier.IsDesktop||Portal.MobileVerifier.IsMobile||Portal.MobileVerifier.IsTablet||$(".showTooltip").each(function(){var t=$(this).data(),e=void 0!==t.container?t.container:"body",t=void 0!==t.placement?t.placement:"top";$(this).tooltip({container:e,placement:t})}),$(".mainNav .menu").on("click",function(t){t.preventDefault();var t=$(this),e=t.data("rel");(e=$(e,".mainNav")).is(":visible")?(t.removeClass("opened"),e.slideUp("fast",function(){Portal.MenuOpened=!1})):(t.addClass("opened"),e.slideDown("fast",function(){Portal.MenuOpened=!0}))}),$(".scielo__menu").on("click",function(t){var e=document.querySelector(".scielo-ico-menu"),i=document.querySelector(".scielo-ico-menu-opened"),n=document.querySelector(".scielo__mainMenu");this.classList.contains("opened")?(this.classList.remove("opened"),e.style.display="inline-block",i.style.display="none",n.animate([{top:"0px"},{top:"-1000px"}],{duration:600,iterations:1}),n.style.top="-1000px",Portal.MenuOpened=!1):(this.classList.add("opened"),e.style.display="none",i.style.display="inline-block",n.animate([{top:"-500px"},{top:"0px"}],{duration:100,iterations:1}),n.style.top="0px",Portal.MenuOpened=!0)}),$(".scielo-slider").slick({focusOnChange:!1,slidesToShow:4,infinite:!1,centerPadding:"0",arrows:!0,dots:!0,slidesToScroll:4,responsive:[{breakpoint:767,settings:{dots:!0,slidesToShow:1,slidesToScroll:1,centerMode:!1,arrows:!1,focusOnChange:!1}},{breakpoint:992,settings:{dots:!0,slidesToShow:2,slidesToScroll:2,centerMode:!1,arrows:!1,focusOnChange:!1}}]}),$(".scielo-slider").each(function(){$(this).data("autoheight")&&Portal.AdjustCardHeight($(this))}),$(".shareFacebook,.shareTwitter,.shareDelicious,.shareGooglePlus,.shareLinkedIn,.shareReddit,.shareStambleUpon,.shareCiteULike,.shareMendeley").on("click",function(t){t.preventDefault();var t=escape(this.href),e="https://www.facebook.com/sharer/sharer.php?u=",i="https://twitter.com/intent/tweet?text=",n="https://delicious.com/save?url=",o="https://plus.google.com/share?url=",s="http://www.linkedin.com/shareArticle?mini=true&url=",r="http://www.reddit.com/submit?url=",a="http://www.stumbleupon.com/submit?url=",l="http://www.citeulike.org/posturl?url=",c="http://www.mendeley.com/import/?url=",d="";$(this).is(".shareFacebook")?d=e+t:$(this).is(".shareTwitter")?d=i+t:$(this).is(".shareDelicious")?d=n+t:$(this).is(".shareGooglePlus")?d=o+t:$(this).is(".shareLinkedIn")?d=s+t:$(this).is(".shareReddit")?d=r+t:$(this).is(".shareStambleUpon")?d=a+t:$(this).is(".shareCiteULike")?d=l+t:$(this).is(".shareMendeley")&&(d=c+t),window.open(d,"share")}),$(".slider").each(Portal.Slider),$(".share_modal_id").on("click",function(t){t.preventDefault();t=$(location).attr("href");$.get("/form_mail/",{url:t},function(t){$("#share_modal_id").html(t),$("#share_modal_id").modal("show")})}),$(".contact_modal_id").on("click",function(t){t.preventDefault();$(location).attr("href");$.get($(this).data("url"),function(t){$("#contact_modal_id").html(t),$("#contact_modal_id").modal("show")})}),$(".floatingBtnError, .floatingBtnErrorHamburguerMenu").on("click",function(t){t.preventDefault();t=$(location).attr("href");$.get("/error_mail/",{url:t},function(t){$("#error_modal_id").html(t),$("#error_modal_id").modal("show")})}),$("#share_modal_id").on("hidden.bs.modal",function(){$(this).empty()}),$("#error_modal_id").on("hidden.bs.modal",function(){$(this).empty()}),$(".alternativeHeader").each(function(){var t=$(".mainMenu nav ul").html();$(this).find("nav ul").html(t)});for(var e=$("header").outerHeight(),t=($(window).on("scroll",function(){var t=0<window.scrollY?window.scrollY:0<window.pageYOffset?window.pageYOffset:document.documentElement.scrollTop;e<t?$(".alternativeHeader").stop(!0,!1).animate({top:"0"},200,function(){$("#mainMenu").is(":visible")&&$(".menu:eq(0)").trigger("click")}):$(".alternativeHeader").stop(!0,!1).animate({top:"-65px"},200,function(){$(this).find(".mainMenu").is(":visible")&&$(this).find(".menu").trigger("click")})}).on("keydown",function(t){27==t.keyCode&&$("a.scielo__menu").is(".opened")&&$("a.scielo__menu").trigger("click")}),$(".expandCollapseContent").on("click",function(t){t.preventDefault();var e=$("#issueIndex"),i=$("#issueData"),n=this;e.css("float","right"),i.is(":visible")?i.fadeOut("fast",function(){e.animate({width:"100%"},300),$(n).find(".glyphBtn").removeClass("opened").addClass("closed")}):e.animate({width:"75%"},300,function(){i.fadeIn("fast"),$(n).find(".glyphBtn").removeClass("closed").addClass("opened")}),$(n).tooltip("hide")}),$(".collapse-title").on("click",function(){var t=$(this),e=$(".collapse-content");e.is(":visible")?(e.slideUp("fast"),t.addClass("closed")):(e.slideDown("fast"),t.removeClass("closed"))}),$(".goto").on("click",function(t){t.preventDefault();t=(t=$(this).attr("href")).replace("#",""),t=$("a[name="+t+"]").offset();$("html,body").animate({scrollTop:t.top-60},500)}),$(".trigger").on("click",function(t){t.preventDefault();t=$(this).data("rel");$(t).click()}),$("input[name='link-share']").focus(function(){$(this).select(),window.clipboardData&&clipboardData.setData&&clipboardData.setData("text",$(this).text())}).mouseup(function(t){t.preventDefault()}),$(".levelMenu .dropdown-container").on("mouseenter mouseleave",function(t){var e=$(this).find(".dropdown-menu"),i=$(this).find(".dropdown-toggle");"mouseenter"==t.type?(e.show(),i.addClass("hover")):(e.hide(),i.removeClass("hover"))}),$(".nav-tabs a").click(function(t){t.preventDefault(),$(this).tab("show")}),$(".translateAction").on("click",function(t){t.preventDefault(),$("#translateArticleModal").modal("show")}),"undefined"!=typeof Clipboard&&new Clipboard(".copyLink").on("success",function(t){var e=$(t.trigger);e.addClass("copyFeedback"),setTimeout(function(){e.removeClass("copyFeedback")},2e3)}).on("error",function(t){console.error("Action:",t.action),console.error("Trigger:",t.trigger)}),$(".results .item")),i=0;i<t.length;i++){var n='<br class="visible-xs visible-sm"/><span class="socialLinks articleShareLink">\t\t\t\t\t<a href="" class="articleAction sendViaMail" data-toggle="tooltip" data-placement="top" title="Enviar link por e-mail">Enviar por e-mail</a>\t\t\t\t\t<a target="_blank" href="https://www.facebook.com/sharer/sharer.php?u='+(n=$(t[i]).parent()[0].children[i].children[1].children[0].children[0].href)+'" class="articleAction shareFacebook" data-toggle="tooltip" data-placement="top" title="Compartilhar no Facebook">Facebook</a>\t\t\t\t\t<a target="_blank" href="https://twitter.com/intent/tweet?text='+n+'" class="articleAction shareTwitter" data-toggle="tooltip" data-placement="top" title="Compartilhar no Twitter">Twitter</a>\t\t\t\t\t<a target="_blank" href="https://delicious.com/save?url='+n+'" class="articleAction shareDelicious" data-toggle="tooltip" data-placement="top" title="Compartilhar no Delicious">Delicious</a>\t\t\t\t\t<a href="" class="showTooltip dropdown-toggle" data-toggle="dropdown" data-placement="top" data-placement="top" title="Compartilhar em outras redes"><span class="glyphBtn otherNetworks"></span></a>\t\t\t\t\t<ul class="dropdown-menu articleShare">\t\t\t\t\t\t<li class="dropdown-header">Outras redes sociais</li>\t\t\t\t\t\t<li><a target="_blank" href="https://plus.google.com/share?url='+n+'" class="shareGooglePlus"><span class="glyphBtn googlePlus"></span> Google+</a></li>\t\t\t\t\t\t<li><a target="_blank" href="https://www.linkedin.com/shareArticle?mini=true&url='+n+'" class="shareLinkedIn"><span class="glyphBtn linkedIn"></span> LinkedIn</a></li>\t\t\t\t\t\t<li><a target="_blank" href="https://www.reddit.com/login?dest='+n+'" class="shareReddit"><span class="glyphBtn reddit"></span> Reddit</a></li>\t\t\t\t\t\t<li><a target="_blank" href="http://www.stumbleupon.com/submit?url='+n+'" class="shareStambleUpon"><span class="glyphBtn stambleUpon"></span> StambleUpon</a></li>\t\t\t\t\t\t<li><a target="_blank" href="http://www.citeulike.org/posturl?url='+n+'" class="shareCiteULike"><span class="glyphBtn citeULike"></span> CiteULike</a></li>\t\t\t\t\t\t<li><a target="_blank" href="https://www.mendeley.com/import/?url='+n+'" class="shareMendeley"><span class="glyphBtn mendeley"></span> Mendeley</a></li>\t\t\t\t\t</ul>\t\t\t\t</span>';$(".results .item:nth-child("+(i+1)+") div .line.articleResult").append(n)}$("#contactModal").on("show.bs.modal",function(t){t=$(t.relatedTarget).data("modal-title");$(this).find(".modal-title").text(t)}),$("#tst").length&&$("#tst").typeahead({order:"asc",minLength:3,dynamic:!0,delay:500,emptyTemplate:'Nenhum periódico encontrado para o termo: "{{query}}"',source:{journals:{display:"title",href:"{{link}}",ajax:function(t){return{type:"GET",url:"/journals/search/alpha/ajax/",contentType:"application/json",data:{query:"{{query}}",page:"1",query_filter:"current"},callback:{done:function(t){for(var e=[],i=0,n=t.journals.length;i<n;i++)e.push({title:t.journals[i].title,link:t.journals[i].links.detail});return console.log(e),e}}}}}}})},AdjustCardHeight(t){t=t.find(".card");let i=0;t.each(function(){var t=$(this).outerHeight(),e=parseFloat($(this).css("padding-bottom"));t>i&&(i=t-e)}),t.height(i)},Slider:function(){var t=$(this).attr("id"),t=$("#"+t),e=$(".slide-item",t),i=$(".slide-wrapper",t),n=$(".slide-back",t),o=$(".slide-next",t),s=$(".slide-container",t).outerWidth();warray=[],harray=[],e.each(function(){harray.push($(this).outerHeight()),warray.push($(this).outerWidth())}),itemProps={w:Math.max.apply(null,warray),h:Math.max.apply(null,harray)},wrapperWidth=e.length*itemProps.w+100,i.width(wrapperWidth),$(".slide-container",t).height(itemProps.h),n.css("top",itemProps.h/2+"px"),o.css("top",itemProps.h/2+"px"),n.hide(),i.width()<=t.width()?o.hide():o.show(),n.off().on("click",function(t){t.preventDefault();"auto"!=i.css("left")&&parseInt(i.css("left"));i.stop(!1,!0).animate({left:"+="+itemProps.w},100,function(){0==("auto"==i.css("left")?0:parseInt(i.css("left")))&&n.hide()}),o.show()}),o.off().on("click",function(t){t.preventDefault();"auto"!=i.css("left")&&parseInt(i.css("left"));i.stop(!1,!0).animate({left:"-="+itemProps.w},100,function(){("auto"==i.css("left")?0:parseInt(i.css("left")))<=-(wrapperWidth-s)&&o.hide()}),n.show()})}},SearchForm={SearchHistory:"",Init:function(){var p=".searchForm";$("input.trigger").off("click").on("click",function(){var cmd=$(this).data("rel");eval(cmd)}),$(p).on("submit",function(t){t.preventDefault();for(var e,i,n=$("*[name='q[]']",p),o=$("select[name='bool[]']",p),s=$("select[name='index[]']",p),r="",a=0,l=n.length;a<l;a++)""!=(e="iptQuery"==$(n[a]).attr("id")?$(n[a]).text():$(n[a]).val())&&(i=$("option:selected",s[a]).val(),1<=a&&(r+=" "+$("option:selected",o[a-1]).val()+" "),r+=""!=i?"("+i+":("+e+"))":2==l?e:"("+e+")");var t=$("input[name='collection']:checked",p).val(),t=(void 0!==t&&""!=t&&0==$("input[name='filter[in][]']").length&&(initial_filter_in=$("<input>").attr({type:"hidden",name:"filter[in][]",value:t}).appendTo("#searchForm")),$("input[name='publicationYear']:checked",p).val()),c=("1"==t?""!=(c=$("select[name='y1Start'] option:selected",p).val())&&(r+=" AND publication_year:["+c+" TO *]"):"2"==t&&(c=$("select[name='y2Start'] option:selected",p).val(),t=$("select[name='y2End'] option:selected",p).val(),""!=c)&&""!=t&&(r+=" AND publication_year:["+c+" TO "+t+"]"),""==(r=r.replace(/^AND|AND$|^OR|OR$/g,""))&&(r="*"),r=$.trim(r),document.searchForm.action,document.searchForm);return $("input[name='q']").val(r),c.submit(),!0}),$("textarea.form-control",p).on("keyup",SearchForm.TextareaAutoHeight).trigger("keyup").on("keypress",function(t){var e=$(this);""!=this.value?e.next().fadeIn("fast"):e.next().fadeOut("fast"),13!=t.which||t.shiftKey||$(p).submit()}),$("a.clearIptText",p).on("click",SearchForm.ClearPrevInput),$(".newSearchField",p).on("click",function(t){t.preventDefault(),SearchForm.InsertNewFieldRow(this,"#searchRow-matriz .searchRow",".searchForm .searchRow-container")}),$(".articleAction, .searchHistoryItem, .colActions .searchHistoryIcon",p).tooltip()},InsertSearchHistoryItem:function(t){var e=$(t).data("item"),i=$(t).parent().parent().find(".colSearch").text(),n=$("#iptQuery");n.append(' <div class="searchHistoryItem" contenteditable="false" data-toggle="tooltip" data-placement="top" title="'+i+'">#'+e+"</div> AND ").focus(),n.find(".searchHistoryItem").tooltip(),$(t).effect("transfer",{to:n.find(".searchHistoryItem:last-child")},1e3),SearchForm.PlaceCaretToEnd(document.getElementById("iptQuery"))},InsertNewFieldRow:function(t,e,i){t=$(t),e=$(e).clone(),i=$(i);var n=t.data("count");e.attr("id","searchRow-"+n),e.find(".eraseSearchField").data("rel",n),e.find(".eraseSearchField").on("click",function(t){t.preventDefault(),SearchForm.EraseFieldRow(this)}),""!=SearchForm.SearchHistory&&e.find("input[name='q[]']").on("focus",function(){SearchForm.SearchHistoryFocusIn(this)}).on("blur",function(){SearchForm.SearchHistoryFocusOut(this)}),e.appendTo(i).slideDown("fast"),e.find("textarea.form-control:visible").on("keyup",SearchForm.TextareaAutoHeight).trigger("keyup"),e.find("a.clearIptText").on("click",SearchForm.ClearPrevInput),e.find(".showTooltip").tooltip({container:"body"}),n=parseInt(n),t.data("count",++n)},TextareaAutoHeight:function(){""!=this.value?$(this).next("a").fadeIn("fast"):$(this).next("a").fadeOut("fast")},ClearPrevInput:function(){$(this).prev("input,textarea").val("").trigger("keyup")},EraseFieldRow:function(t){t=(t=$(t)).data("rel");$("#searchRow-"+t).slideUp("fast",function(){$(this).remove()})},CountCheckedResults:function(t,e){t=$(t);e=parseInt(t.data("preselected"))+parseInt($(e+":checked").length);t.text(e),0<e?t.addClass("highlighted"):t.removeClass("highlighted")},PlaceCaretToEnd:function(t){var e,i;t.focus(),void 0!==window.getSelection&&void 0!==document.createRange?((e=document.createRange()).selectNodeContents(t),e.collapse(!1),(i=window.getSelection()).removeAllRanges(),i.addRange(e)):void 0!==document.body.createTextRange&&((i=document.body.createTextRange()).moveToElementText(t),i.collapse(!1),i.select())},SubmitForm:function(t){var e=$(".searchForm").attr("action");$(".searchForm").attr("action",e+"?filter="+t).submit()}},Collection={Init:function(){var t=$(".collectionListStart .table-journal-list tbody tr"),s=$(".collectionListStart .table-journal-list tr td"),e=$(".collectionListStart .collectionSearch");$("#alpha .collectionListTotalInfo").text("(total "+t.length+")"),e.on("keyup",function(t){for(var e=t.target.value.toUpperCase(),i=0;i<s.length;i++){var n=s[i],o=n.textContent||n.innerText;o&&-1<o.toUpperCase().indexOf(e)?n.parentElement.style.display="":n.parentElement.style.display="none"}})},JournalListFinder:function(param,loading,container,labels,empty,scroll,callback,htmlFill){var currentPage=$(".collectionCurrentPage",container),totalPages=$(".collectionTotalPages",container),totalInfo=$(".collectionListTotalInfo",container),action=$(container).data("action");void 0!==htmlFill&&(loading=htmlFill.next(".collectionListLoading")),void 0===empty&&(empty=!1),param+="&page="+currentPage.val(),$.ajax({url:action,type:"POST",data:param,dataType:"json",beforeSend:function(){loading.show()}}).done(function(data){var ctt,ctt,ctt,ctt;loading.hide(),void 0!==data.journalList&&(-1==param.indexOf("&theme=")&&-1==param.indexOf("&publisher=")&&(totalInfo.html(labels[11].replace("{total}",data.total)),totalPages.val(data.totalPages)),ctt=Collection.JournalListFill(data,labels),(void 0!==htmlFill?(empty&&$(htmlFill).find("tbody").empty(),$(htmlFill)):(empty&&$(container).find("tbody").empty(),$(container))).find("tbody").append(ctt).find(".showTooltip").tooltip({container:"body"}),scroll)&&Collection.ScrollEvents(container,loading,labels),void 0!==data.themeList&&(totalInfo.html(labels[11].replace("{total}",data.total).replace("{totalTheme}",data.totalThemes)),ctt=Collection.ThemeListFill(data,labels,container.attr("id")),(void 0!==htmlFill?(empty&&$(htmlFill).find("tbody").empty(),$(htmlFill)):(empty&&$(container).find("tbody").empty(),$(container))).find("tbody").append(ctt).find(".showTooltip").tooltip({container:"body"}),Collection.CollapseEvents(container,labels)),void 0!==data.publisherList&&(totalInfo.html(labels[11].replace("{total}",data.total).replace("{totalPublisher}",data.totalPublisher)),ctt=Collection.PublisherListFill(data,labels,container.attr("id")),(void 0!==htmlFill?(empty&&$(htmlFill).find("tbody").empty(),$(htmlFill)):(empty&&$(container).find("tbody").empty(),$(container))).find("tbody").append(ctt).find(".showTooltip").tooltip({container:"body"}),Collection.CollapseEvents(container,labels)),void 0!==data.collectionList&&(totalInfo.html(labels[11].replace("{total}",data.total).replace("{totalCollection}",data.totalCollection)),ctt=Collection.CollectionListFill(data,labels,container.attr("id")),(void 0!==htmlFill?(empty&&$(htmlFill).find("tbody").empty(),$(htmlFill)):(empty&&$(container).find("tbody").empty(),$(container))).find("tbody").append(ctt).find(".showTooltip").tooltip({container:"body"})),void 0!==callback&&eval(callback)}).error(function(t){loading.hide(),console.warn("Error #001: Error found on loading journal list")})},JournalListFill:function(t,e){for(var i="",n=0,o=t.journalList.length;n<o;n++){var s=t.journalList[n];s.Last=s.Last.split(";"),s.Publisher=s.Publisher.split(";"),i+='\t\t\t\t\t\t<tr>\t\t\t\t\t\t\t<td class="actions">\t\t\t\t\t\t\t\t<a href="'+s.Links[0]+'" class="showTooltip" title="'+e[5]+'"><span class="glyphBtn home"></span></a> \t\t\t\t\t\t\t\t<a href="'+s.Links[1]+'" class="showTooltip" title="'+e[6]+'"><span class="glyphBtn submission"></span></a> \t\t\t\t\t\t\t\t<a href="'+s.Links[2]+'" class="showTooltip" title="'+e[7]+'"><span class="glyphBtn authorInstructions"></span></a> \t\t\t\t\t\t\t\t<a href="'+s.Links[5]+'" class="showTooltip" title="'+e[12]+'"><span class="glyphBtn editorial"></span></a> \t\t\t\t\t\t\t\t<a href="'+s.Links[3]+'" class="showTooltip" title="'+e[8]+'"><span class="glyphBtn about"></span></a> \t\t\t\t\t\t\t\t<a href="'+s.Links[4]+'" class="showTooltip" title="'+e[9]+'"><span class="glyphBtn contact"></span></a> \t\t\t\t\t\t\t</td>\t\t\t\t\t\t\t<td>\t\t\t\t\t\t\t\t<a href="'+s.Links[0]+'" class="collectionLink '+(0==s.Active?"disabled":"")+'">\t\t\t\t\t\t\t\t\t<strong class="journalTitle">'+s.Journal+'</strong>,\t\t\t\t\t\t\t\t\t<strong class="journalIssues">'+s.Issues+" "+e[0]+"</strong>,\t\t\t\t\t\t\t\t\t"+e[1]+"\t\t\t\t\t\t\t\t\t"+(""!=s.Last[0]?'<span class="journalLastVolume"><em>'+e[2]+"</em> "+s.Last[0]+"</span>":"")+"\t\t\t\t\t\t\t\t\t"+(""!=s.Last[1]?'<span class="journalLastNumber"><em>'+e[3]+"</em> "+s.Last[1]+"</span>":"")+"\t\t\t\t\t\t\t\t\t"+(""!=s.Last[2]?'<span class="journalLastSuppl"><em>'+e[4]+"</em> "+s.Last[2]+"</span>":"")+"\t\t\t\t\t\t\t\t\t- \t\t\t\t\t\t\t\t\t"+(""!=s.Last[3]?'<span class="journalLastPubDate">'+s.Last[3]+"</span>":"")+" \t\t\t\t\t\t\t\t\t"+(0==s.Active?e[10]:"")+" \t\t\t\t\t\t\t\t</a>\t\t\t\t\t\t\t</td>",s.Collection&&(i+=' \t\t\t\t\t\t\t\t<td>\t\t\t\t\t\t\t\t\t<span class="glyphFlags '+s.Collection+'"></span> '+Collection.PortalCollectionNameFill(s.Collection)+"\t\t\t\t\t\t\t\t</td>"),i+="\t\t\t\t\t\t</tr>"}return i},PortalCollectionNameFill:function(t){var e="";if(window.collections)for(var i=0,n=window.collections.length;i<n;i++)window.collections[i].id==t&&(e=window.collections[i].name);return e},ThemeListFill:function(t,e,i){for(var n='\t<tr>\t\t\t\t\t\t\t<td class="collapseContainer">',o=0,s=t.themeList.length;o<s;o++){n+='\t\t<div class="themeItem">\t\t\t\t\t\t\t\t\t<a href="javascript:;" id="'+i+"-collapseTitle-"+o+'" \t\t\t\t\t\t\t\t\tclass="collapseTitleBlock '+(void 0===t.themeList[o].journalList?"closed":"")+'" data-id="'+t.themeList[o].id+'">\t\t\t\t\t\t\t\t\t\t<strong>'+t.themeList[o].Area+"</strong>\t\t\t\t\t\t\t\t\t\t("+t.themeList[o].Total+')\t\t\t\t\t\t\t\t\t</a> \t\t\t\t\t\t\t\t\t<div class="collapseContent" id="'+i+"-collapseContent-"+o+'" '+(void 0===t.themeList[o].journalList?'style="display: none;"':"")+">";for(var r=0,a=t.themeList[o].SubAreas.length;r<a;r++)n+='\t\t\t<a href="javascript:;" id="'+i+"-collapseTitle-"+o+"-sub-"+r+'" \t\t\t\t\t\t\t\t\t\t\tclass="collapseTitle '+(void 0===t.themeList[o].SubAreas[r].journalList?"closed":"")+'" data-id="'+t.themeList[o].SubAreas[r].id+'">\t\t\t\t\t\t\t\t\t\t\t<strong>'+t.themeList[o].SubAreas[r].Area+"</strong>\t\t\t\t\t\t\t\t\t\t\t\t("+t.themeList[o].SubAreas[r].Total+')\t\t\t\t\t\t\t\t\t\t</a>\t\t\t\t\t\t\t\t\t\t<div class="collapseContent" id="'+i+"-collapseContent-"+o+"-sub-"+r+'" '+(void 0===t.themeList[o].SubAreas[r].journalList?'style="display: none;"':"")+'>\t\t\t\t\t\t\t\t\t\t\t<table> \t\t\t\t\t\t\t\t\t\t\t\t<thead> \t\t\t\t\t\t\t\t\t\t\t\t\t<tr> \t\t\t\t\t\t\t\t\t\t\t\t\t\t<th class="actions"></th> \t\t\t\t\t\t\t\t\t\t\t\t\t\t<th>'+e[12]+"</th> \t\t\t\t\t\t\t\t\t\t\t\t\t\t"+(t.collection?"<th class='flags'>"+e[14]+"</th>":"")+" \t\t\t\t\t\t\t\t\t\t\t\t\t</tr> \t\t\t\t\t\t\t\t\t\t\t\t</thead> \t\t\t\t\t\t\t\t\t\t\t\t<tbody>",void 0!==t.themeList[o].SubAreas[r].journalList&&(n+=Collection.JournalListFill(t.themeList[o].SubAreas[r],e)),n+='\t\t\t\t\t\t</tbody>\t\t\t\t\t\t\t\t\t\t\t</table> \t\t\t\t\t\t\t\t\t\t</div> \t\t\t\t\t\t\t\t\t\t<div class="collapseContent collectionListLoading" style="display: none;"></div>\t\t\t\t\t\t\t\t\t\t';n+="\t\t\t</div>"}return n+="\t\t</td>\t\t\t\t\t\t</tr>"},PublisherListFill:function(t,e,i){for(var n='\t<tr>\t\t\t\t\t\t\t<td class="collapseContainer">',o=0,s=t.publisherList.length;o<s;o++)n+='\t\t<div class="themeItem">\t\t\t\t\t\t\t\t\t<a href="javascript:;" id="'+i+"-collapseTitle-"+o+'" class="collapseTitle '+(void 0===t.publisherList[o].journalList?"closed":"")+'"><strong>'+t.publisherList[o].Publisher+"</strong> ("+t.publisherList[o].Total+')</a> \t\t\t\t\t\t\t\t\t<div class="collapseContent" id="'+i+"-collapseContent-"+o+'" '+(void 0===t.publisherList[o].journalList?'style="display: none;"':"")+'> \t\t\t\t\t\t\t\t\t\t<table> \t\t\t\t\t\t\t\t\t\t\t<thead> \t\t\t\t\t\t\t\t\t\t\t\t<tr> \t\t\t\t\t\t\t\t\t\t\t\t\t<th class="actions"></th> \t\t\t\t\t\t\t\t\t\t\t\t\t<th>'+e[12]+"</th> \t\t\t\t\t\t\t\t\t\t\t\t\t"+(t.collection?"<th class='flags'>"+e[14]+"</th>":"")+" \t\t\t\t\t\t\t\t\t\t\t\t</tr> \t\t\t\t\t\t\t\t\t\t\t</thead> \t\t\t\t\t\t\t\t\t\t\t<tbody>",void 0!==t.publisherList[o].journalList&&(n+=Collection.JournalListFill(t.publisherList[o],e)),n+='\t\t\t\t\t</tbody> \t\t\t\t\t\t\t\t\t\t</table> \t\t\t\t\t\t\t\t\t</div> \t\t\t\t\t\t\t\t\t<div class="collapseContent collectionListLoading" style="display: none;"></div>\t\t\t\t\t\t\t\t</div>';return n+="\t\t</td>\t\t\t\t\t\t</tr>"},CollectionListFill:function(t,e,i){for(var n='\t<tr>\t\t\t\t\t\t\t<td class="collapseContainer">',o=0,s=t.collectionList.length;o<s;o++)n+='\t\t<div class="themeItem collectionBold">\t\t\t\t\t\t\t\t<a href="'+t.collectionList[o].link+'" class="collapseTitle closed" target="_blank"><span class="glyphFlags '+t.collectionList[o].id+'"></span> <strong>'+t.collectionList[o].name+"</strong> ("+t.collectionList[o].Total+")</a> \t\t\t\t\t\t\t</div>";return n+="\t\t</td>\t\t\t\t\t\t</tr>"},ScrollEvents:function(e,i,n){var o=$(".collectionCurrentPage",e),s=$(".collectionTotalPages",e),t=$(".collectionSearch",e),r=$(e).data("perpage"),a=($(e).data("method"),"method=alphabetic&rp="+r+(""!=t.val()?"&query="+t.val():""));$(window).off("scroll").on("scroll",function(){var t;o.val()<s.val()?($("footer").hide(),$(window).scrollTop()+$(window).height()==$(document).height()&&(t=parseInt(o.val()),o.val(++t),a+="&page="+t,Collection.JournalListFinder(a,i,e,n,!1,!1))):$("footer").show()})},CollapseEvents:function(o,s){var r=$(o).data("method"),t=$(".collectionSearch",o),a="method=alphabetic"+(""!=t.val()?"&query="+t.val():"");$(".collapseTitle,.collapseTitleBlock",o).on("click",function(){var t=$(this),e=t.parent().find(".collectionListLoading"),i=t.next(".collapseContent"),n=i.find("table tbody tr").length;i.is(":visible")?(i.slideUp("fast"),$(this).addClass("closed")):!t.is(".collapseTitleBlock")&&0==n?(n=void 0!==t.data("id")?t.data("id"):$("strong",this).text(),a+="&"+r+"="+n,Collection.JournalListFinder(a,e,o,s,!0,!1,"Collection.CollapseOpen('#"+i.attr("id")+"','#"+t.attr("id")+"')",i)):(i.slideDown("fast"),e.hide(),$(this).removeClass("closed"))})},CollapseOpen:function(t,e){$(t).slideDown("fast"),$(e).removeClass("closed")}},Validator=(Journal={Init:function(){$("#sortBy").change(function(){$("#sortBy option:selected").each(function(){Journal.publicationSort($(this).val())})}),$(".scroll").on("click",function(t){var e=$(this).attr("href").split("#")[1];0<$("a[name="+e+"]").length&&(e=$("a[name="+e+"]").offset(),$("html,body").animate({scrollTop:e.top+1},500))})},Bindings:function(t){},publicationSort:function(t){for(var e=$(".issueIndent>ul.articles"),i=e.length,n=0;n<=i;n++){var o=e[n],s=$(o).children();("YEAR_DESC"===t?$(s).sort(function(t,e){t=parseInt($(t).data("date"));return parseInt($(e).data("date"))<t?1:-1}):$(s).sort(function(t,e){return parseInt($(t).data("date"))<parseInt($(e).data("date"))?1:-1})).each(function(){$(o).append(this)})}},publicatorName:function(){var t=$(".namePlublisher").text();56<=t.length&&($(".namePlublisher").attr("data-toggle","tooltip"),$(".namePlublisher").attr("title",t))},checkPressReleases:function(){var i,n,t=parseInt($("#pressReleasesList").attr("data-lastdays")),e=new Date;isNaN(t)||t<=0||((i=new Date).setDate(e.getDate()-t),isNaN(i.getTime())?console.error("Data inválida ao calcular a data de "+t+" dias atrás."):(n=!1,$("#pressReleasesList .card").each(function(){var t=$(this).attr("data-publication-date"),e=new Date(t);if(!isNaN(e.getTime()))return i<=e?!(n=!0):void 0;console.error("Data inválida encontrada em data-publication-date:",t)}),n&&$("#pressReleasesList").removeClass("d-none")))}},{MultipleEmails:function(t,e){for(var e=e||";",i=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,n=!0,o=t.split(e),s=0;s<o.length;s++)o[s]=o[s].trim(),""!=o[s]&&0!=i.test(o[s])||(n=!1);return n}}),Cookie={Get:function(t,e){return void 0===e?e="":e+="/",t=e+t,0<document.cookie.length&&-1!=(c_start=document.cookie.indexOf(t+"="))?(c_start=c_start+t.length+1,-1==(c_end=document.cookie.indexOf(";",c_start))&&(c_end=document.cookie.length),unescape(document.cookie.substring(c_start,c_end))):""},Set:function(t,e,i,n){var o,i=void 0!==i?((o=new Date).setTime(o.getTime()+24*i*60*60*1e3),"; expires="+o.toGMTString()):"";void 0===n?n="":n+="/",""!=Cookie.Get(t)&&(document.cookie=n+t+"="+e+"expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/"),document.cookie=n+t+"="+e+i+"; path=/"}},alertMessage=($(function(){var t;Portal.Init(),$(".searchForm").length&&SearchForm.Init(),$("body.journal").length&&Journal.Init(),Journal.checkPressReleases(),$("body.collection, body.portal").length&&Collection.Init(),$("body.portal.home").length&&$(".portal .twitter").twittie({dateFormat:"%d de %B",template:'<span>{{date}}</span><div class="info">{{tweet}}</div><div class="tShare"><a href="https://twitter.com/intent/tweet?in_reply_to={{twitterId}}" target="_blank" class="showTooltip" data-placement="top" title="" data-original-title="Compartilhar no Twitter"><span class="glyphBtn tShare"></span></a><a href="https://twitter.com/intent/retweet?tweet_id={{twitterId}}" target="_blank" class="showTooltip" data-placement="top" title="" data-original-title="Atualizar"><span class="glyphBtn tReload"></span></a><a href="https://twitter.com/intent/favorite?tweet_id={{twitterId}}" target="_blank" class="showTooltip" data-placement="top" title="" data-original-title="Adicionar as favoritos no Twitter"><span class="glyphBtn tFavorite"></span></a></div>',count:3,loadingText:"Carregando..."}),$(".portal .collectionList").length&&(t=window.location.hash),$('.portal .collection .nav-tabs a[href="'+t+'"]').tab("show"),$(".namePlublisher").length&&Journal.publicatorName()}),{isActive:!0,msgContainer:document.querySelector("div.alert.alert-warning.alert-dismissible"),setCookie:function(t,e,i){var n=new Date,i=(n.setTime(n.getTime()+24*i*60*60*1e3),"expires="+n.toUTCString());document.cookie=t+"="+e+";"+i+";path=/"},getCookie:function(t){for(var e=t+"=",i=decodeURIComponent(document.cookie).split(";"),n=0;n<i.length;n++){for(var o=i[n];" "==o.charAt(0);)o=o.substring(1);if(0==o.indexOf(e))return o.substring(e.length,o.length)}return""},checkCookie:function(t){t=alertMessage.getCookie(t);""==t||null==t?alertMessage.showAlertMessage():"object"==typeof msgContainer&&null!==msgContainer&&(alertMessage.msgContainer.style.display="none")},clearCookie:function(t){alertMessage.setCookie(t,"no",-365)},showAlertMessage:function(){var t,e;e="object"==typeof msgContainer&&null!==msgContainer?(t=alertMessage.msgContainer).querySelector("button.close"):t=null,null!==t&&null!==e&&(e.addEventListener("click",function(){alertMessage.setCookie("alert-message-accepted","yes",365)}),t.style.display="block")},Init:function(){alertMessage.isActive?alertMessage.checkCookie("alert-message-accepted"):alertMessage.clearCookie("alert-message-accepted")}}),ModalForms=(alertMessage.Init(),$(function(){$(".dropdown-toggle").dropdown(),$('[data-toggle="tooltip"], .dropdown-tooltip').tooltip(),$(".image").on("error",function(){this.src="/static/img/fallback_image.png"}),$(".collapseAbstractBlock").on("click",function(t){t.preventDefault(),$(".collapseAbstractBlock").each(function(t){var e=$(this);$("#"+e.data("id")).slideUp(),e.removeClass("opened")});var t=$(this),e=$("#"+t.data("id"));e.is(":visible")?(e.slideUp(),t.removeClass("opened")):(e.slideDown(),t.addClass("opened"))}),$(".modal").on("hidden.bs.modal",function(t){$(this).find("input[type=text], textarea, select").val("").end().find("input[type=checkbox], input[type=radio]").prop("checked","").end()})}),!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.moment=e()}(this,function(){"use strict";var N;function p(){return N.apply(null,arguments)}function u(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function I(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function h(t){return void 0===t}function H(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function F(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function R(t,e){for(var i=[],n=0;n<t.length;++n)i.push(e(t[n],n));return i}function f(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function m(t,e){for(var i in e)f(e,i)&&(t[i]=e[i]);return f(e,"toString")&&(t.toString=e.toString),f(e,"valueOf")&&(t.valueOf=e.valueOf),t}function c(t,e,i,n){return Ae(t,e,i,n,!0).utc()}function g(t){return null==t._pf&&(t._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),t._pf}var q=Array.prototype.some||function(t){for(var e=Object(this),i=e.length>>>0,n=0;n<i;n++)if(n in e&&t.call(this,e[n],n,e))return!0;return!1};function Y(t){if(null==t._isValid){var e=g(t),i=q.call(e.parsedDateParts,function(t){return null!=t}),i=!isNaN(t._d.getTime())&&e.overflow<0&&!e.empty&&!e.invalidMonth&&!e.invalidWeekday&&!e.nullInput&&!e.invalidFormat&&!e.userInvalidated&&(!e.meridiem||e.meridiem&&i);if(t._strict&&(i=i&&0===e.charsLeftOver&&0===e.unusedTokens.length&&void 0===e.bigHour),null!=Object.isFrozen&&Object.isFrozen(t))return i;t._isValid=i}return t._isValid}function W(t){var e=c(NaN);return null!=t?m(g(e),t):g(e).userInvalidated=!0,e}var B=p.momentProperties=[];function z(t,e){var i,n,o;if(h(e._isAMomentObject)||(t._isAMomentObject=e._isAMomentObject),h(e._i)||(t._i=e._i),h(e._f)||(t._f=e._f),h(e._l)||(t._l=e._l),h(e._strict)||(t._strict=e._strict),h(e._tzm)||(t._tzm=e._tzm),h(e._isUTC)||(t._isUTC=e._isUTC),h(e._offset)||(t._offset=e._offset),h(e._pf)||(t._pf=g(e)),h(e._locale)||(t._locale=e._locale),0<B.length)for(i=0;i<B.length;i++)h(o=e[n=B[i]])||(t[n]=o);return t}var U=!1;function G(t){z(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===U&&(U=!0,p.updateOffset(this),U=!1)}function y(t){return t instanceof G||null!=t&&null!=t._isAMomentObject}function a(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function d(t){var t=+t,e=0;return e=0!=t&&isFinite(t)?a(t):e}function V(t,e,i){for(var n=Math.min(t.length,e.length),o=Math.abs(t.length-e.length),s=0,r=0;r<n;r++)(i&&t[r]!==e[r]||!i&&d(t[r])!==d(e[r]))&&s++;return s+o}function X(t){!1===p.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function t(o,s){var r=!0;return m(function(){if(null!=p.deprecationHandler&&p.deprecationHandler(null,o),r){for(var t,e=[],i=0;i<arguments.length;i++){if(t="","object"==typeof arguments[i]){for(var n in t+="\n["+i+"] ",arguments[0])t+=n+": "+arguments[0][n]+", ";t=t.slice(0,-2)}else t=arguments[i];e.push(t)}X(o+"\nArguments: "+Array.prototype.slice.call(e).join("")+"\n"+(new Error).stack),r=!1}return s.apply(this,arguments)},s)}var Z={};function Q(t,e){null!=p.deprecationHandler&&p.deprecationHandler(t,e),Z[t]||(X(e),Z[t]=!0)}function r(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function J(t,e){var i,n=m({},t);for(i in e)f(e,i)&&(I(t[i])&&I(e[i])?(n[i]={},m(n[i],t[i]),m(n[i],e[i])):null!=e[i]?n[i]=e[i]:delete n[i]);for(i in t)f(t,i)&&!f(e,i)&&I(t[i])&&(n[i]=m({},n[i]));return n}function K(t){null!=t&&this.set(t)}p.suppressDeprecationWarnings=!1,p.deprecationHandler=null;var tt=Object.keys||function(t){var e,i=[];for(e in t)f(t,e)&&i.push(e);return i};var et={};function e(t,e){var i=t.toLowerCase();et[i]=et[i+"s"]=et[e]=t}function s(t){return"string"==typeof t?et[t]||et[t.toLowerCase()]:void 0}function it(t){var e,i,n={};for(i in t)f(t,i)&&(e=s(i))&&(n[e]=t[i]);return n}var nt={};function i(t,e){nt[t]=e}function ot(e,i){return function(t){return null!=t?(rt(this,e,t),p.updateOffset(this,i),this):st(this,e)}}function st(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function rt(t,e,i){t.isValid()&&t._d["set"+(t._isUTC?"UTC":"")+e](i)}function l(t,e,i){var n=""+Math.abs(t);return(0<=t?i?"+":"":"-")+Math.pow(10,Math.max(0,e-n.length)).toString().substr(1)+n}var at=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,lt=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,ct={},dt={};function n(t,e,i,n){var o="string"==typeof n?function(){return this[n]()}:n;t&&(dt[t]=o),e&&(dt[e[0]]=function(){return l(o.apply(this,arguments),e[1],e[2])}),i&&(dt[i]=function(){return this.localeData().ordinal(o.apply(this,arguments),t)})}function ut(t,e){return t.isValid()?(e=ht(e,t.localeData()),ct[e]=ct[e]||function(n){for(var t,o=n.match(at),e=0,s=o.length;e<s;e++)dt[o[e]]?o[e]=dt[o[e]]:o[e]=(t=o[e]).match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"");return function(t){for(var e="",i=0;i<s;i++)e+=r(o[i])?o[i].call(t,n):o[i];return e}}(e),ct[e](t)):t.localeData().invalidDate()}function ht(t,e){var i=5;function n(t){return e.longDateFormat(t)||t}for(lt.lastIndex=0;0<=i&<.test(t);)t=t.replace(lt,n),lt.lastIndex=0,--i;return t}var pt=/\d/,o=/\d\d/,ft=/\d{3}/,mt=/\d{4}/,v=/[+-]?\d{6}/,b=/\d\d?/,gt=/\d\d\d\d?/,yt=/\d\d\d\d\d\d?/,vt=/\d{1,3}/,bt=/\d{1,4}/,w=/[+-]?\d{1,6}/,wt=/\d+/,_t=/[+-]?\d+/,kt=/Z|[+-]\d\d:?\d\d/gi,xt=/Z|[+-]\d\d(?::?\d\d)?/gi,Tt=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,St={};function _(t,i,n){St[t]=r(i)?i:function(t,e){return t&&n?n:i}}function Ct(t,e){return f(St,t)?St[t](e._strict,e._locale):new RegExp(Et(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,n,o){return e||i||n||o})))}function Et(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var Dt={};function k(t,i){var e,n=i;for("string"==typeof t&&(t=[t]),H(i)&&(n=function(t,e){e[i]=d(t)}),e=0;e<t.length;e++)Dt[t[e]]=n}function At(t,o){k(t,function(t,e,i,n){i._w=i._w||{},o(t,i._w,i,n)})}var x=0,T=1,S=2,C=3,E=4,D=5,Lt=6,Ot=7,$t=8,Mt=Array.prototype.indexOf||function(t){for(var e=0;e<this.length;++e)if(this[e]===t)return e;return-1},A=Mt;function jt(t,e){return new Date(Date.UTC(t,e+1,0)).getUTCDate()}n("M",["MM",2],"Mo",function(){return this.month()+1}),n("MMM",0,0,function(t){return this.localeData().monthsShort(this,t)}),n("MMMM",0,0,function(t){return this.localeData().months(this,t)}),e("month","M"),i("month",8),_("M",b),_("MM",b,o),_("MMM",function(t,e){return e.monthsShortRegex(t)}),_("MMMM",function(t,e){return e.monthsRegex(t)}),k(["M","MM"],function(t,e){e[T]=d(t)-1}),k(["MMM","MMMM"],function(t,e,i,n){n=i._locale.monthsParse(t,n,i._strict);null!=n?e[T]=n:g(i).invalidMonth=t});var Pt=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Mt="January_February_March_April_May_June_July_August_September_October_November_December".split("_");var Nt="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_");function It(t,e){var i;if(t.isValid()){if("string"==typeof e)if(/^\d+$/.test(e))e=d(e);else if(!H(e=t.localeData().monthsParse(e)))return;i=Math.min(t.date(),jt(t.year(),e)),t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,i)}}function Ht(t){return null!=t?(It(this,t),p.updateOffset(this,!0),this):st(this,"Month")}var Ft=Tt;var Rt=Tt;function qt(){function t(t,e){return e.length-t.length}for(var e,i=[],n=[],o=[],s=0;s<12;s++)e=c([2e3,s]),i.push(this.monthsShort(e,"")),n.push(this.months(e,"")),o.push(this.months(e,"")),o.push(this.monthsShort(e,""));for(i.sort(t),n.sort(t),o.sort(t),s=0;s<12;s++)i[s]=Et(i[s]),n[s]=Et(n[s]);for(s=0;s<24;s++)o[s]=Et(o[s]);this._monthsRegex=new RegExp("^("+o.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+n.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+i.join("|")+")","i")}function Yt(t){return Wt(t)?366:365}function Wt(t){return t%4==0&&t%100!=0||t%400==0}n("Y",0,0,function(){var t=this.year();return t<=9999?""+t:"+"+t}),n(0,["YY",2],0,function(){return this.year()%100}),n(0,["YYYY",4],0,"year"),n(0,["YYYYY",5],0,"year"),n(0,["YYYYYY",6,!0],0,"year"),e("year","y"),i("year",1),_("Y",_t),_("YY",b,o),_("YYYY",bt,mt),_("YYYYY",w,v),_("YYYYYY",w,v),k(["YYYYY","YYYYYY"],x),k("YYYY",function(t,e){e[x]=2===t.length?p.parseTwoDigitYear(t):d(t)}),k("YY",function(t,e){e[x]=p.parseTwoDigitYear(t)}),k("Y",function(t,e){e[x]=parseInt(t,10)}),p.parseTwoDigitYear=function(t){return d(t)+(68<d(t)?1900:2e3)};var Bt=ot("FullYear",!0);function zt(t,e,i,n,o,s,r){e=new Date(t,e,i,n,o,s,r);return t<100&&0<=t&&isFinite(e.getFullYear())&&e.setFullYear(t),e}function Ut(t){var e=new Date(Date.UTC.apply(null,arguments));return t<100&&0<=t&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function Gt(t,e,i){i=7+e-i;return i-(7+Ut(t,0,i).getUTCDay()-e)%7-1}function Vt(t,e,i,n,o){var s,e=1+7*(e-1)+(7+i-n)%7+Gt(t,n,o),i=e<=0?Yt(s=t-1)+e:e>Yt(t)?(s=t+1,e-Yt(t)):(s=t,e);return{year:s,dayOfYear:i}}function Xt(t,e,i){var n,o,s=Gt(t.year(),e,i),s=Math.floor((t.dayOfYear()-s-1)/7)+1;return s<1?n=s+Zt(o=t.year()-1,e,i):s>Zt(t.year(),e,i)?(n=s-Zt(t.year(),e,i),o=t.year()+1):(o=t.year(),n=s),{week:n,year:o}}function Zt(t,e,i){var n=Gt(t,e,i),e=Gt(t+1,e,i);return(Yt(t)-n+e)/7}n("w",["ww",2],"wo","week"),n("W",["WW",2],"Wo","isoWeek"),e("week","w"),e("isoWeek","W"),i("week",5),i("isoWeek",5),_("w",b),_("ww",b,o),_("W",b),_("WW",b,o),At(["w","ww","W","WW"],function(t,e,i,n){e[n.substr(0,1)]=d(t)});n("d",0,"do","day"),n("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),n("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),n("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),n("e",0,0,"weekday"),n("E",0,0,"isoWeekday"),e("day","d"),e("weekday","e"),e("isoWeekday","E"),i("day",11),i("weekday",11),i("isoWeekday",11),_("d",b),_("e",b),_("E",b),_("dd",function(t,e){return e.weekdaysMinRegex(t)}),_("ddd",function(t,e){return e.weekdaysShortRegex(t)}),_("dddd",function(t,e){return e.weekdaysRegex(t)}),At(["dd","ddd","dddd"],function(t,e,i,n){n=i._locale.weekdaysParse(t,n,i._strict);null!=n?e.d=n:g(i).invalidWeekday=t}),At(["d","e","E"],function(t,e,i,n){e[n]=d(t)});var Qt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_");var Jt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_");var Kt="Su_Mo_Tu_We_Th_Fr_Sa".split("_");var te=Tt;var ee=Tt;var ie=Tt;function ne(){function t(t,e){return e.length-t.length}for(var e,i,n,o=[],s=[],r=[],a=[],l=0;l<7;l++)n=c([2e3,1]).day(l),e=this.weekdaysMin(n,""),i=this.weekdaysShort(n,""),n=this.weekdays(n,""),o.push(e),s.push(i),r.push(n),a.push(e),a.push(i),a.push(n);for(o.sort(t),s.sort(t),r.sort(t),a.sort(t),l=0;l<7;l++)s[l]=Et(s[l]),r[l]=Et(r[l]),a[l]=Et(a[l]);this._weekdaysRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function oe(){return this.hours()%12||12}function se(t,e){n(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function re(t,e){return e._meridiemParse}n("H",["HH",2],0,"hour"),n("h",["hh",2],0,oe),n("k",["kk",2],0,function(){return this.hours()||24}),n("hmm",0,0,function(){return""+oe.apply(this)+l(this.minutes(),2)}),n("hmmss",0,0,function(){return""+oe.apply(this)+l(this.minutes(),2)+l(this.seconds(),2)}),n("Hmm",0,0,function(){return""+this.hours()+l(this.minutes(),2)}),n("Hmmss",0,0,function(){return""+this.hours()+l(this.minutes(),2)+l(this.seconds(),2)}),se("a",!0),se("A",!1),e("hour","h"),i("hour",13),_("a",re),_("A",re),_("H",b),_("h",b),_("k",b),_("HH",b,o),_("hh",b,o),_("kk",b,o),_("hmm",gt),_("hmmss",yt),_("Hmm",gt),_("Hmmss",yt),k(["H","HH"],C),k(["k","kk"],function(t,e,i){t=d(t);e[C]=24===t?0:t}),k(["a","A"],function(t,e,i){i._isPm=i._locale.isPM(t),i._meridiem=t}),k(["h","hh"],function(t,e,i){e[C]=d(t),g(i).bigHour=!0}),k("hmm",function(t,e,i){var n=t.length-2;e[C]=d(t.substr(0,n)),e[E]=d(t.substr(n)),g(i).bigHour=!0}),k("hmmss",function(t,e,i){var n=t.length-4,o=t.length-2;e[C]=d(t.substr(0,n)),e[E]=d(t.substr(n,2)),e[D]=d(t.substr(o)),g(i).bigHour=!0}),k("Hmm",function(t,e,i){var n=t.length-2;e[C]=d(t.substr(0,n)),e[E]=d(t.substr(n))}),k("Hmmss",function(t,e,i){var n=t.length-4,o=t.length-2;e[C]=d(t.substr(0,n)),e[E]=d(t.substr(n,2)),e[D]=d(t.substr(o))});var ae,Tt=ot("Hours",!0),le={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Mt,monthsShort:Nt,week:{dow:0,doy:6},weekdays:Qt,weekdaysMin:Kt,weekdaysShort:Jt,meridiemParse:/[ap]\.?m?\.?/i},L={},ce={};function de(t){return t&&t.toLowerCase().replace("_","-")}function ue(t){var e;if(!L[t]&&"undefined"!=typeof module&&module&&module.exports)try{e=ae._abbr,require("./locale/"+t),he(e)}catch(t){}return L[t]}function he(t,e){return(ae=t&&(t=h(e)?fe(t):pe(t,e))?t:ae)._abbr}function pe(t,e){if(null===e)return delete L[t],null;var i=le;if(e.abbr=t,null!=L[t])Q("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),i=L[t]._config;else if(null!=e.parentLocale){if(null==L[e.parentLocale])return ce[e.parentLocale]||(ce[e.parentLocale]=[]),ce[e.parentLocale].push({name:t,config:e}),null;i=L[e.parentLocale]._config}return L[t]=new K(J(i,e)),ce[t]&&ce[t].forEach(function(t){pe(t.name,t.config)}),he(t),L[t]}function fe(t){var e;if(!(t=t&&t._locale&&t._locale._abbr?t._locale._abbr:t))return ae;if(!u(t)){if(e=ue(t))return e;t=[t]}for(var i,n,o,s,r=t,a=0;a<r.length;){for(i=(s=de(r[a]).split("-")).length,n=(n=de(r[a+1]))?n.split("-"):null;0<i;){if(o=ue(s.slice(0,i).join("-")))return o;if(n&&n.length>=i&&V(s,n,!0)>=i-1)break;i--}a++}return null}function me(t){var e=t._a;return e&&-2===g(t).overflow&&(e=e[T]<0||11<e[T]?T:e[S]<1||e[S]>jt(e[x],e[T])?S:e[C]<0||24<e[C]||24===e[C]&&(0!==e[E]||0!==e[D]||0!==e[Lt])?C:e[E]<0||59<e[E]?E:e[D]<0||59<e[D]?D:e[Lt]<0||999<e[Lt]?Lt:-1,g(t)._overflowDayOfYear&&(e<x||S<e)&&(e=S),g(t)._overflowWeeks&&-1===e&&(e=Ot),g(t)._overflowWeekday&&-1===e&&(e=$t),g(t).overflow=e),t}var ge=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ye=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ve=/Z|[+-]\d\d(?::?\d\d)?/,be=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],we=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],_e=/^\/?Date\((\-?\d+)/i;function ke(t){var e,i,n,o,s,r,a=t._i,l=ge.exec(a)||ye.exec(a);if(l){for(g(t).iso=!0,e=0,i=be.length;e<i;e++)if(be[e][1].exec(l[1])){o=be[e][0],n=!1!==be[e][2];break}if(null==o)t._isValid=!1;else{if(l[3]){for(e=0,i=we.length;e<i;e++)if(we[e][1].exec(l[3])){s=(l[2]||" ")+we[e][0];break}if(null==s)return void(t._isValid=!1)}if(n||null==s){if(l[4]){if(!ve.exec(l[4]))return void(t._isValid=!1);r="Z"}t._f=o+(s||"")+(r||""),Ee(t)}else t._isValid=!1}}else t._isValid=!1}var xe=/^((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d?\d\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(?:\d\d)?\d\d\s)(\d\d:\d\d)(\:\d\d)?(\s(?:UT|GMT|[ECMP][SD]T|[A-IK-Za-ik-z]|[+-]\d{4}))$/;function Te(t){var e,i,n,o,s={" GMT":" +0000"," EDT":" -0400"," EST":" -0500"," CDT":" -0500"," CST":" -0600"," MDT":" -0600"," MST":" -0700"," PDT":" -0700"," PST":" -0800"},r=t._i.replace(/\([^\)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s|\s$/g,""),a=xe.exec(r);if(a){if(r=a[1]?"ddd"+(5===a[1].length?", ":" "):"",e="D MMM "+(10<a[2].length?"YYYY ":"YY "),i="HH:mm"+(a[4]?":ss":""),a[1]){var l=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][new Date(a[2]).getDay()];if(a[1].substr(0,3)!==l)return g(t).weekdayMismatch=!0,void(t._isValid=!1)}switch(a[5].length){case 2:n=0===o?" +0000":((o="YXWVUTSRQPONZABCDEFGHIKLM".indexOf(a[5][1].toUpperCase())-12)<0?" -":" +")+(""+o).replace(/^-?/,"0").match(/..$/)[0]+"00";break;case 4:n=s[a[5]];break;default:n=s[" GMT"]}a[5]=n,t._i=a.splice(1).join(""),t._f=r+e+i+" ZZ",Ee(t),g(t).rfc2822=!0}else t._isValid=!1}function Se(t,e,i){return null!=t?t:null!=e?e:i}function Ce(t){var e,i,n,o,s,r,a,l,c,d,u,h=[];if(!t._d){for(n=t,o=new Date(p.now()),i=n._useUTC?[o.getUTCFullYear(),o.getUTCMonth(),o.getUTCDate()]:[o.getFullYear(),o.getMonth(),o.getDate()],t._w&&null==t._a[S]&&null==t._a[T]&&(null!=(o=(n=t)._w).GG||null!=o.W||null!=o.E?(l=1,c=4,s=Se(o.GG,n._a[x],Xt(O(),1,4).year),r=Se(o.W,1),((a=Se(o.E,1))<1||7<a)&&(d=!0)):(l=n._locale._week.dow,c=n._locale._week.doy,u=Xt(O(),l,c),s=Se(o.gg,n._a[x],u.year),r=Se(o.w,u.week),null!=o.d?((a=o.d)<0||6<a)&&(d=!0):null!=o.e?(a=o.e+l,(o.e<0||6<o.e)&&(d=!0)):a=l),r<1||r>Zt(s,l,c)?g(n)._overflowWeeks=!0:null!=d?g(n)._overflowWeekday=!0:(u=Vt(s,r,a,l,c),n._a[x]=u.year,n._dayOfYear=u.dayOfYear)),null!=t._dayOfYear&&(o=Se(t._a[x],i[x]),(t._dayOfYear>Yt(o)||0===t._dayOfYear)&&(g(t)._overflowDayOfYear=!0),d=Ut(o,0,t._dayOfYear),t._a[T]=d.getUTCMonth(),t._a[S]=d.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=h[e]=i[e];for(;e<7;e++)t._a[e]=h[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[C]&&0===t._a[E]&&0===t._a[D]&&0===t._a[Lt]&&(t._nextDay=!0,t._a[C]=0),t._d=(t._useUTC?Ut:zt).apply(null,h),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[C]=24)}}function Ee(t){if(t._f===p.ISO_8601)ke(t);else if(t._f===p.RFC_2822)Te(t);else{t._a=[],g(t).empty=!0;for(var e,i,n,o,s,r=""+t._i,a=r.length,l=0,c=ht(t._f,t._locale).match(at)||[],d=0;d<c.length;d++)i=c[d],(e=(r.match(Ct(i,t))||[])[0])&&(0<(n=r.substr(0,r.indexOf(e))).length&&g(t).unusedInput.push(n),r=r.slice(r.indexOf(e)+e.length),l+=e.length),dt[i]?(e?g(t).empty=!1:g(t).unusedTokens.push(i),n=i,s=t,null!=(o=e)&&f(Dt,n)&&Dt[n](o,s._a,s,n)):t._strict&&!e&&g(t).unusedTokens.push(i);g(t).charsLeftOver=a-l,0<r.length&&g(t).unusedInput.push(r),t._a[C]<=12&&!0===g(t).bigHour&&0<t._a[C]&&(g(t).bigHour=void 0),g(t).parsedDateParts=t._a.slice(0),g(t).meridiem=t._meridiem,t._a[C]=function(t,e,i){if(null==i)return e;return null!=t.meridiemHour?t.meridiemHour(e,i):null!=t.isPM?((t=t.isPM(i))&&e<12&&(e+=12),e=t||12!==e?e:0):e}(t._locale,t._a[C],t._meridiem),Ce(t),me(t)}}function De(t){var e,i,n=t._i,o=t._f;if(t._locale=t._locale||fe(t._l),null===n||void 0===o&&""===n)return W({nullInput:!0});if("string"==typeof n&&(t._i=n=t._locale.preparse(n)),y(n))return new G(me(n));if(F(n))t._d=n;else if(u(o)){var s,r,a,l,c,d=t;if(0===d._f.length)g(d).invalidFormat=!0,d._d=new Date(NaN);else{for(l=0;l<d._f.length;l++)c=0,s=z({},d),null!=d._useUTC&&(s._useUTC=d._useUTC),s._f=d._f[l],Ee(s),Y(s)&&(c=(c+=g(s).charsLeftOver)+10*g(s).unusedTokens.length,g(s).score=c,null==a||c<a)&&(a=c,r=s);m(d,r||s)}}else if(o)Ee(t);else if(h(o=(n=t)._i))n._d=new Date(p.now());else F(o)?n._d=new Date(o.valueOf()):"string"==typeof o?(i=n,null!==(e=_e.exec(i._i))?i._d=new Date(+e[1]):(ke(i),!1===i._isValid&&(delete i._isValid,Te(i),!1===i._isValid)&&(delete i._isValid,p.createFromInputFallback(i)))):u(o)?(n._a=R(o.slice(0),function(t){return parseInt(t,10)}),Ce(n)):I(o)?(e=n)._d||(i=it(e._i),e._a=R([i.year,i.month,i.day||i.date,i.hour,i.minute,i.second,i.millisecond],function(t){return t&&parseInt(t,10)}),Ce(e)):H(o)?n._d=new Date(o):p.createFromInputFallback(n);return Y(t)||(t._d=null),t}function Ae(t,e,i,n,o){var s={};return!0!==i&&!1!==i||(n=i,i=void 0),(I(t)&&function(t){for(var e in t)return;return 1}(t)||u(t)&&0===t.length)&&(t=void 0),s._isAMomentObject=!0,s._useUTC=s._isUTC=o,s._l=i,s._i=t,s._f=e,s._strict=n,(o=new G(me(De(o=s))))._nextDay&&(o.add(1,"d"),o._nextDay=void 0),o}function O(t,e,i,n){return Ae(t,e,i,n,!1)}p.createFromInputFallback=t("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),p.ISO_8601=function(){},p.RFC_2822=function(){};gt=t("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=O.apply(null,arguments);return this.isValid()&&t.isValid()?t<this?this:t:W()}),yt=t("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=O.apply(null,arguments);return this.isValid()&&t.isValid()?this<t?this:t:W()});function Le(t,e){var i,n;if(!(e=1===e.length&&u(e[0])?e[0]:e).length)return O();for(i=e[0],n=1;n<e.length;++n)e[n].isValid()&&!e[n][t](i)||(i=e[n]);return i}var Oe=["year","quarter","month","week","day","hour","minute","second","millisecond"];function $e(t){var t=it(t),e=t.year||0,i=t.quarter||0,n=t.month||0,o=t.week||0,s=t.day||0,r=t.hour||0,a=t.minute||0,l=t.second||0,c=t.millisecond||0;this._isValid=function(t){for(var e in t)if(-1===Oe.indexOf(e)||null!=t[e]&&isNaN(t[e]))return!1;for(var i=!1,n=0;n<Oe.length;++n)if(t[Oe[n]]){if(i)return!1;parseFloat(t[Oe[n]])!==d(t[Oe[n]])&&(i=!0)}return!0}(t),this._milliseconds=+c+1e3*l+6e4*a+1e3*r*60*60,this._days=+s+7*o,this._months=+n+3*i+12*e,this._data={},this._locale=fe(),this._bubble()}function Me(t){return t instanceof $e}function je(t){return t<0?-1*Math.round(-1*t):Math.round(t)}function Pe(t,i){n(t,0,0,function(){var t=this.utcOffset(),e="+";return t<0&&(t=-t,e="-"),e+l(~~(t/60),2)+i+l(~~t%60,2)})}Pe("Z",":"),Pe("ZZ",""),_("Z",xt),_("ZZ",xt),k(["Z","ZZ"],function(t,e,i){i._useUTC=!0,i._tzm=Ie(xt,t)});var Ne=/([\+\-]|\d\d)/gi;function Ie(t,e){var e=(e||"").match(t);return null===e?null:0===(e=60*(t=((e[e.length-1]||[])+"").match(Ne)||["-",0,0])[1]+d(t[2]))?0:"+"===t[0]?e:-e}function He(t,e){var i;return e._isUTC?(e=e.clone(),i=(y(t)||F(t)?t:O(t)).valueOf()-e.valueOf(),e._d.setTime(e._d.valueOf()+i),p.updateOffset(e,!1),e):O(t).local()}function Fe(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function Re(){return!!this.isValid()&&this._isUTC&&0===this._offset}p.updateOffset=function(){};var qe=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Ye=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;function $(t,e){var i,n=t;return Me(t)?n={ms:t._milliseconds,d:t._days,M:t._months}:H(t)?(n={},e?n[e]=t:n.milliseconds=t):(e=qe.exec(t))?(i="-"===e[1]?-1:1,n={y:0,d:d(e[S])*i,h:d(e[C])*i,m:d(e[E])*i,s:d(e[D])*i,ms:d(je(1e3*e[Lt]))*i}):(e=Ye.exec(t))?(i="-"===e[1]?-1:1,n={y:We(e[2],i),M:We(e[3],i),w:We(e[4],i),d:We(e[5],i),h:We(e[6],i),m:We(e[7],i),s:We(e[8],i)}):null==n?n={}:"object"==typeof n&&("from"in n||"to"in n)&&(e=function(t,e){var i;if(!t.isValid()||!e.isValid())return{milliseconds:0,months:0};e=He(e,t),t.isBefore(e)?i=Be(t,e):((i=Be(e,t)).milliseconds=-i.milliseconds,i.months=-i.months);return i}(O(n.from),O(n.to)),(n={}).ms=e.milliseconds,n.M=e.months),i=new $e(n),Me(t)&&f(t,"_locale")&&(i._locale=t._locale),i}function We(t,e){t=t&&parseFloat(t.replace(",","."));return(isNaN(t)?0:t)*e}function Be(t,e){var i={milliseconds:0,months:0};return i.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(i.months,"M").isAfter(e)&&--i.months,i.milliseconds=+e-+t.clone().add(i.months,"M"),i}function ze(n,o){return function(t,e){var i;return null===e||isNaN(+e)||(Q(o,"moment()."+o+"(period, number) is deprecated. Please use moment()."+o+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),i=t,t=e,e=i),Ue(this,$(t="string"==typeof t?+t:t,e),n),this}}function Ue(t,e,i,n){var o=e._milliseconds,s=je(e._days),e=je(e._months);t.isValid()&&(n=null==n||n,o&&t._d.setTime(t._d.valueOf()+o*i),s&&rt(t,"Date",st(t,"Date")+s*i),e&&It(t,st(t,"Month")+e*i),n)&&p.updateOffset(t,s||e)}$.fn=$e.prototype,$.invalid=function(){return $(NaN)};Mt=ze(1,"add"),Nt=ze(-1,"subtract");function Ge(t){return void 0===t?this._locale._abbr:(null!=(t=fe(t))&&(this._locale=t),this)}p.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",p.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";Qt=t("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return void 0===t?this.localeData():this.locale(t)});function Ve(){return this._locale}function Xe(t,e){n(0,[t,t.length],0,e)}function Ze(t,e,i,n,o){var s;return null==t?Xt(this,n,o).year:(s=Zt(t,n,o),function(t,e,i,n,o){t=Vt(t,e,i,n,o),e=Ut(t.year,0,t.dayOfYear);return this.year(e.getUTCFullYear()),this.month(e.getUTCMonth()),this.date(e.getUTCDate()),this}.call(this,t,e=s<e?s:e,i,n,o))}n(0,["gg",2],0,function(){return this.weekYear()%100}),n(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Xe("gggg","weekYear"),Xe("ggggg","weekYear"),Xe("GGGG","isoWeekYear"),Xe("GGGGG","isoWeekYear"),e("weekYear","gg"),e("isoWeekYear","GG"),i("weekYear",1),i("isoWeekYear",1),_("G",_t),_("g",_t),_("GG",b,o),_("gg",b,o),_("GGGG",bt,mt),_("gggg",bt,mt),_("GGGGG",w,v),_("ggggg",w,v),At(["gggg","ggggg","GGGG","GGGGG"],function(t,e,i,n){e[n.substr(0,2)]=d(t)}),At(["gg","GG"],function(t,e,i,n){e[n]=p.parseTwoDigitYear(t)}),n("Q",0,"Qo","quarter"),e("quarter","Q"),i("quarter",7),_("Q",pt),k("Q",function(t,e){e[T]=3*(d(t)-1)}),n("D",["DD",2],"Do","date"),e("date","D"),i("date",9),_("D",b),_("DD",b,o),_("Do",function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient}),k(["D","DD"],S),k("Do",function(t,e){e[S]=d(t.match(b)[0])});Kt=ot("Date",!0);n("DDD",["DDDD",3],"DDDo","dayOfYear"),e("dayOfYear","DDD"),i("dayOfYear",4),_("DDD",vt),_("DDDD",ft),k(["DDD","DDDD"],function(t,e,i){i._dayOfYear=d(t)}),n("m",["mm",2],0,"minute"),e("minute","m"),i("minute",14),_("m",b),_("mm",b,o),k(["m","mm"],E);var Qe,Jt=ot("Minutes",!1),bt=(n("s",["ss",2],0,"second"),e("second","s"),i("second",15),_("s",b),_("ss",b,o),k(["s","ss"],D),ot("Seconds",!1));for(n("S",0,0,function(){return~~(this.millisecond()/100)}),n(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),n(0,["SSS",3],0,"millisecond"),n(0,["SSSS",4],0,function(){return 10*this.millisecond()}),n(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),n(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),n(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),n(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),n(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),e("millisecond","ms"),i("millisecond",16),_("S",vt,pt),_("SS",vt,o),_("SSS",vt,ft),Qe="SSSS";Qe.length<=9;Qe+="S")_(Qe,wt);function Je(t,e){e[Lt]=d(1e3*("0."+t))}for(Qe="S";Qe.length<=9;Qe+="S")k(Qe,Je);mt=ot("Milliseconds",!1);n("z",0,0,"zoneAbbr"),n("zz",0,0,"zoneName");w=G.prototype;function Ke(t){return t}w.add=Mt,w.calendar=function(t,e){var i=He(t=t||O(),this).startOf("day"),i=p.calendarFormat(this,i)||"sameElse",e=e&&(r(e[i])?e[i].call(this,t):e[i]);return this.format(e||this.localeData().calendar(i,this,O(t)))},w.clone=function(){return new G(this)},w.diff=function(t,e,i){var n,o;return this.isValid()&&(t=He(t,this)).isValid()?(n=6e4*(t.utcOffset()-this.utcOffset()),"year"===(e=s(e))||"month"===e||"quarter"===e?(o=function(t,e){var i,n=12*(e.year()-t.year())+(e.month()-t.month()),o=t.clone().add(n,"months");t=e-o<0?(i=t.clone().add(n-1,"months"),(e-o)/(o-i)):(i=t.clone().add(1+n,"months"),(e-o)/(i-o));return-(n+t)||0}(this,t),"quarter"===e?o/=3:"year"===e&&(o/=12)):(t=this-t,o="second"===e?t/1e3:"minute"===e?t/6e4:"hour"===e?t/36e5:"day"===e?(t-n)/864e5:"week"===e?(t-n)/6048e5:t),i?o:a(o)):NaN},w.endOf=function(t){return void 0===(t=s(t))||"millisecond"===t?this:this.startOf(t="date"===t?"day":t).add(1,"isoWeek"===t?"week":t).subtract(1,"ms")},w.format=function(t){return t=t||(this.isUtc()?p.defaultFormatUtc:p.defaultFormat),t=ut(this,t),this.localeData().postformat(t)},w.from=function(t,e){return this.isValid()&&(y(t)&&t.isValid()||O(t).isValid())?$({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},w.fromNow=function(t){return this.from(O(),t)},w.to=function(t,e){return this.isValid()&&(y(t)&&t.isValid()||O(t).isValid())?$({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},w.toNow=function(t){return this.to(O(),t)},w.get=function(t){return r(this[t=s(t)])?this[t]():this},w.invalidAt=function(){return g(this).overflow},w.isAfter=function(t,e){return t=y(t)?t:O(t),!(!this.isValid()||!t.isValid())&&("millisecond"===(e=s(h(e)?"millisecond":e))?this.valueOf()>t.valueOf():t.valueOf()<this.clone().startOf(e).valueOf())},w.isBefore=function(t,e){return t=y(t)?t:O(t),!(!this.isValid()||!t.isValid())&&("millisecond"===(e=s(h(e)?"millisecond":e))?this.valueOf()<t.valueOf():this.clone().endOf(e).valueOf()<t.valueOf())},w.isBetween=function(t,e,i,n){return("("===(n=n||"()")[0]?this.isAfter(t,i):!this.isBefore(t,i))&&(")"===n[1]?this.isBefore(e,i):!this.isAfter(e,i))},w.isSame=function(t,e){var t=y(t)?t:O(t);return!(!this.isValid()||!t.isValid())&&("millisecond"===(e=s(e||"millisecond"))?this.valueOf()===t.valueOf():(t=t.valueOf(),this.clone().startOf(e).valueOf()<=t&&t<=this.clone().endOf(e).valueOf()))},w.isSameOrAfter=function(t,e){return this.isSame(t,e)||this.isAfter(t,e)},w.isSameOrBefore=function(t,e){return this.isSame(t,e)||this.isBefore(t,e)},w.isValid=function(){return Y(this)},w.lang=Qt,w.locale=Ge,w.localeData=Ve,w.max=yt,w.min=gt,w.parsingFlags=function(){return m({},g(this))},w.set=function(t,e){if("object"==typeof t)for(var i=function(t){var e,i=[];for(e in t)i.push({unit:e,priority:nt[e]});return i.sort(function(t,e){return t.priority-e.priority}),i}(t=it(t)),n=0;n<i.length;n++)this[i[n].unit](t[i[n].unit]);else if(r(this[t=s(t)]))return this[t](e);return this},w.startOf=function(t){switch(t=s(t)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===t&&this.weekday(0),"isoWeek"===t&&this.isoWeekday(1),"quarter"===t&&this.month(3*Math.floor(this.month()/3)),this},w.subtract=Nt,w.toArray=function(){return[this.year(),this.month(),this.date(),this.hour(),this.minute(),this.second(),this.millisecond()]},w.toObject=function(){return{years:this.year(),months:this.month(),date:this.date(),hours:this.hours(),minutes:this.minutes(),seconds:this.seconds(),milliseconds:this.milliseconds()}},w.toDate=function(){return new Date(this.valueOf())},w.toISOString=function(){var t;return this.isValid()?(t=this.clone().utc()).year()<0||9999<t.year()?ut(t,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):r(Date.prototype.toISOString)?this.toDate().toISOString():ut(t,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):null},w.inspect=function(){var t,e,i;return this.isValid()?(e="moment",t="",this.isLocal()||(e=0===this.utcOffset()?"moment.utc":"moment.parseZone",t="Z"),e="["+e+'("]',i=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",this.format(e+i+"-MM-DD[T]HH:mm:ss.SSS"+(t+'[")]'))):"moment.invalid(/* "+this._i+" */)"},w.toJSON=function(){return this.isValid()?this.toISOString():null},w.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},w.unix=function(){return Math.floor(this.valueOf()/1e3)},w.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},w.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},w.year=Bt,w.isLeapYear=function(){return Wt(this.year())},w.weekYear=function(t){return Ze.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},w.isoWeekYear=function(t){return Ze.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)},w.quarter=w.quarters=function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},w.month=Ht,w.daysInMonth=function(){return jt(this.year(),this.month())},w.week=w.weeks=function(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")},w.isoWeek=w.isoWeeks=function(t){var e=Xt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")},w.weeksInYear=function(){var t=this.localeData()._week;return Zt(this.year(),t.dow,t.doy)},w.isoWeeksInYear=function(){return Zt(this.year(),1,4)},w.date=Kt,w.day=w.days=function(t){var e,i,n;return this.isValid()?(e=this._isUTC?this._d.getUTCDay():this._d.getDay(),null!=t?(i=t,n=this.localeData(),t="string"!=typeof i?i:isNaN(i)?"number"==typeof(i=n.weekdaysParse(i))?i:null:parseInt(i,10),this.add(t-e,"d")):e):null!=t?this:NaN},w.weekday=function(t){var e;return this.isValid()?(e=(this.day()+7-this.localeData()._week.dow)%7,null==t?e:this.add(t-e,"d")):null!=t?this:NaN},w.isoWeekday=function(t){var e,i;return this.isValid()?null!=t?(e=t,i=this.localeData(),i="string"==typeof e?i.weekdaysParse(e)%7||7:isNaN(e)?null:e,this.day(this.day()%7?i:i-7)):this.day()||7:null!=t?this:NaN},w.dayOfYear=function(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")},w.hour=w.hours=Tt,w.minute=w.minutes=Jt,w.second=w.seconds=bt,w.millisecond=w.milliseconds=mt,w.utcOffset=function(t,e,i){var n,o=this._offset||0;if(!this.isValid())return null!=t?this:NaN;if(null==t)return this._isUTC?o:Fe(this);if("string"==typeof t){if(null===(t=Ie(xt,t)))return this}else Math.abs(t)<16&&!i&&(t*=60);return!this._isUTC&&e&&(n=Fe(this)),this._offset=t,this._isUTC=!0,null!=n&&this.add(n,"m"),o!==t&&(!e||this._changeInProgress?Ue(this,$(t-o,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,p.updateOffset(this,!0),this._changeInProgress=null)),this},w.utc=function(t){return this.utcOffset(0,t)},w.local=function(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t)&&this.subtract(Fe(this),"m"),this},w.parseZone=function(){var t;return null!=this._tzm?this.utcOffset(this._tzm,!1,!0):"string"==typeof this._i&&(null!=(t=Ie(kt,this._i))?this.utcOffset(t):this.utcOffset(0,!0)),this},w.hasAlignedHourOffset=function(t){return!!this.isValid()&&(t=t?O(t).utcOffset():0,(this.utcOffset()-t)%60==0)},w.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},w.isLocal=function(){return!!this.isValid()&&!this._isUTC},w.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},w.isUtc=Re,w.isUTC=Re,w.zoneAbbr=function(){return this._isUTC?"UTC":""},w.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},w.dates=t("dates accessor is deprecated. Use date instead.",Kt),w.months=t("months accessor is deprecated. Use month instead",Ht),w.years=t("years accessor is deprecated. Use year instead",Bt),w.zone=t("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(t,e){return null!=t?(this.utcOffset(t="string"!=typeof t?-t:t,e),this):-this.utcOffset()}),w.isDSTShifted=t("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){var t,e;return h(this._isDSTShifted)&&(z(t={},this),(t=De(t))._a?(e=(t._isUTC?c:O)(t._a),this._isDSTShifted=this.isValid()&&0<V(t._a,e.toArray())):this._isDSTShifted=!1),this._isDSTShifted});v=K.prototype;function ti(t,e,i,n){var o=fe(),n=c().set(n,e);return o[i](n,t)}function ei(t,e,i){if(H(t)&&(e=t,t=void 0),t=t||"",null!=e)return ti(t,e,i,"month");for(var n=[],o=0;o<12;o++)n[o]=ti(t,o,i,"month");return n}function ii(t,e,i,n){e=("boolean"==typeof t?H(e)&&(i=e,e=void 0):(e=t,t=!1,H(i=e)&&(i=e,e=void 0)),e||"");var o=fe(),s=t?o._week.dow:0;if(null!=i)return ti(e,(i+s)%7,n,"day");for(var r=[],a=0;a<7;a++)r[a]=ti(e,(a+s)%7,n,"day");return r}v.calendar=function(t,e,i){return r(t=this._calendar[t]||this._calendar.sameElse)?t.call(e,i):t},v.longDateFormat=function(t){var e=this._longDateFormat[t],i=this._longDateFormat[t.toUpperCase()];return e||!i?e:(this._longDateFormat[t]=i.replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t])},v.invalidDate=function(){return this._invalidDate},v.ordinal=function(t){return this._ordinal.replace("%d",t)},v.preparse=Ke,v.postformat=Ke,v.relativeTime=function(t,e,i,n){var o=this._relativeTime[i];return r(o)?o(t,e,i,n):o.replace(/%d/i,t)},v.pastFuture=function(t,e){return r(t=this._relativeTime[0<t?"future":"past"])?t(e):t.replace(/%s/i,e)},v.set=function(t){var e,i;for(i in t)r(e=t[i])?this[i]=e:this["_"+i]=e;this._config=t,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},v.months=function(t,e){return t?(u(this._months)?this._months:this._months[(this._months.isFormat||Pt).test(e)?"format":"standalone"])[t.month()]:u(this._months)?this._months:this._months.standalone},v.monthsShort=function(t,e){return t?(u(this._monthsShort)?this._monthsShort:this._monthsShort[Pt.test(e)?"format":"standalone"])[t.month()]:u(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},v.monthsParse=function(t,e,i){var n,o;if(this._monthsParseExact)return function(t,e,i){var n,o,s,t=t.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],n=0;n<12;++n)s=c([2e3,n]),this._shortMonthsParse[n]=this.monthsShort(s,"").toLocaleLowerCase(),this._longMonthsParse[n]=this.months(s,"").toLocaleLowerCase();return i?"MMM"===e?-1!==(o=A.call(this._shortMonthsParse,t))?o:null:-1!==(o=A.call(this._longMonthsParse,t))?o:null:"MMM"===e?-1!==(o=A.call(this._shortMonthsParse,t))||-1!==(o=A.call(this._longMonthsParse,t))?o:null:-1!==(o=A.call(this._longMonthsParse,t))||-1!==(o=A.call(this._shortMonthsParse,t))?o:null}.call(this,t,e,i);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),n=0;n<12;n++){if(o=c([2e3,n]),i&&!this._longMonthsParse[n]&&(this._longMonthsParse[n]=new RegExp("^"+this.months(o,"").replace(".","")+"$","i"),this._shortMonthsParse[n]=new RegExp("^"+this.monthsShort(o,"").replace(".","")+"$","i")),i||this._monthsParse[n]||(o="^"+this.months(o,"")+"|^"+this.monthsShort(o,""),this._monthsParse[n]=new RegExp(o.replace(".",""),"i")),i&&"MMMM"===e&&this._longMonthsParse[n].test(t))return n;if(i&&"MMM"===e&&this._shortMonthsParse[n].test(t))return n;if(!i&&this._monthsParse[n].test(t))return n}},v.monthsRegex=function(t){return this._monthsParseExact?(f(this,"_monthsRegex")||qt.call(this),t?this._monthsStrictRegex:this._monthsRegex):(f(this,"_monthsRegex")||(this._monthsRegex=Rt),this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex)},v.monthsShortRegex=function(t){return this._monthsParseExact?(f(this,"_monthsRegex")||qt.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):(f(this,"_monthsShortRegex")||(this._monthsShortRegex=Ft),this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex)},v.week=function(t){return Xt(t,this._week.dow,this._week.doy).week},v.firstDayOfYear=function(){return this._week.doy},v.firstDayOfWeek=function(){return this._week.dow},v.weekdays=function(t,e){return t?(u(this._weekdays)?this._weekdays:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"])[t.day()]:u(this._weekdays)?this._weekdays:this._weekdays.standalone},v.weekdaysMin=function(t){return t?this._weekdaysMin[t.day()]:this._weekdaysMin},v.weekdaysShort=function(t){return t?this._weekdaysShort[t.day()]:this._weekdaysShort},v.weekdaysParse=function(t,e,i){var n,o;if(this._weekdaysParseExact)return function(t,e,i){var n,o,s,t=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],n=0;n<7;++n)s=c([2e3,1]).day(n),this._minWeekdaysParse[n]=this.weekdaysMin(s,"").toLocaleLowerCase(),this._shortWeekdaysParse[n]=this.weekdaysShort(s,"").toLocaleLowerCase(),this._weekdaysParse[n]=this.weekdays(s,"").toLocaleLowerCase();return i?"dddd"===e?-1!==(o=A.call(this._weekdaysParse,t))?o:null:"ddd"===e?-1!==(o=A.call(this._shortWeekdaysParse,t))?o:null:-1!==(o=A.call(this._minWeekdaysParse,t))?o:null:"dddd"===e?-1!==(o=A.call(this._weekdaysParse,t))||-1!==(o=A.call(this._shortWeekdaysParse,t))||-1!==(o=A.call(this._minWeekdaysParse,t))?o:null:"ddd"===e?-1!==(o=A.call(this._shortWeekdaysParse,t))||-1!==(o=A.call(this._weekdaysParse,t))||-1!==(o=A.call(this._minWeekdaysParse,t))?o:null:-1!==(o=A.call(this._minWeekdaysParse,t))||-1!==(o=A.call(this._weekdaysParse,t))||-1!==(o=A.call(this._shortWeekdaysParse,t))?o:null}.call(this,t,e,i);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),n=0;n<7;n++){if(o=c([2e3,1]).day(n),i&&!this._fullWeekdaysParse[n]&&(this._fullWeekdaysParse[n]=new RegExp("^"+this.weekdays(o,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[n]=new RegExp("^"+this.weekdaysShort(o,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[n]=new RegExp("^"+this.weekdaysMin(o,"").replace(".",".?")+"$","i")),this._weekdaysParse[n]||(o="^"+this.weekdays(o,"")+"|^"+this.weekdaysShort(o,"")+"|^"+this.weekdaysMin(o,""),this._weekdaysParse[n]=new RegExp(o.replace(".",""),"i")),i&&"dddd"===e&&this._fullWeekdaysParse[n].test(t))return n;if(i&&"ddd"===e&&this._shortWeekdaysParse[n].test(t))return n;if(i&&"dd"===e&&this._minWeekdaysParse[n].test(t))return n;if(!i&&this._weekdaysParse[n].test(t))return n}},v.weekdaysRegex=function(t){return this._weekdaysParseExact?(f(this,"_weekdaysRegex")||ne.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(f(this,"_weekdaysRegex")||(this._weekdaysRegex=te),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)},v.weekdaysShortRegex=function(t){return this._weekdaysParseExact?(f(this,"_weekdaysRegex")||ne.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(f(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=ee),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},v.weekdaysMinRegex=function(t){return this._weekdaysParseExact?(f(this,"_weekdaysRegex")||ne.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(f(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=ie),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},v.isPM=function(t){return"p"===(t+"").toLowerCase().charAt(0)},v.meridiem=function(t,e,i){return 11<t?i?"pm":"PM":i?"am":"AM"},he("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1===d(t%100/10)?"th":1==e?"st":2==e?"nd":3==e?"rd":"th")}}),p.lang=t("moment.lang is deprecated. Use moment.locale instead.",he),p.langData=t("moment.langData is deprecated. Use moment.localeData instead.",fe);var M=Math.abs;function ni(t,e,i,n){e=$(e,i);return t._milliseconds+=n*e._milliseconds,t._days+=n*e._days,t._months+=n*e._months,t._bubble()}function oi(t){return t<0?Math.floor(t):Math.ceil(t)}function si(t){return 4800*t/146097}function ri(t){return 146097*t/4800}function ai(t){return function(){return this.as(t)}}pt=ai("ms"),o=ai("s"),vt=ai("m"),ft=ai("h"),Mt=ai("d"),yt=ai("w"),gt=ai("M"),Nt=ai("y");function li(t){return function(){return this.isValid()?this._data[t]:NaN}}Tt=li("milliseconds"),Jt=li("seconds"),bt=li("minutes"),mt=li("hours"),Kt=li("days"),Bt=li("months"),v=li("years");var ci=Math.round,j={ss:44,s:45,m:45,h:22,d:26,M:11};function di(t,e,i){var n=$(t).abs(),o=ci(n.as("s")),s=ci(n.as("m")),r=ci(n.as("h")),a=ci(n.as("d")),l=ci(n.as("M")),n=ci(n.as("y")),o=(o<=j.ss?["s",o]:o<j.s&&["ss",o])||(s<=1?["m"]:s<j.m&&["mm",s])||(r<=1?["h"]:r<j.h&&["hh",r])||(a<=1?["d"]:a<j.d&&["dd",a])||(l<=1?["M"]:l<j.M&&["MM",l])||(n<=1?["y"]:["yy",n]);return o[2]=e,o[3]=0<+t,o[4]=i,function(t,e,i,n,o){return o.relativeTime(e||1,!!i,t,n)}.apply(null,o)}var ui=Math.abs;function hi(){var t,e,i,n,o,s,r;return this.isValid()?(s=ui(this._milliseconds)/1e3,i=ui(this._days),e=ui(this._months),o=a(s/60),n=a(o/60),s%=60,o%=60,t=a(e/12),e=e%=12,i=i,n=n,o=o,s=s,(r=this.asSeconds())?(r<0?"-":"")+"P"+(t?t+"Y":"")+(e?e+"M":"")+(i?i+"D":"")+(n||o||s?"T":"")+(n?n+"H":"")+(o?o+"M":"")+(s?s+"S":""):"P0D"):this.localeData().invalidDate()}var P=$e.prototype;return P.isValid=function(){return this._isValid},P.abs=function(){var t=this._data;return this._milliseconds=M(this._milliseconds),this._days=M(this._days),this._months=M(this._months),t.milliseconds=M(t.milliseconds),t.seconds=M(t.seconds),t.minutes=M(t.minutes),t.hours=M(t.hours),t.months=M(t.months),t.years=M(t.years),this},P.add=function(t,e){return ni(this,t,e,1)},P.subtract=function(t,e){return ni(this,t,e,-1)},P.as=function(t){if(!this.isValid())return NaN;var e,i,n=this._milliseconds;if("month"===(t=s(t))||"year"===t)return e=this._days+n/864e5,i=this._months+si(e),"month"===t?i:i/12;switch(e=this._days+Math.round(ri(this._months)),t){case"week":return e/7+n/6048e5;case"day":return e+n/864e5;case"hour":return 24*e+n/36e5;case"minute":return 1440*e+n/6e4;case"second":return 86400*e+n/1e3;case"millisecond":return Math.floor(864e5*e)+n;default:throw new Error("Unknown unit "+t)}},P.asMilliseconds=pt,P.asSeconds=o,P.asMinutes=vt,P.asHours=ft,P.asDays=Mt,P.asWeeks=yt,P.asMonths=gt,P.asYears=Nt,P.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*d(this._months/12):NaN},P._bubble=function(){var t=this._milliseconds,e=this._days,i=this._months,n=this._data;return 0<=t&&0<=e&&0<=i||t<=0&&e<=0&&i<=0||(t+=864e5*oi(ri(i)+e),i=e=0),n.milliseconds=t%1e3,t=a(t/1e3),n.seconds=t%60,t=a(t/60),n.minutes=t%60,t=a(t/60),n.hours=t%24,e+=a(t/24),i+=t=a(si(e)),e-=oi(ri(t)),t=a(i/12),i%=12,n.days=e,n.months=i,n.years=t,this},P.get=function(t){return t=s(t),this.isValid()?this[t+"s"]():NaN},P.milliseconds=Tt,P.seconds=Jt,P.minutes=bt,P.hours=mt,P.days=Kt,P.weeks=function(){return a(this.days()/7)},P.months=Bt,P.years=v,P.humanize=function(t){var e,i;return this.isValid()?(e=this.localeData(),i=di(this,!t,e),t&&(i=e.pastFuture(+this,i)),e.postformat(i)):this.localeData().invalidDate()},P.toISOString=hi,P.toString=hi,P.toJSON=hi,P.locale=Ge,P.localeData=Ve,P.toIsoString=t("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",hi),P.lang=Qt,n("X",0,0,"unix"),n("x",0,0,"valueOf"),_("x",_t),_("X",/[+-]?\d+(\.\d{1,3})?/),k("X",function(t,e,i){i._d=new Date(1e3*parseFloat(t,10))}),k("x",function(t,e,i){i._d=new Date(d(t))}),p.version="2.18.1",N=O,p.fn=w,p.min=function(){return Le("isBefore",[].slice.call(arguments,0))},p.max=function(){return Le("isAfter",[].slice.call(arguments,0))},p.now=function(){return Date.now?Date.now():+new Date},p.utc=c,p.unix=function(t){return O(1e3*t)},p.months=function(t,e){return ei(t,e,"months")},p.isDate=F,p.locale=he,p.invalid=W,p.duration=$,p.isMoment=y,p.weekdays=function(t,e,i){return ii(t,e,i,"weekdays")},p.parseZone=function(){return O.apply(null,arguments).parseZone()},p.localeData=fe,p.isDuration=Me,p.monthsShort=function(t,e){return ei(t,e,"monthsShort")},p.weekdaysMin=function(t,e,i){return ii(t,e,i,"weekdaysMin")},p.defineLocale=pe,p.updateLocale=function(t,e){var i;return null!=e?(i=le,(i=new K(e=J(i=null!=L[t]?L[t]._config:i,e))).parentLocale=L[t],L[t]=i,he(t)):null!=L[t]&&(null!=L[t].parentLocale?L[t]=L[t].parentLocale:null!=L[t]&&delete L[t]),L[t]},p.locales=function(){return tt(L)},p.weekdaysShort=function(t,e,i){return ii(t,e,i,"weekdaysShort")},p.normalizeUnits=s,p.relativeTimeRounding=function(t){return void 0===t?ci:"function"==typeof t&&(ci=t,!0)},p.relativeTimeThreshold=function(t,e){return void 0!==j[t]&&(void 0===e?j[t]:(j[t]=e,"s"===t&&(j.ss=e-1),!0))},p.calendarFormat=function(t,e){return(t=t.diff(e,"days",!0))<-6?"sameElse":t<-1?"lastWeek":t<0?"lastDay":t<1?"sameDay":t<2?"nextDay":t<7?"nextWeek":"sameElse"},p.prototype=w,p}),!function(t,e){"object"==typeof exports&&"undefined"!=typeof module&&"function"==typeof require?e(require("../moment")):"function"==typeof define&&define.amd?define(["../moment"],e):e(t.moment)}(this,function(t){"use strict";return t.defineLocale("pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"poucos segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº"})}),!function(t,e){"object"==typeof exports&&"undefined"!=typeof module&&"function"==typeof require?e(require("../moment")):"function"==typeof define&&define.amd?define(["../moment"],e):e(t.moment)}(this,function(t){"use strict";var i="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");return t.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(t,e){return t?(/-MMM-/.test(e)?n:i)[t.month()]:i},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}),{modal_id:null,form_id:null,url:"/",method:"POST",submit_btn_id:null,has_captcha:!1,captcha_key:null,captcha_theme:"light",captcha_id:null,email_confirm_modal_id:"#modal_confirm",success_message:null,error_message:null,rcaptcha:null,submit:function(){var e=this;$.ajax({type:e.method,url:e.url,data:$(e.form_id).serialize(),success:function(t){$.each(t.fields,function(t,e){$("#"+e).parent().removeClass("has-error"),$("#"+e+"_error").html("")}),!1===t.sent?(!0===e.has_captcha&&($(e.submit_btn_id).attr("disabled","disabled"),e.render_captcha()),$.each(t.message,function(t,e){$("#"+t).parent().addClass("has-error"),$("#"+t+"_error").html(e)})):($(e.modal_id).modal("toggle"),$(".midGlyph").addClass("success"),$(".midGlyph").html(e.success_message),$(e.email_confirm_modal_id).modal("show"))},error:function(t){$(e.modal_id).modal("toggle"),$(".midGlyph").removeClass("success").toggleClass("unsuccess"),$(".midGlyph").html(e.error_message),$(e.email_confirm_modal_id).modal("show")}})},recaptcha_callback:function(){$(this.submit_btn_id).removeAttr("disabled")},registry_recaptcha_modal:function(){var t=this;$(this.modal_id).on("show.bs.modal",function(){setTimeout(function(){t.render_captcha(t.captcha_id,t.captcha_key,t.captcha_theme)},100)})},render_captcha:function(t,e,i){this.render_captcha&&$(this.submit_btn_id).attr("disabled","disabled"),null===this.rcaptcha?this.rcaptcha=grecaptcha.render(t,{sitekey:e,theme:i,callback:this.recaptcha_callback.bind(this)}):grecaptcha.reset(this.rcaptcha)},init:function(t,e,i,n,o,s,r,a,l,c,d,u){this.modal_id=t,this.form_id=e,this.url=i,this.method=n,this.submit_btn_id=o,this.has_captcha=s,this.captcha_key=r,this.captcha_theme=l,this.captcha_id=a,this.email_confirm_modal_id=c,this.success_message=d,this.error_message=u,!(this.rcaptcha=null)===this.has_captcha&&this.registry_recaptcha_modal();var h=this;return $(this.form_id).submit(function(t){t.preventDefault(),h.submit()}),this}}); +//# sourceMappingURL=../maps/scielo-bundle-min.js.map \ No newline at end of file diff --git a/markup_doc/static/js/xref-button.js b/markup_doc/static/js/xref-button.js new file mode 100644 index 0000000..5950941 --- /dev/null +++ b/markup_doc/static/js/xref-button.js @@ -0,0 +1,530 @@ +function getCookie(name) { + let cookieValue = null; + if (document.cookie && document.cookie !== '') { + const cookies = document.cookie.split(';'); + for (let i = 0; i < cookies.length; i++) { + const cookie = cookies[i].trim(); + // Verifica si el cookie empieza con el nombre que queremos + if (cookie.substring(0, name.length + 1) === (name + '=')) { + cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); + break; + } + } + } + return cookieValue; +} + +function getCSRFTokenFromInput() { + const input = document.querySelector('input[name="csrfmiddlewaretoken"]'); + return input ? input.value : null; +} + +function get_cite(text){ + const path = window.location.pathname; + const match = path.match(/edit\/(\d+)\//); // Extrae el número entre 'edit/' y el siguiente '/' + var pk_register = parseInt(match[1], 10); + + return fetch('/admin/extract-citation/', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': getCSRFTokenFromInput() + }, + body: JSON.stringify({ + text: text, + pk: pk_register + }) + }) + .then(response => response.json()) + .then(data => { + console.log("Cita extraída:", data); + return data.refid; + // Aquí podrías hacer algo con los resultados + }) + .catch(error => { + console.error("Error al extraer citas:", error); + }); +} + +//document.addEventListener("DOMContentLoaded", function () { +function addXrefButtonToTextareas() { + //var tab = document.querySelector('a[role="tab"][aria-selected="true"]'); + //if(tab.id !== 'tab-label-body'){ + // return false; + //} + + var frontTab = document.querySelector('#tab-body'); + + if (frontTab) { + + // Espera a que el campo se cargue + frontTab.querySelectorAll('textarea').forEach(function (textarea) { + if(textarea.value.length < 50){ + return false; + } + + // Evita insertar el botón más de una vez + if (textarea.dataset.xrefButtonAdded === 'true') return; + + // Marca el textarea como procesado + textarea.dataset.xrefButtonAdded = 'true'; + + // Crea el botón + const button = document.createElement('button'); + button.type = 'button'; + button.innerText = 'Add <xref>'; + button.style.margin = '5px'; + + button.style.padding = "4px 8px"; + button.style.cursor = "pointer"; + button.style.marginLeft = "auto"; + + button.style.backgroundColor = "#007d7e"; // fondo azul (Bootstrap-like) + button.style.color = "white"; + button.style.fontWeight = "bold"; + + button.addEventListener("mouseover", () => { + button.style.backgroundColor = "#006465"; + }); + button.addEventListener("mouseout", () => { + button.style.backgroundColor = "#007d7e"; + }); + + + // Crea el botón + const btn2 = document.createElement('button'); + btn2.type = 'button'; + btn2.innerText = "Delete all <xref>"; + btn2.style.margin = '5px'; + + btn2.style.padding = "4px 8px"; + btn2.style.cursor = "pointer"; + btn2.style.marginLeft = "auto"; + + btn2.style.backgroundColor = "#007d7e"; // fondo azul (Bootstrap-like) + btn2.style.color = "white"; + btn2.style.fontWeight = "bold"; + + btn2.addEventListener("mouseover", () => { + btn2.style.backgroundColor = "#006465"; + }); + btn2.addEventListener("mouseout", () => { + btn2.style.backgroundColor = "#007d7e"; + }); + + // Acción al hacer clic + button.addEventListener('click', function () { + const start = textarea.selectionStart; + const end = textarea.selectionEnd; + const selectedText = textarea.value.substring(start, end); + + if (!selectedText) { + alert('Selecciona un texto para aplicar <xref>'); + return; + } + + var textClean = selectedText.replace('[style name="italic"]','').replace('[/style]',''); + //var cite = get_cite(textClean); + + get_cite(textClean).then(cite => { + // aquí ya tienes el valor real + const xrefWrapped = `<xref ref-type="bibr" rid="${cite}">${selectedText}</xref>`; + const newText = textarea.value.slice(0, start) + xrefWrapped + textarea.value.slice(end); + textarea.value = newText; + }); + + }); + + btn2.addEventListener('click', function () { + // Reemplaza <xref ...>...</xref> por solo su contenido + textarea.value = textarea.value.replace(/<xref\b[^>]*>(.*?)<\/xref>/gi, '$1'); + }); + + // Agrega el botón justo después del textarea + textarea.parentNode.insertBefore(button, textarea.nextSibling); + + textarea.parentNode.insertBefore(btn2, textarea.nextSibling); + }); + } +} +//}); + +// Inicial: aplica en los visibles al cargar +document.addEventListener('DOMContentLoaded', function () { + addXrefButtonToTextareas(); +}); + + +document.addEventListener("DOMContentLoaded", function () { + document.querySelectorAll('.w-tabs__tab').forEach(function(tabLink) { + tabLink.addEventListener('click', function() { + // Espera a que el contenido del tab se muestre + setTimeout(function () { + // ID del contenido al que apunta el tab + const tabContentId = tabLink.getAttribute('href'); // por ejemplo: "#tab-xml" + const tabContent = document.querySelector(tabContentId); + + if (tabContent) { + addXrefButtonToTextareas(); + } + }, 100); // delay leve para permitir render + }); + }); +}); + + +document.addEventListener("DOMContentLoaded", function () { + var path = window.location.pathname; + // Busca el campo por su ID (ajústalo si es diferente) + if ( path.indexOf('markupxml/edit') == -1 ){ + return false; + } + var ids = ['collection', 'journal_title', 'short_title', 'title_nlm', 'acronym', 'issn', 'pissn', 'eissn', 'pubname'] + $.each(ids, function(i, val){ + const collectionField = document.querySelector('#id_'+val); + if (collectionField) { + collectionField.setAttribute('readonly', true); // Solo lectura + collectionField.classList.add('disabled'); // Para aplicar estilo visual + // Agregar estilos Wagtail para apariencia "inactiva" + collectionField.style.backgroundColor = 'var(--w-color-surface-field-inactive)'; + collectionField.style.borderColor = 'var(--w-color-border-field-inactive)'; + collectionField.style.color = 'var(--w-color-text-placeholder)'; + collectionField.style.cursor = 'not-allowed'; + } + }); +}); + +document.addEventListener("DOMContentLoaded", function () { + const journalInput = document.querySelector("#id_journal"); + + //if (!journalInput) return; + + // MutationObserver para detectar cambios en la selección del widget + const journalWrapper = document.querySelector('[data-autocomplete-input-id="id_journal"]'); + + if (!journalWrapper) return; + + const observer = new MutationObserver(() => { + // Buscar el input hidden que contiene el valor + const hiddenInput = journalWrapper.querySelector('input[type="hidden"][name="journal"]'); + if (!hiddenInput) return; + + let journalValue; + + try { + journalValue = JSON.parse(hiddenInput.value); + } catch (e) { + return; + } + + if (journalValue && journalValue.pk) { + + fetch('/admin/get_journal/', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': getCSRFTokenFromInput() + }, + body: JSON.stringify({ + pk: journalValue.pk + }) + }) + .then(response => response.json()) + .then(data => { + console.log(data); + $('#id_journal_title').val(data.journal_title); + $('#id_short_title').val(data.short_title); + $('#id_title_nlm').val(data.title_nlm); + $('#id_acronym').val(data.acronym); + $('#id_issn').val(data.issn); + $('#id_pissn').val(data.pissn); + $('#id_eissn').val(data.eissn); + $('#id_pubname').val(data.pubname); + }) + .catch(error => { + console.error("Error:", error); + $('#id_journal_title').val(""); + $('#id_short_title').val(""); + $('#id_title_nlm').val(""); + $('#id_acronym').val(""); + $('#id_issn').val(""); + $('#id_pissn').val(""); + $('#id_eissn').val(""); + $('#id_pubname').val(""); + }); + + }else{ + $('#id_journal_title').val(""); + $('#id_short_title').val(""); + $('#id_title_nlm').val(""); + $('#id_acronym').val(""); + $('#id_issn').val(""); + $('#id_pissn').val(""); + $('#id_eissn').val(""); + $('#id_pubname').val(""); + } + }); + + observer.observe(journalWrapper, { childList: true, subtree: true }); +}); + + +function get_zip() { + // Extraer el pk desde /edit/<id>/ + const path = window.location.pathname; + const match = path.match(/edit\/(\d+)\//); + const pk_register = match ? parseInt(match[1], 10) : null; + if (!pk_register) { + console.error("No se pudo obtener el ID del registro desde la URL."); + return; + } + + return fetch('/admin/download-zip/', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': getCSRFTokenFromInput(), // asegúrate de que esta func devuelva el token correcto + 'Accept': 'application/zip' // opcional, para claridad + }, + body: JSON.stringify({ pk: pk_register }) + }) + .then(async (response) => { + if (!response.ok) { + // Si el backend a veces devuelve JSON de error, intenta leerlo: + let errorText = `Error ${response.status}`; + try { + const data = await response.json(); + if (data && data.error) errorText += `: ${data.error}`; + } catch { + // Si no era JSON, lee como texto + try { + errorText += `: ${await response.text()}`; + } catch {} + } + throw new Error(errorText); + } + + // Leer el ZIP como Blob + const blob = await response.blob(); + + // Intentar extraer filename del header Content-Disposition + let filename = "archivo.zip"; + const cd = response.headers.get('Content-Disposition'); + if (cd) { + // ej: attachment; filename="article_123.zip" + const match = cd.match(/filename\*?=(?:UTF-8'')?"?([^\";]+)/i); + if (match && match[1]) { + filename = decodeURIComponent(match[1].replace(/\"/g, '')); + } + } + + // Crear un Object URL y disparar descarga + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.style.display = 'none'; + a.href = url; + a.download = filename; // sugiere el nombre + document.body.appendChild(a); + a.click(); + // Limpieza + URL.revokeObjectURL(url); + a.remove(); + }) + .catch((error) => { + console.error("Error al descargar el ZIP:", error); + alert("No se pudo descargar el ZIP. " + error.message); + }); + } + + function openPreviewHTMLFetch() { + // Extraer el pk desde /edit/<id>/ + const path = window.location.pathname; + const match = path.match(/edit\/(\d+)\//); + const pk_register = match ? parseInt(match[1], 10) : null; + if (!pk_register) { + console.error("No se pudo obtener el ID del registro desde la URL."); + return; + } + + const w = window.open('', '_blank'); + fetch('/admin/preview-html/', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': getCSRFTokenFromInput(), + 'Accept': 'text/html' + }, + body: JSON.stringify({ pk: pk_register }) + }) + .then(r => { + if (!r.ok) throw new Error('Error ' + r.status); + return r.text(); + }) + .then(html => { + w.document.open(); + w.document.write(html); + w.document.close(); + }) + .catch(err => { + w.close(); + alert('No se pudo abrir la vista previa: ' + err.message); + }); + } + + + function openPrettyXML() { + // Extraer el pk desde /edit/<id>/ + const path = window.location.pathname; + const match = path.match(/edit\/(\d+)\//); + const pk_register = match ? parseInt(match[1], 10) : null; + if (!pk_register) { + console.error("No se pudo obtener el ID del registro desde la URL."); + return; + } + + const w = window.open('', '_blank'); + fetch('/admin/pretty-xml/', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRFToken': getCSRFTokenFromInput(), + 'Accept': 'text/xml' + }, + body: JSON.stringify({ pk: pk_register }) + }) + .then(r => { + if (!r.ok) throw new Error('Error ' + r.status); + return r.text(); + }) + .then(html => { + w.document.open(); + w.document.write(html); + w.document.close(); + }) + .catch(err => { + w.close(); + alert('No se pudo abrir la vista previa: ' + err.message); + }); + } + + +(function() { + + function createXrefButton(textarea) { + // Evita duplicados + if (textarea.dataset.xrefButtonAdded === "true") return; + + // Marca como procesado + textarea.dataset.xrefButtonAdded = "true"; + + // Contenedor estilo "toolbar" (opcional) + const bar = document.createElement("div"); + bar.style.display = "flex"; + bar.style.gap = "8px"; + bar.style.alignItems = "center"; + bar.style.marginBottom = "6px"; + + // Botón + const btn = document.createElement("button"); + btn.type = "button"; + btn.textContent = "Download ZIP"; + btn.style.padding = "4px 8px"; + btn.style.cursor = "pointer"; + btn.style.marginLeft = "auto"; + + btn.style.backgroundColor = "#007d7e"; // fondo azul (Bootstrap-like) + btn.style.color = "white"; + btn.style.fontWeight = "bold"; + + btn.addEventListener("mouseover", () => { + btn.style.backgroundColor = "#006465"; + }); + btn.addEventListener("mouseout", () => { + btn.style.backgroundColor = "#007d7e"; + }); + + bar.appendChild(btn); + + + // Botón 2 + const btn2 = document.createElement("button"); + btn2.type = "button"; + btn2.textContent = "Preview HTML"; + btn2.style.padding = "4px 8px"; + btn2.style.cursor = "pointer"; + //btn2.style.marginLeft = "auto"; + + btn2.style.backgroundColor = "#007d7e"; // fondo azul (Bootstrap-like) + btn2.style.color = "white"; + btn2.style.fontWeight = "bold"; + + btn2.addEventListener("mouseover", () => { + btn2.style.backgroundColor = "#006465"; + }); + btn2.addEventListener("mouseout", () => { + btn2.style.backgroundColor = "#007d7e"; + }); + + bar.appendChild(btn2); + + + // Botón 3 + const btn3 = document.createElement("button"); + btn3.type = "button"; + btn3.textContent = "Pretty XML"; + btn3.style.padding = "4px 8px"; + btn3.style.cursor = "pointer"; + //btn2.style.marginLeft = "auto"; + + btn3.style.backgroundColor = "#007d7e"; // fondo azul (Bootstrap-like) + btn3.style.color = "white"; + btn3.style.fontWeight = "bold"; + + btn3.addEventListener("mouseover", () => { + btn2.style.backgroundColor = "#006465"; + }); + btn3.addEventListener("mouseout", () => { + btn3.style.backgroundColor = "#007d7e"; + }); + + bar.appendChild(btn3); + + // Inserta la barra **antes** del textarea (o sea, arriba) + textarea.parentNode.insertBefore(bar, textarea); + + // Lógica de click + btn.addEventListener("click", async function() { + + get_zip() + }); + + // Lógica de click + btn2.addEventListener("click", async function() { + + openPreviewHTMLFetch() + }); + + // Lógica de click + btn3.addEventListener("click", async function() { + + openPrettyXML() + }); + } + + // Intenta inmediatamente si ya está en el DOM + function tryAttach() { + const ta = document.getElementById("id_text_xml"); + if (ta) createXrefButton(ta); + } + + // Observa por si el textarea aparece más tarde o se re-renderiza + const observer = new MutationObserver(() => tryAttach()); + observer.observe(document.documentElement, { childList: true, subtree: true }); + + // También en DOMContentLoaded por si basta + document.addEventListener("DOMContentLoaded", tryAttach); + + // Llama una vez por si ya está listo + tryAttach(); + })(); + diff --git a/markup_doc/static/xsl/jats-html.xsl b/markup_doc/static/xsl/jats-html.xsl new file mode 100644 index 0000000..e35215a --- /dev/null +++ b/markup_doc/static/xsl/jats-html.xsl @@ -0,0 +1,4028 @@ +<?xml version="1.0"?> +<!-- ============================================================= --> +<!-- MODULE: HTML Preview of NISO JATS Publishing 1.0 XML --> +<!-- DATE: May-June 2012 --> +<!-- --> +<!-- ============================================================= --> + +<!-- ============================================================= --> +<!-- SYSTEM: NCBI Archiving and Interchange Journal Articles --> +<!-- --> +<!-- PURPOSE: Provide an HTML preview of a journal article, --> +<!-- in a form suitable for reading. --> +<!-- --> +<!-- PROCESSOR DEPENDENCIES: --> +<!-- None: standard XSLT 1.0 --> +<!-- Tested using Saxon 6.5, Tranformiix (Firefox), --> +<!-- Saxon 9.4.0.3 --> +<!-- --> +<!-- COMPONENTS REQUIRED: --> +<!-- 1) This stylesheet --> +<!-- 2) CSS styles defined in jats-preview.css --> +<!-- (to be placed with the results) --> +<!-- --> +<!-- INPUT: An XML document valid to (any of) the --> +<!-- NISO JATS 1.0, NLM/NCBI Journal Publishing 3.0, --> +<!-- or NLM/NCBI Journal Publishing 2.3 DTDs. --> +<!-- (May also work with older variants, --> +<!-- and note further assumptions and limitations --> +<!-- below.) --> +<!-- --> +<!-- OUTPUT: HTML (XHTML if a postprocessor is used) --> +<!-- --> +<!-- CREATED FOR: --> +<!-- Digital Archive of Journal Articles --> +<!-- National Center for Biotechnology Information (NCBI) --> +<!-- National Library of Medicine (NLM) --> +<!-- --> +<!-- CREATED BY: --> +<!-- Wendell Piez (based on HTML design by --> +<!-- Kate Hamilton and Debbie Lapeyre, 2004), --> +<!-- Mulberry Technologies, Inc. --> +<!-- --> +<!-- ============================================================= --> + +<!-- ============================================================= --> +<!-- + This work is in the public domain and may be reproduced, published or + otherwise used without the permission of the National Library of Medicine (NLM). + + We request only that the NLM is cited as the source of the work. + + Although all reasonable efforts have been taken to ensure the accuracy and + reliability of the software and data, the NLM and the U.S. Government do + not and cannot warrant the performance or results that may be obtained by + using this software or data. The NLM and the U.S. Government disclaim all + warranties, express or implied, including warranties of performance, + merchantability or fitness for any particular purpose. +--> +<!-- ============================================================= --> + +<!-- Change history --> + +<!-- From jpub3-html.xsl v3.0 to jats-html.xsl v1.0: + +Calls to 'normalize-space($node)' where $node is not a string are +expressed as 'normalize-space(string($node)) in order to provide +type safety in some XSLT 2.0 processors. + +Support for certain elements in NLM Blue v2.3 is added to provide +backward compatibility: + floats-wrap (same as floats-group) + chem-struct-wrapper (same as chem-struct-wrap) + custom-meta-wrap (same as custom-meta-group) + floats-wrap (same as floats-group) + gloss-group (same as glossary) + citation + contract-num + contract-sponsor + grant-num + grant-sponsor + +Support is added for looser structures for title-group elements +in 2.3 (title, trans-title, trans-subtitle etc.) Same for 2.3 +tagging of permissions info (copyright-statement, copyright-year, +license) and funding/contract info (contract-num, contract-sponsor, +grant-num, grant-sponsor). + +Elements newly permitted in JATS journal-meta +(contrib-group, aff, aff-alternatives) are supported. + +New elements in NISO JATS v1.0 are supported: + aff-alternatives + citation-alternatives + collab-alternatives + trans-title-group (with @xml:lang) + contrib-id + count> + issn-l + nested-kwd + +Added support for @pub-id-type='arXiv' + +Named anchor logic extended to support "alternatives" wrappers +for aff, contrib, citation etc. + +Footer text is emended, with name of transformation (stylesheet +or pipeline) parameterized. + +--> +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:mml="http://www.w3.org/1998/Math/MathML" + exclude-result-prefixes="xlink mml"> + + + <!--<xsl:output method="xml" indent="no" encoding="UTF-8" + doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" + doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>--> + + + <xsl:output doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" + doctype-system="http://www.w3.org/TR/html4/loose.dtd" + encoding="UTF-8"/> + + <xsl:strip-space elements="*"/> + + <!-- Space is preserved in all elements allowing #PCDATA --> + <xsl:preserve-space + elements="abbrev abbrev-journal-title access-date addr-line + aff alt-text alt-title article-id article-title + attrib award-id bold chapter-title chem-struct + collab comment compound-kwd-part compound-subject-part + conf-acronym conf-date conf-loc conf-name conf-num + conf-sponsor conf-theme contrib-id copyright-holder + copyright-statement copyright-year corresp country + date-in-citation day def-head degrees disp-formula + edition elocation-id email etal ext-link fax fpage + funding-source funding-statement given-names glyph-data + gov inline-formula inline-supplementary-material + institution isbn issn-l issn issue issue-id issue-part + issue-sponsor issue-title italic journal-id + journal-subtitle journal-title kwd label license-p + long-desc lpage meta-name meta-value mixed-citation + monospace month named-content object-id on-behalf-of + overline p page-range part-title patent person-group + phone prefix preformat price principal-award-recipient + principal-investigator product pub-id publisher-loc + publisher-name related-article related-object role + roman sans-serif sc season self-uri series series-text + series-title sig sig-block size source speaker std + strike string-name styled-content std-organization + sub subject subtitle suffix sup supplement surname + target td term term-head tex-math textual-form th + time-stamp title trans-source trans-subtitle trans-title + underline uri verse-line volume volume-id volume-series + xref year + + mml:annotation mml:ci mml:cn mml:csymbol mml:mi mml:mn + mml:mo mml:ms mml:mtext"/> + + + <xsl:param name="transform" select="'jats-html.xsl'"/> + + <xsl:param name="css" select="'jats-preview.css'"/> + + <xsl:param name="report-warnings" select="'no'"/> + + <xsl:variable name="verbose" select="$report-warnings='yes'"/> + + <!-- Keys --> + + <!-- To reduce dependency on a DTD for processing, we declare + a key to use instead of the id() function. --> + <xsl:key name="element-by-id" match="*[@id]" use="@id"/> + + <!-- Enabling retrieval of cross-references to objects --> + <xsl:key name="xref-by-rid" match="xref" use="@rid"/> + + <!-- ============================================================= --> + <!-- ROOT TEMPLATE - HANDLES HTML FRAMEWORK --> + <!-- ============================================================= --> + + <xsl:template match="/"> + <html> + <!-- HTML header --> + <xsl:call-template name="make-html-header"/> + <body> + <xsl:apply-templates/> + </body> + </html> + </xsl:template> + + + <xsl:template name="make-html-header"> + <head> + <title> + <xsl:variable name="authors"> + <xsl:call-template name="author-string"/> + </xsl:variable> + <xsl:value-of select="normalize-space(string($authors))"/> + <xsl:if test="normalize-space(string($authors))">: </xsl:if> + <xsl:value-of + select="/article/front/article-meta/title-group/article-title[1]"/> + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + +
+ +
+ + + +
+ +
+
+ + + +
+ +
+
+ + + +
+ + + Floating objects + + + +
+
+ + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [ + + ] + + + + + + + + + + , + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +


+ + + + + + + + + + + + + + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [Private character + + + + + ] + + + + + + (Glyph not rendered) + + + + + [Related article:] + + + + + + [Related object:] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Notes + + + + + + + + + + Acknowledgements + + + + + + + Appendices + + + + + + + Biography + + + + + + + Notes + + + + + + + Glossary + + + + + + + References + + + + + + + + + + Notes + + + + + + + + + +
+ + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + +

+ + + + + + + +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Box + + + + + + + + + + + + + + Formula + + + + + + + + + + + + + + Formula (chemical) + + + + + + + + + + + + + + Figure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [ + + ] + + + + + + + + + + + + + + + + [ + + ] + + + + + + + Abbreviation + + + + Communicated by + + + + Contributed by + + + + Conflicts of interest + + + + Corresponding author + + + + Current affiliation + + + + Deceased + + + + Edited by + + + + Equal contributor + + + + Financial disclosure + + + + On leave + + + + + + Participating researcher + + + + Current address + + + + Presented at + + + + Presented by + + + + Previously at + + + + Study group member + + + + Supplementary material + + + + Supported by + + + + + + + + + + + + + + + + + + + + + + + + + + Statement + + + + + + + + + + + + + + Supplementary Material + + + + + + + + + + + + + + Table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ( + + + electronic + print + print and electronic + electronic preprint + print preprint + corrected, electronic + corrected, print + retracted, electronic + retracted, print + + + + + + ) + + + + + + + + + + + + + + + : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { label + (or @symbol) + needed for + + + [@id=' + + '] + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + named anchor + + + + + + + + + + + + + + + + + + + + + + +
  • + + + +
  • +
    +
    +
    + + +

    Elements are cross-referenced without labels.

    +

    Either the element should be provided a label, or their cross-reference(s) should + have literal text content.

    +
      + +
    +
    + + + + + +
  • + In + +
      + +
    • + +
    • +
      +
    + +
  • +
    +
    + + +

    Elements with different 'specific-use' assignments appearing together

    +
      + +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + January + February + March + April + May + June + July + August + September + October + November + December + + + + + + + + + + + + + + + + + , + + + and + + + + + + + + + + + +
    +
    +

    + This display is generated from + NISO JATS XML with + + + + . The XSLT engine is + + . +

    +
    +
    + + + + + + + + + + + + + + + + [@ + + =' + + '] + + + + + + + + + + + + + + + + / + + + [ + + ] + + + + + + /@ + + + + + + /comment() + + [ + + ] + + + + + + /processing-instruction() + + [ + + ] + + + + + + /text() + + [ + + ] + + + + + + + + + diff --git a/markup_doc/static/xsl/xml-tree.xsl b/markup_doc/static/xsl/xml-tree.xsl new file mode 100644 index 0000000..35bb61d --- /dev/null +++ b/markup_doc/static/xsl/xml-tree.xsl @@ -0,0 +1,103 @@ + + + + + + + + + + + XML Viewer + + + + +
    + + +
    +
    + + +
    + + < + +  = + "" + + > + + +
    </>
    +
    +
    +
    + + +
    + + + +
    + + < + +  = + "" + + > + + +
    </>
    +
    +
    + + + + + +
    +
    +
    + + + +
    <!-- -->
    +
    + + +
    + diff --git a/markup_doc/sync_api.py b/markup_doc/sync_api.py new file mode 100644 index 0000000..56b8d09 --- /dev/null +++ b/markup_doc/sync_api.py @@ -0,0 +1,117 @@ +import requests +from django.db import transaction +from markup_doc.models import CollectionValuesModel, JournalModel, CollectionModel + +def sync_collection_from_api(): + url = "https://core.scielo.org/api/v2/pid/collection/" + all_results = [] + + while url: + print(url) + response = requests.get(url, headers={"Accept": "application/json"}) + data = response.json() + all_results.extend(data['results']) + url = data['next'] + + # Borra todo + print('Borrando...') + CollectionModel.objects.all().delete() + deleted_count, _ = CollectionValuesModel.objects.all().delete() + print('Borrado...') + + for item in all_results: + acron = item.get('acron3') + name = item.get('main_name', '').strip() + if acron and name: + print(name) + CollectionValuesModel.objects.update_or_create( + acron=acron, + defaults={'name': name} + ) + + +def sync_journals_from_api(): + journals = JournalModel.objects.all() + if journals.exists(): + deleted_count, _ = journals.delete() + + obj = CollectionModel.objects.select_related('collection').first() + + acron_selected = obj.collection.acron if obj and obj.collection else None + + new_journals = [] + + if acron_selected: + + url = "https://core.scielo.org/api/v2/pid/journal/" + + while url: + response = requests.get(url, headers={"Accept": "application/json"}) + try: + data = response.json() + + for item in data["results"]: + title = item.get("title", None) + short_title = item.get("short_title", None) + acronym = item.get("acronym", None) + pissn = item.get("official", {}).get("issn_print", None) + eissn = item.get("official", {}).get("issn_electronic", None) + acronym = item.get("acronym", None) + pubname = item.get("publisher", []) + title_in_database = item.get("title_in_database", []) + title_nlm = None + + if title_in_database: + for t in title_in_database: + if t.get("name", None) == 'MEDLINE': + title_nlm = t.get("title", None) + + if pubname: + pubname = pubname[0].get("name", None) + + scielo_journals = item.get("scielo_journal", []) + + # Obtener la primera colección asociada, si existe + collection_acron = None + if scielo_journals: + collection_acron = scielo_journals[0].get("collection_acron") + issn_scielo = scielo_journals[0].get("issn_scielo", None) + + if not title or acron_selected != collection_acron: + continue # Saltar si falta el título + + #collection_instance = None + #if collection_acron: + # collection_instance, _ = CollectionModel.objects.get_or_create( + # acron=collection_acron, + # defaults={'name': collection_acron.upper()} + # ) + + # Crear o actualizar el journal + print(title) + print(item) + journal = JournalModel( + title=title, + short_title=short_title or None, + title_nlm = title_nlm or None, + acronym=acronym or None, + issn=issn_scielo or None, + pissn=pissn or None, + eissn=eissn or None, + pubname=pubname or None, + # collection=collection_instance, + # defaults={} + ) + new_journals.append(journal) + + url = data.get("next") + except: + print('**ERROR url') + print(url) + url = None + + # Guardar todo junto + if new_journals: + with transaction.atomic(): + JournalModel.objects.bulk_create(new_journals, ignore_conflicts=True) + diff --git a/markup_doc/tasks.py b/markup_doc/tasks.py new file mode 100644 index 0000000..d0c4c12 --- /dev/null +++ b/markup_doc/tasks.py @@ -0,0 +1,331 @@ +# Standard library imports +import json +import re + +# Third-party imports +import langid + +# Local application imports +from config import celery_app +from markup_doc.models import UploadDocx, MarkupXML +from markup_doc.xml import get_xml +from markup_doc.labeling_utils import ( + split_in_three, + create_special_content_object, + process_reference, + process_references, + extract_keywords, + create_labeled_object2, + get_data_first_block, + get_llm_model_name +) +from markup_doc.models import ProcessStatus +from markup_doc.labeling_utils import MODEL_NAME_GEMINI, MODEL_NAME_LLAMA +from markup_doc.sync_api import sync_journals_from_api +from markuplib.function_docx import functionsDocx +from model_ai.llama import LlamaService, LlamaInputSettings +from reference.config_gemini import create_prompt_reference + + + +def clean_labels(text): + # Eliminar etiquetas tipo [kwd] o [sectitle], incluso si tienen espacios como [/ doctitle ] + text = re.sub(r'\[\s*/?\s*\w+(?:\s+[^\]]+)?\s*\]', '', text) + + # Reemplazar múltiples espacios por uno solo + text = re.sub(r'[ \t]+', ' ', text) + + # Eliminar espacios antes de los signos de puntuación + text = re.sub(r'\s+([;:,.])', r'\1', text) + + # Normalizar múltiples saltos de línea + text = re.sub(r'\n+', '\n', text) + + # Quitar espacios al principio y final + return text.strip() + + +@celery_app.task() +def update_xml(instance_id, instance_content, instance_content_body, instance_content_back): + instance = MarkupXML.objects.get(id=instance_id) + content_head = instance_content + content_body_dict = instance_content_body + xml, stream_data_body = get_xml(instance, content_head, content_body_dict, instance_content_back) + + instance.content_body = stream_data_body + # Guardar el XML en el campo `file_xml` + #archive_xml = ContentFile(xml) # Crea un archivo temporal en memoria + instance.estatus = ProcessStatus.PROCESSED + #instance.file_xml.save("archivo.xml", archive_xml) # Guarda en el campo `file_xml` + instance.text_xml = xml + + instance.save() + + +@celery_app.task() +def get_labels(title, user_id): + article_docx = UploadDocx.objects.get(title=title) + doc = functionsDocx.openDocx(article_docx.file.path) + sections, content = functionsDocx().extractContent(doc, article_docx.file.path) + article_docx_markup = article_docx + text_title = '' + text_paragraph = '' + stream_data = [] + stream_data_body = [] + stream_data_back = [] + num_ref=0 + state = { + 'label': None, + 'label_next': None, + 'label_next_reset': None, + 'reset': False, + 'repeat': None, + 'body_trans': False, + 'body': False, + 'back': False, + 'references': False + } + counts = { + 'numref': 0, + 'numtab': 0, + 'numfig': 0, + 'numeq': 0 + } + + next_item = None + obj_reference = [] + llama_model = False + + for i, item in enumerate(content): + if next_item: + next_item = None + continue + + obj = {} + if item.get('type') in [ + '', + '', + '', + '' + ]: + if item.get('type') == '': + if i + 1 < len(content): + obj['type'] = 'paragraph' + obj['value'] = { + 'label': '', + 'paragraph': item.get('text') + } + stream_data.append(obj.copy()) + + next_item = content[i + 1] + obj['type'] = 'paragraph_with_language' + obj['value'] = { + 'label': '', + 'paragraph': next_item.get('text'), + 'language': langid.classify(next_item.get('text'))[0] or None + } + stream_data.append(obj.copy()) + + elif item.get('type') == '': + keywords = extract_keywords(item.get('text')) + obj['type'] = 'paragraph' + obj['value'] = { + 'label': '', + 'paragraph': keywords['title'] + } + stream_data.append(obj.copy()) + + obj['type'] = 'paragraph_with_language' + obj['value'] = { + 'label': '', + 'paragraph': keywords['keywords'], + 'language': langid.classify(keywords['title'].replace('', '').replace('', ''))[0] or None + } + stream_data.append(obj.copy()) + + else: + obj['type'] = 'paragraph' + obj['value'] = { + 'label': item.get('type') , + 'paragraph': item.get('text') + } + stream_data.append(obj.copy()) + continue + + if item.get('type') == 'first_block': + llm_first_block = LlamaService(mode='prompt', temperature=0.1) + + if get_llm_model_name() == MODEL_NAME_GEMINI: + output = llm_first_block.run(LlamaInputSettings.get_first_metadata(clean_labels(item.get('text')))) + match = re.search(r'\{.*\}', output, re.DOTALL) + if match: + output = match.group(0) + output = json.loads(output) + + if get_llm_model_name() == MODEL_NAME_LLAMA: + + output_author = get_data_first_block(clean_labels(item.get('text')), 'author', user_id) + + output_affiliation = get_data_first_block(clean_labels(item.get('text')), 'affiliation', user_id) + + output_doi = get_data_first_block(clean_labels(item.get('text')), 'doi', user_id) + + output_title = get_data_first_block(clean_labels(item.get('text')), 'title', user_id) + + # 1. Parsear cada salida + doi_section = output_doi + titles = output_title + authors = output_author + affiliations = output_affiliation + + # 2. Combinar en un único JSON + output = { + "doi": doi_section.get("doi", ""), + "section": doi_section.get("section", ""), + "titles": titles, + "authors": authors, + "affiliations": affiliations + } + + obj['type'] = 'paragraph' + obj['value'] = { + 'label': '', + 'paragraph': output['doi'] + } + stream_data.append(obj.copy()) + obj['value'] = { + 'label': '', + 'paragraph': output['section'] + } + stream_data.append(obj.copy()) + for i, tit in enumerate(output['titles']): + obj['type'] = 'paragraph_with_language' + obj['value'] = { + 'label': '' if i == 0 else '', + 'paragraph': tit['title'], + 'language': tit['language'] + } + stream_data.append(obj.copy()) + + for i, auth in enumerate(output['authors']): + obj['type'] = 'author_paragraph' + obj['value'] = { + 'label': '', + 'surname': auth['surname'], + 'given_names': auth['name'], + 'orcid': auth['orcid'], + 'affid': auth['aff'], + 'char': auth['char'] + } + stream_data.append(obj.copy()) + + for i, aff in enumerate(output['affiliations']): + obj['type'] = 'aff_paragraph' + obj['value'] = { + 'label': '', + 'affid': aff['aff'], + 'char': aff['char'], + 'orgname': aff['orgname'], + 'orgdiv2': aff['orgdiv2'], + 'orgdiv1': aff['orgdiv1'], + 'zipcode': aff['postal'], + 'city': aff['city'], + 'country': aff['name_country'], + 'code_country': aff['code_country'], + 'state': aff['state'], + 'text_aff': aff['text_aff'], + #'original': aff['original'] + } + stream_data.append(obj.copy()) + + if item.get('type') in ['image', 'table', 'list', 'compound']: + obj, counts = create_special_content_object(item, stream_data_body, counts) + stream_data_body.append(obj) + continue + + if item.get('text') is None or item.get('text') == '': + state['label_next'] = state['label_next_reset'] if state['reset'] else state['label_next'] + if state['back']: + state['back'] = False + state['body'] = False + state['references'] = True + else: + + obj, result, state = create_labeled_object2(i, item, state, sections) + + if result: + if item.get('text').lower() in ['introducción', 'introduction', 'introdução'] and state['references']: + state['body_trans'] = True + obj_trans = { + 'type': 'paragraph_with_language', + 'value': { + 'label': '', + 'paragraph': 'Translate' + } + } + stream_data_body.append(obj_trans) + if state['body']: + if state['references']: + if state['body_trans']: + stream_data_body.append(obj) + else: + stream_data.append(obj) + else: + stream_data_body.append(obj) + elif state['back']: + if state['label'] == '': + stream_data_back.append(obj) + if state['label'] == '

    ': + num_ref = num_ref + 1 + #obj = {}#process_reference(num_ref, obj, user_id) + obj_reference.append({"num_ref": num_ref, "obj": obj, "text": obj['value']['paragraph'],}) + #stream_data_back.append(obj) + else: + stream_data.append(obj) + + num_refs = [item["num_ref"] for item in obj_reference] + + if get_llm_model_name() == 'LLAMA': + for obj_ref in obj_reference: + obj = process_reference(obj_ref['num_ref'], obj_ref['obj'], user_id) + stream_data_back.append(obj) + + else: + chunks = split_in_three(obj_reference) + output=[] + + for chunk in chunks: + if len(chunk) > 0: + text_references = "\n".join([item["text"] for item in chunk]).replace('', '').replace('', '') + prompt_reference = create_prompt_reference(text_references) + + result = llm_first_block.run(prompt_reference) + + match = re.search(r'\[.*\]', result, re.DOTALL) + if match: + parsed = json.loads(match.group(0)) + output.extend(parsed) # Agrega a la lista de salida + + stream_data_back.extend(process_references(num_refs, output)) + + article_docx_markup.content = stream_data + article_docx_markup.content_body = stream_data_body + article_docx_markup.content_back = stream_data_back + article_docx_markup.save() + + article_docx.estatus = ProcessStatus.PROCESSED + article_docx.save() + + xml, stream_data_body = get_xml(article_docx, stream_data, stream_data_body, stream_data_back) + article_docx_markup.content_body = stream_data_body + + # Guardar el XML en el campo `file_xml` + #archive_xml = ContentFile(xml) # Crea un archivo temporal en memoria + #article_docx_markup.file_xml.save("archivo.xml", archive_xml) # Guarda en el campo `file_xml` + article_docx_markup.text_xml = xml + article_docx.save() + + +@celery_app.task() +def task_sync_journals_from_api(): + sync_journals_from_api() diff --git a/markup_doc/tests.py b/markup_doc/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/markup_doc/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/markup_doc/views.py b/markup_doc/views.py new file mode 100644 index 0000000..9c002da --- /dev/null +++ b/markup_doc/views.py @@ -0,0 +1,575 @@ +from django.shortcuts import render +from django.http import HttpResponse, HttpResponseBadRequest, Http404 +from .models import ArticleDocxMarkup +#from .xml import extraer_citas_apa +from django.http import JsonResponse +from markup_doc.models import JournalModel +import json + +import io, base64, mimetypes, os +import zipfile +from django.utils.text import slugify + +from django.conf import settings +from django.views.decorators.http import require_POST +from django.contrib.staticfiles import finders + +from lxml import etree, html as lxml_html +from urllib.parse import urlsplit, unquote +from django.templatetags.static import static +from markup_doc.labeling_utils import ( + proccess_labeled_text, +) +from packtools import XML, HTMLGenerator, catalogs +from packtools.htmlgenerator import get_htmlgenerator +from io import StringIO +from packtools.sps.pid_provider.xml_sps_lib import get_xml_with_pre, XMLWithPre +from .pkg_zip_builder import PkgZipBuilder +from urllib.parse import urlparse +from wagtail.images import get_image_model +from markup_doc.issue_proc import XmlIssueProc + + +# Create your views here. +def generate_xml(request, id_registro): + try: + # Obtener el registro del modelo que contiene el XML + registro = ArticleDocxMarkup.objects.get(pk=id_registro) + + # Obtener el contenido XML del campo + contenido_xml = registro.text_xml # Ajusta esto según la estructura de tu modelo + + # Crear una respuesta HTTP con el tipo de contenido XML + response = HttpResponse(contenido_xml, content_type='application/xml') + + # Definir el nombre del archivo para descargar + nombre_archivo = f"document_{id_registro}.xml" + response['Content-Disposition'] = f'attachment; filename="{nombre_archivo}"' + + return response + except ArticleDocxMarkup.DoesNotExist: + return HttpResponse("El registro solicitado no existe", status=404) + except Exception as e: + return HttpResponse(f"Error al generar el XML: {str(e)}", status=500) + + +def extract_citation(request): + + if request.method == "POST": + body = json.loads(request.body) + text = body.get("text", "") + pk_register = body.get("pk", "") + + #print(text) + #print(pk_register) + + # Obtener el registro del modelo que contiene el XML + registro = ArticleDocxMarkup.objects.get(pk=pk_register) + + #result = extraer_citas_apa(text, registro.content_back.get_prep_value()) # <-- Aquí pasas el texto a tu función normal + + ref = proccess_labeled_text(text, registro.content_back.get_prep_value()) + #text = text.replace(ref[0]['cita'], f"{ref[0]['cita']}") + + return JsonResponse({"refid": ref[0]['refid']}) + + +def get_journal(request): + + if request.method == "POST": + body = json.loads(request.body) + text = body.get("text", "") + pk = body.get("pk", "") + + journal = JournalModel.objects.get(pk=pk) + + return JsonResponse({ + 'journal_title': journal.title, + 'short_title': journal.short_title, + 'title_nlm': journal.title_nlm, + 'acronym': journal.acronym, + 'issn': journal.issn, + 'pissn': journal.pissn, + 'eissn': journal.eissn, + 'pubname': journal.pubname, + # Agrega los campos que necesites + }) + + +def generate_zip(request): + if request.method == "POST": + body = json.loads(request.body) + id_registro = body.get("pk", "") + + try: + registro = ArticleDocxMarkup.objects.get(pk=id_registro) + except ArticleDocxMarkup.DoesNotExist: + raise Http404("El registro solicitado no existe") + + # Crear XMLWithPre + contenido_xml = registro.text_xml or "" + xml_with_pre = get_xml_with_pre(contenido_xml) + + # Crear builder + builder = PkgZipBuilder(xml_with_pre) + + # Dummy IssueProc con imágenes + issue_proc = XmlIssueProc(registro) + + # Construir paquete SPS + import tempfile + output_folder = tempfile.mkdtemp() + + zip_path = builder.build_sps_package( + output_folder=output_folder, + renditions=[], # PDFs si los tienes + translations={}, # HTML si los tienes + main_paragraphs_lang="es", + issue_proc=issue_proc, + ) + + # Respuesta HTTP + with open(zip_path, "rb") as fp: + response = HttpResponse(fp.read(), content_type="application/zip") + response["Content-Disposition"] = f'attachment; filename="{builder.sps_pkg_name}.zip"' + return response + + +def _file_to_data_uri(file_obj, name_hint="file.bin"): + file_obj.open('rb') + try: + data = file_obj.read() + finally: + file_obj.close() + mime, _ = mimetypes.guess_type(name_hint) + if not mime: mime = 'application/octet-stream' + b64 = base64.b64encode(data).decode('ascii') + return f"data:{mime};base64,{b64}" + + +def _gather_images_from_streamfield(registro): + """ + Devuelve: + - by_figid: {figid -> (data_uri, original_basename)} + - by_basename: {basename -> data_uri} + """ + by_figid, by_basename = {}, {} + if not registro.content_body: + return by_figid, by_basename + + for block in registro.content_body: + if block.block_type != "image" or not block.value: + continue + struct = block.value + wagtail_image = struct.get("image") + if not wagtail_image: + continue + + # nombre original + original_name = (wagtail_image.file.name or "").split("/")[-1] or f"image-{wagtail_image.pk}" + data_uri = _file_to_data_uri(wagtail_image.file, original_name) + + # por basename + by_basename[original_name] = data_uri + + # por figid si existe + figid = (struct.get("figid") or "").strip() + if figid: + by_figid[figid] = (data_uri, original_name) + return by_figid, by_basename + + +def ensure_utf8_meta(root): + # 1) Asegurar estructura html/head/body + if root.tag.lower() != 'html': + html = html.Element('html') + head = html.Element('head') + body = lxml_html.Element('body') + html.append(head); html.append(body) + body.append(root) + root = html + else: + html = root + head = html.find('head') + body = html.find('body') + if head is None: + head = lxml_html.Element('head'); html.insert(0, head) + if body is None: + body = lxml_html.Element('body'); html.append(body) + + # 2) Quitar metas http-equiv=Content-Type (pueden contradecir el charset) + for m in head.xpath('meta[translate(@http-equiv,"CONTENT-TYPE","content-type")="content-type"]'): + head.remove(m) + + # 3) Insertar (o normalizar) al principio + metas = head.xpath('meta[@charset]') + if metas: + metas[0].set('charset', 'utf-8') + head.remove(metas[0]); head.insert(0, metas[0]) + else: + meta = lxml_html.Element('meta'); meta.set('charset', 'utf-8') + head.insert(0, meta) + + return root + + +def ensure_jats_css_link(root): + head = root.find('.//head') + if head is None: + head = lxml_html.Element('head'); root.insert(0, head) + + # Si el XSL ya puso un link a jats-preview.css, reescribe su href + rewritten = False + for link in head.xpath('link[@rel="stylesheet"]'): + href = link.get('href', '') + if 'jats-preview.css' in href: + link.set('href', static('jats/jats-preview.css')) + link.set('type', 'text/css') + rewritten = True + break + + # Si no había, añade uno + if not rewritten: + link = lxml_html.Element('link') + link.set('rel', 'stylesheet') + link.set('type', 'text/css') + link.set('href', static('jats/jats-preview.css')) + head.append(link) + + return root + + +def fix_img_src(html_text): + Image = get_image_model() + # Parsear el HTML + doc = lxml_html.fromstring(html_text) + + # Iterar sobre todas las imágenes + for img in doc.xpath("//img[@src]"): + src = img.attrib.get("src") + if not src or 'open-access' in src: + continue + + # ejemplo: "image3_pVQTCFR.original.jpg" + basename = os.path.basename(urlparse(src).path) + + try: + # Buscar en la base de datos (por nombre de archivo que contenga el basename) + #image_obj = Image.objects.filter(file__icontains=basename).first() + image_obj = '/media/images/' + basename + if image_obj: + # Obtener la URL real + #real_url = image_obj.get_rendition("original").url + #img.attrib["src"] = real_url + img.attrib["src"] = image_obj + except Exception: + # si no hay match, dejarlo como está + pass + + # Volver a convertir a string + return lxml_html.tostring(doc, pretty_print=True, encoding="utf-8", method="html").decode("utf-8") + + +def load_file_content(path): + with open(path, "r", encoding="utf-8") as f: + return f.read() + + +def preview_html_post(request): + # 1) pk desde JSON o formulario + id_registro = None + if request.content_type and request.content_type.startswith('application/json'): + try: + payload = json.loads(request.body.decode('utf-8')) + id_registro = int(payload.get('pk')) + except Exception: + return HttpResponseBadRequest("pk inválido") + else: + id_registro = request.POST.get('pk') + try: + id_registro = int(id_registro) + except Exception: + return HttpResponseBadRequest("pk inválido") + + try: + registro = ArticleDocxMarkup.objects.get(pk=id_registro) + except ArticleDocxMarkup.DoesNotExist: + raise Http404("Registro no existe") + + if not registro.text_xml or not registro.text_xml.strip(): + return HttpResponse("

    Sin XML

    ", content_type="text/html; charset=utf-8") + + try: + xml_content = registro.text_xml + xml_filelike = StringIO(xml_content) + + parsed_xml = XML(xml_filelike, no_network=True) + + """ + generator = HTMLGenerator.parse( + parsed_xml, + valid_only=False, + output_style="website", + xslt="3.0" + )""" + + bootstrap_css = """ + + """ + + bootstrap_js = """ + + """ + + print("css:", catalogs.HTML_GEN_DEFAULT_CSS_PATH) + print("print_css:", catalogs.HTML_GEN_DEFAULT_PRINT_CSS_PATH) + print("bootstrap_css:", catalogs.HTML_GEN_BOOTSTRAP_CSS_PATH) + print("article_css:", catalogs.HTML_GEN_ARTICLE_CSS_PATH) + print("js:", catalogs.HTML_GEN_DEFAULT_JS_PATH) + + # Cargar CSS/JS desde packtools + css_main = load_file_content(catalogs.HTML_GEN_DEFAULT_CSS_PATH) + css_print = load_file_content(catalogs.HTML_GEN_DEFAULT_PRINT_CSS_PATH) + js_main = load_file_content(catalogs.HTML_GEN_DEFAULT_JS_PATH) + + link_css = f""" + + + + + """ + + link_js = f""" + + + """ + + #link_css = f""" + # + # + #""" + + #link_js = f""" + # + #""" + + generator = HTMLGenerator.parse( + xml_filelike, + valid_only=False, + css=catalogs.HTML_GEN_DEFAULT_CSS_PATH, + print_css=catalogs.HTML_GEN_DEFAULT_PRINT_CSS_PATH, + js=catalogs.HTML_GEN_DEFAULT_JS_PATH, + math_elem_preference="mml:math", + math_js="https://cdn.jsdelivr.net/npm/mathjax@3.0.0/es5/tex-mml-svg.js", + permlink="", + url_article_page="", + url_download_ris="", + gs_abstract=False, + output_style="website", + xslt="3.0", + bootstrap_css=catalogs.HTML_GEN_BOOTSTRAP_CSS_PATH, + article_css=catalogs.HTML_GEN_ARTICLE_CSS_PATH, + design_system_static_img_path=None, + ) + + template = """ + + + + Artículo + + {css} + + + + + + + + + {content} + + + + + {js} + + """ + + has_output = False + for lang, trans_result in generator: + has_output = True + html_text = etree.tostring( + trans_result, + pretty_print=True, + encoding="utf-8", + method="html", + doctype="" + ).decode("utf-8") + + # corregir las imágenes + html_text = fix_img_src(html_text) + + # insertar el fragmento dentro de la plantilla + html_text = template.format( + css_main="", + css_print="", + css=link_css, + js=link_js, + js_main="", + content=html_text + ) + + # 3) Postprocesado: meta, css, imágenes + root = lxml_html.fromstring(html_text) + root = ensure_utf8_meta(root) + root = ensure_jats_css_link(root) + + by_figid, _by_basename = _gather_images_from_streamfield(registro) + href_to_datauri = { + f"{fid}.jpeg".lower(): data_uri + for fid, (data_uri, _orig) in by_figid.items() if fid + } + + for img in root.xpath('//img[@src]'): + src = img.get('src', '') + if src.startswith('data:'): + continue + base = unquote(os.path.basename(urlsplit(src).path)).lower() + data_uri = href_to_datauri.get(base) + if data_uri: + img.set('src', data_uri) + else: + img.set('src', settings.MEDIA_URL + base) + + final_html = lxml_html.tostring( + root, + encoding='unicode', + method='html', + doctype='', + pretty_print=True + ) + + return HttpResponse(html_text, content_type="text/html; charset=utf-8") + + except Exception as exc: + return HttpResponse( + f"

    Error al generar HTML

    {exc}
    ", + content_type="text/html; charset=utf-8" + ) + + +def xml_to_collapsible_html(xml_string): + try: + root = etree.fromstring(xml_string.encode("utf-8")) + except Exception as e: + return f"
    Error al parsear XML: {e}
    " + + def render_node(node): + # Construir apertura con atributos coloreados + attrs = "" + for k, v in node.attrib.items(): + attrs += f' {k}="{v}"' + + # Ej: + tag_open = f"<{node.tag}{attrs}>" + + # Texto dentro del nodo + text_html = "" + if (node.text or "").strip(): + text_html = f"
    {node.text.strip()}
    " + + # Renderizar hijos recursivamente + children_html = "".join(render_node(child) for child in node) + + # Nodo hoja (sin texto ni hijos) + if not children_html and not text_html: + return f"
    {tag_open}</{node.tag}>
    " + + # Nodo con contenido + return f""" +
    + {tag_open} + {text_html} + {children_html} +
    </{node.tag}>
    +
    + """ + + return render_node(root) + + +def preview_xml_tree(request): + # 1) pk desde JSON o formulario + id_registro = None + if request.content_type and request.content_type.startswith('application/json'): + try: + payload = json.loads(request.body.decode('utf-8')) + id_registro = int(payload.get('pk')) + except Exception: + return HttpResponseBadRequest("pk inválido") + else: + id_registro = request.POST.get('pk') + try: + id_registro = int(id_registro) + except Exception: + return HttpResponseBadRequest("pk inválido") + + try: + registro = ArticleDocxMarkup.objects.get(pk=id_registro) + except ArticleDocxMarkup.DoesNotExist: + raise Http404("Registro no existe") + + xml_string = registro.text_xml or "" + if not xml_string.strip(): + return HttpResponse("

    Sin XML

    ", content_type="text/html; charset=utf-8") + + collapsible_html = xml_to_collapsible_html(xml_string) + + final_html = f""" + + + + + + + +

    Collapsible XML view

    + {collapsible_html} + + + """ + + return HttpResponse(final_html, content_type="text/html; charset=utf-8") \ No newline at end of file diff --git a/markup_doc/wagtail_hooks.py b/markup_doc/wagtail_hooks.py new file mode 100644 index 0000000..50379a4 --- /dev/null +++ b/markup_doc/wagtail_hooks.py @@ -0,0 +1,258 @@ +from django.http import HttpResponseRedirect +from django.utils.translation import gettext_lazy as _ +from django.contrib import messages +from django.template.response import TemplateResponse +from wagtail_modeladmin.options import ModelAdmin + +from wagtail.snippets.views.snippets import ( + CreateView, + EditView, + SnippetViewSet, + SnippetViewSetGroup +) + +from markup_doc.models import ( + ArticleDocx, + ArticleDocxMarkup, + UploadDocx, + MarkupXML, + CollectionModel, + JournalModel, + ProcessStatus +) + +from config.menu import get_menu_order +from markup_doc.tasks import get_labels, update_xml, task_sync_journals_from_api +from django.urls import path, reverse +from django.utils.html import format_html +from wagtail.admin import messages +from wagtail.admin.views import generic + +from django.shortcuts import redirect, get_object_or_404 +from django.views import View + +from wagtail.snippets.models import register_snippet +from django.db.models.signals import post_save +from django.dispatch import receiver +from django.db import transaction + +from wagtail import hooks +from . import views, xml +from django.templatetags.static import static +from markup_doc.sync_api import sync_collection_from_api, sync_journals_from_api + + +@hooks.register('register_admin_urls') +def register_admin_urls(): + return [ + path('download-xml//', views.generate_xml, name='generate_xml'), + path('extract-citation/', views.extract_citation, name='extract_citation'), + path('get_journal/', views.get_journal, name='get_journal'), + path('download-zip/', views.generate_zip, name='generate_zip'), + path('preview-html/', views.preview_html_post, name='preview_html_post'), + path('pretty-xml/', views.preview_xml_tree, name='preview_xml_tree'), + ] + +@hooks.register('insert_editor_js') +def xref_js(): + return format_html( + '', + static('js/xref-button.js') + ) + + +class ArticleDocxCreateView(CreateView): + #def get_form_class(self): + def dispatch(self, request, *args, **kwargs): + if not CollectionModel.objects.exists(): + messages.warning(request, "Debes seleccionar primero una colección.") + return HttpResponseRedirect(self.get_success_url()) + if not JournalModel.objects.exists(): + messages.warning(request, "Espera un momento, aún no existen elementos en Journal.") + return HttpResponseRedirect(self.get_success_url()) + return super().dispatch(request, *args, **kwargs) + + def form_valid(self, form): + self.object = form.save_all(self.request.user) + self.object.estatus = ProcessStatus.PROCESSING + self.object.save() + transaction.on_commit(lambda: get_labels.delay(self.object.title, self.request.user.id)) + return HttpResponseRedirect(self.get_success_url()) + + +class ArticleDocxEditView(EditView): + def form_valid(self, form): + form.instance.updated_by = self.request.user + form.instance.save() + update_xml.delay(form.instance.id, form.instance.content.get_prep_value(), form.instance.content_body.get_prep_value(), form.instance.content_back.get_prep_value()) + return HttpResponseRedirect(self.get_success_url()) + + +class ArticleDocxAdmin(ModelAdmin): + model = ArticleDocx + create_view_class = ArticleDocxCreateView + menu_label = _("Documents") + menu_icon = "folder" + menu_order = 1 + add_to_settings_menu = False # or True to add your model to the Settings sub-menu + exclude_from_explorer = ( + False # or True to exclude pages of this type from Wagtail's explorer view + ) + list_per_page = 20 + list_display = ( + "title", + "get_estatus_display" + ) + + +class ArticleDocxMarkupCreateView(CreateView): + def form_valid(self, form): + self.object = form.save_all(self.request.user) + return HttpResponseRedirect(self.get_success_url()) + + +class ArticleDocxMarkupAdmin(ModelAdmin): + model = ArticleDocxMarkup + create_view_class = ArticleDocxMarkupCreateView + menu_label = _("Documents Markup") + menu_icon = "folder" + menu_order = 1 + add_to_settings_menu = False # or True to add your model to the Settings sub-menu + exclude_from_explorer = ( + False # or True to exclude pages of this type from Wagtail's explorer view + ) + list_per_page = 20 + + +class UploadDocxViewSet(SnippetViewSet): + model = UploadDocx + add_view_class = ArticleDocxCreateView + menu_label = _("UploadDocx") + menu_icon = "folder" + menu_order = 1 + add_to_settings_menu = False # or True to add your model to the Settings sub-menu + exclude_from_explorer = ( + False # or True to exclude pages of this type from Wagtail's explorer view + ) + list_per_page = 20 + list_display = ( + "title", + "get_estatus_display" + ) + + +class MarkupXMLViewSet(SnippetViewSet): + model = MarkupXML + add_view_class = ArticleDocxMarkupCreateView + edit_view_class = ArticleDocxEditView + menu_label = _("MarkupXML") + menu_icon = "folder" + menu_order = 1 + add_to_settings_menu = False # or True to add your model to the Settings sub-menu + exclude_from_explorer = ( + False # or True to exclude pages of this type from Wagtail's explorer view + ) + + list_display=("title", ) + list_per_page = 20 + +""" +class MarkupAdminGroup(ModelAdminGroup): + menu_label = _("Markup") + menu_icon = "folder-open-inverse" + menu_order = 1 + items = (UploadDocxAdmin, MarkupXMLAdmin) + +modeladmin_register(MarkupAdminGroup) +""" + +class CollectionModelCreateView(CreateView): + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + sync_collection_from_api() + return context + + def form_valid(self, form): + form.instance.save() + task_sync_journals_from_api.delay() + return HttpResponseRedirect(self.get_success_url()) + + """ + def get_initial(self): + initial = super().get_initial() + initial["campo"] = "valor inicial dinámico" + return initial + """ + + +class CollectionModelViewSet(SnippetViewSet): + model = CollectionModel + add_view_class = CollectionModelCreateView + menu_label = _("CollectionModel") + menu_icon = "folder" + menu_order = 1 + add_to_settings_menu = False # or True to add your model to the Settings sub-menu + exclude_from_explorer = ( + False # or True to exclude pages of this type from Wagtail's explorer view + ) + list_per_page = 20 + list_display = ( + "collection", + ) + + +class JournalModelCreateView(CreateView): + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + task_sync_journals_from_api + return context + + +class JournalModelViewSet(SnippetViewSet): + model = JournalModel + #add_view_class = JournalModelCreateView + menu_label = _("JournalModel") + menu_icon = "folder" + menu_order = 1 + add_to_settings_menu = False # or True to add your model to the Settings sub-menu + exclude_from_explorer = ( + False # or True to exclude pages of this type from Wagtail's explorer view + ) + list_per_page = 20 + list_display = ( + "title", + ) + + def index_view(self, request): + response = super().index_view(request) + + if isinstance(response, TemplateResponse): + if not CollectionModel.objects.exists(): + messages.warning(request, "Debes seleccionar primero una colección.") + response.context_data["can_add"] = False + response.context_data["can_add_snippet"] = False + return response + + if not JournalModel.objects.exists(): + messages.warning(request, "Sincronizando journals desde la API, espera unos momentos…") + response.context_data["can_add"] = False + response.context_data["can_add_snippet"] = False + return response + + return response + + +class MarkupSnippetViewSetGroup(SnippetViewSetGroup): + menu_name = 'markup_docx' + menu_label = _('Markup Docx') + menu_icon = "folder-open-inverse" + menu_order = get_menu_order('markup_docx') + items = ( + UploadDocxViewSet, + MarkupXMLViewSet, + CollectionModelViewSet, + JournalModelViewSet + ) + + +register_snippet(MarkupSnippetViewSetGroup) \ No newline at end of file diff --git a/markup_doc/xml.py b/markup_doc/xml.py new file mode 100644 index 0000000..d9e1094 --- /dev/null +++ b/markup_doc/xml.py @@ -0,0 +1,864 @@ +from lxml import etree +import re, html, os +from markup_doc.labeling_utils import ( + extract_subsection, + proccess_labeled_text, + proccess_special_content, + append_fragment +) +from wagtail.images import get_image_model +from urllib.parse import urlparse + + +def extract_date(texto): + try: + # Patrón para detectar YYYY-MM-DD, YYYY/MM/DD, DD-MM-YYYY, DD/MM/YYYY + patron_fecha = r'\b(\d{4})[-/](\d{2})[-/](\d{2})\b|\b(\d{2})[-/](\d{2})[-/](\d{4})\b' + + match = re.search(patron_fecha, texto) + if match: + if match.group(1): # Formato YYYY-MM-DD o YYYY/MM/DD + año = match.group(1) + mes = match.group(2).zfill(2) + dia = match.group(3).zfill(2) + else: # Formato DD-MM-YYYY o DD/MM/YYYY + dia = match.group(4).zfill(2) + mes = match.group(5).zfill(2) + año = match.group(6) + return (dia, mes, año) + except: + pass + + return None # No se encontró + + +def get_xml(article_docx, data_front, data, data_back): + # Crear el elemento raíz + nsmap = { + 'mml': 'http://www.w3.org/1998/Math/MathML', + 'xlink': 'http://www.w3.org/1999/xlink' + } + root = etree.Element('article', + nsmap=nsmap, + attrib={ + 'article-type': 'research-article', + 'dtd-version': '1.1', + 'specific-use': 'sps-1.9', + '{http://www.w3.org/XML/1998/namespace}lang': article_docx.language or 'en'} + #'{http://www.w3.org/1998/Math/MathML}mml': 'http://www.w3.org/1998/Math/MathML', + #'{http://www.w3.org/1999/xlink}xlink': 'http://www.w3.org/1999/xlink'} + ) + + # Añadir un elemento hijo + front = etree.SubElement(root, "front") + body = etree.SubElement(root, "body") + back = etree.SubElement(root, "back") + node_reflist = etree.SubElement(back, 'ref-list') + + subsec = None + num_table = 1 + continue_t = False + arr_subarticle = [] + + node = etree.SubElement(front, 'journal-meta') + + if article_docx.acronym: + node_tmp = etree.SubElement(node, 'journal-id') + node_tmp.set('journal-id-type', 'publisher-id') + node_tmp.text = article_docx.acronym + + if article_docx.title_nlm: + node_tmp = etree.SubElement(node, 'journal-id') + node_tmp.set('journal-id-type', 'nlm-ta') + node_tmp.text = article_docx.title_nlm + + node_tmp = etree.SubElement(node, 'journal-title-group') + + if article_docx.journal_title: + node_tmp2 = etree.SubElement(node_tmp, 'journal-title') + node_tmp2.text = article_docx.journal_title + + if article_docx.short_title: + node_tmp2 = etree.SubElement(node_tmp, 'abbrev-journal-title') + node_tmp2.set('abbrev-type', 'publisher') + node_tmp2.text = article_docx.short_title + + if article_docx.pissn: + node_tmp = etree.SubElement(node, 'issn') + node_tmp.set('pub-type', 'ppub') + node_tmp.text = article_docx.pissn + + if article_docx.eissn: + node_tmp = etree.SubElement(node, 'issn') + node_tmp.set('pub-type', 'epub') + node_tmp.text = article_docx.eissn + + node_tmp = etree.SubElement(node, 'publisher') + + if article_docx.pubname: + node_tmp2 = etree.SubElement(node_tmp, 'publisher-name') + node_tmp2.text = article_docx.pubname + + ##### Article Meta + + translates = [] + current_trans = [] + + for block in article_docx.content: + if ( + block.block_type == "paragraph_with_language" + and block.value.get("label") == "" + ): + # Si ya tenemos contenido acumulado, lo guardamos como parte + if current_trans: + translates.append(current_trans) + current_trans = [] + current_trans.append(block) + + if current_trans: + translates.append(current_trans) + + for i, data_t in enumerate(translates): + if i == 0: + node = etree.SubElement(front, 'article-meta') + else: + subarticle = etree.SubElement(root, "sub-article") + arr_subarticle.append(subarticle) + subarticle.attrib['article-type'] = "translation" + subarticle.attrib['id'] = f"S{len(arr_subarticle)}" + subarticle.attrib['{http://www.w3.org/XML/1998/namespace}lang'] = data_t[0].value['language'] + + node = etree.SubElement(subarticle, 'front-stub') + + val = next( + (b.value['paragraph'] for b in data_t + if b.block_type == 'paragraph' and b.value.get('label') == ''), + None + ) + + if val: + node_tmp = etree.SubElement(node, 'article-id') + node_tmp.set('pub-id-type', 'doi') + node_tmp.text = val + + val = next( + (b.value['paragraph'] for b in data_t + if b.block_type == 'paragraph' and b.value.get('label') == ''), + None + ) + + if val: + node_tmp = etree.SubElement(node, 'article-categories') + node_tmp2 = etree.SubElement(node_tmp, 'subj-group') + node_tmp2.set('subj-group-type', 'heading') + node_tmp3 = etree.SubElement(node_tmp2, 'subject') + node_tmp3.text = val + + val = next( + (b.value['paragraph'] for b in data_t + if b.block_type == 'paragraph_with_language' and b.value.get('label') == ''), + None + ) + + if val: + node_tmp = etree.SubElement(node, 'title-group') + node_tmp2 = etree.SubElement(node_tmp, 'article-title') + append_fragment(node_tmp2, val) + + vals = [ + b + for b in data_t + if b.block_type == 'paragraph_with_language' and b.value.get('label') == '' + ] + + for val in vals: + node_tmp2 = etree.SubElement(node_tmp, 'trans-title-group') + node_tmp2.set('{http://www.w3.org/XML/1998/namespace}lang', val.value.get('language')) + node_tmp3 = etree.SubElement(node_tmp2, 'trans-title') + append_fragment(node_tmp3, val.value.get('paragraph')) + + node_tmp = etree.SubElement(node, 'contrib-group') + + vals = [ + b + for b in data_t + if b.block_type == 'author_paragraph' + ] + + for val in vals: + node_tmp2 = etree.SubElement(node_tmp, 'contrib') + node_tmp2.set('contrib-type', 'author') + if val.value.get('orcid'): + node_tmp3 = etree.SubElement(node_tmp2, 'contrib-id') + node_tmp3.set('contrib-id-type', 'orcid') + node_tmp3.text = val.value.get('orcid') + node_tmp3 = etree.SubElement(node_tmp2, 'name') + if val.value.get('surname'): + node_tmp4 = etree.SubElement(node_tmp3, 'surname') + append_fragment(node_tmp4, val.value.get('surname')) + + if val.value.get('given_names'): + node_tmp4 = etree.SubElement(node_tmp3, 'given-names') + append_fragment(node_tmp4, val.value.get('given_names')) + + if val.value.get('affid'): + node_tmp3 = etree.SubElement(node_tmp2, 'xref') + node_tmp3.set('ref-type', 'aff') + node_tmp3.set('rid', f"aff{val.value.get('affid')}") + node_tmp3.text = val.value.get('char') or ('*' * int(val.value.get('affid'))) + + vals = [ + b + for b in data_t + if b.block_type == 'aff_paragraph' + ] + + for val in vals: + node_tmp = etree.SubElement(node, 'aff') + node_tmp.set('id', f"aff{val.value.get('affid')}") + + node_tmp2 = etree.SubElement(node_tmp, 'label') + node_tmp2.text = val.value.get('char') or ('*' * int(val.value.get('affid'))) + + if val.value.get('orgname'): + node_tmp2 = etree.SubElement(node_tmp, 'institution') + node_tmp2.set('content-type', 'orgname') + append_fragment(node_tmp2, val.value.get('orgname')) + + if val.value.get('orgdiv1'): + node_tmp2 = etree.SubElement(node_tmp, 'institution') + node_tmp2.set('content-type', 'orgdiv1') + append_fragment(node_tmp2, val.value.get('orgdiv1')) + + if val.value.get('orgdiv2'): + node_tmp2 = etree.SubElement(node_tmp, 'institution') + node_tmp2.set('content-type', 'orgdiv2') + append_fragment(node_tmp2, val.value.get('orgdiv2')) + + node_tmp2 = etree.SubElement(node_tmp, 'addr-line') + + if val.value.get('city'): + node_tmp3 = etree.SubElement(node_tmp2, 'city') + append_fragment(node_tmp3, val.value.get('city')) + + if val.value.get('state'): + node_tmp3 = etree.SubElement(node_tmp2, 'state') + append_fragment(node_tmp3, val.value.get('state')) + + if val.value.get('country'): + node_tmp2 = etree.SubElement(node_tmp, 'country') + node_tmp2.set('country', val.value.get('code_country')) + append_fragment(node_tmp2, val.value.get('code_country')) + + node_tmp = etree.SubElement(node, 'author-notes') + + for val in vals: + + if val.value.get('text_aff'): + node_tmp2 = etree.SubElement(node_tmp, 'fn') + node_tmp2.set('fn-type', 'other') + node_tmp2.set('id', f"fn{val.value.get('affid')}") + + node_tmp3 = etree.SubElement(node_tmp2, 'label') + node_tmp3.text = val.value.get('char') or ('*' * int(val.value.get('affid'))) + + node_tmp3 = etree.SubElement(node_tmp2, 'p') + append_fragment(node_tmp3, val.value.get('text_aff')) + + if article_docx.artdate: + node_tmp = etree.SubElement(node, 'pub-date') + node_tmp.set('date-type', 'pub') + node_tmp.set('publication-format', 'electronic') + + node_tmp2 = etree.SubElement(node_tmp, 'day') + node_tmp2.text = article_docx.artdate.strftime("%d") + + node_tmp2 = etree.SubElement(node_tmp, 'month') + node_tmp2.text = article_docx.artdate.strftime("%m") + + node_tmp2 = etree.SubElement(node_tmp, 'year') + node_tmp2.text = article_docx.artdate.strftime("%Y") + + if article_docx.dateiso: + node_tmp = etree.SubElement(node, 'pub-date') + node_tmp.set('date-type', 'collection') + node_tmp.set('publication-format', 'electronic') + + if article_docx.dateiso.split('-')[2] and article_docx.dateiso.split('-')[2] != '00': + node_tmp2 = etree.SubElement(node_tmp, 'day') + node_tmp2.text = article_docx.dateiso.split('-')[2] + + if article_docx.dateiso.split('-')[1] and article_docx.dateiso.split('-')[1] != '00': + node_tmp2 = etree.SubElement(node_tmp, 'month') + node_tmp2.text = article_docx.dateiso.split('-')[1] + + node_tmp2 = etree.SubElement(node_tmp, 'year') + node_tmp2.text = article_docx.dateiso.split('-')[0] + + if article_docx.vol: + node_tmp = etree.SubElement(node, 'volume') + node_tmp.text = str(article_docx.vol) + + if article_docx.issue: + node_tmp = etree.SubElement(node, 'issue') + node_tmp.text = str(article_docx.issue) + + if article_docx.elocatid: + node_tmp = etree.SubElement(node, 'elocation-id') + node_tmp.text = article_docx.elocatid + + node_tmp = etree.SubElement(node, 'history') + + val = next( + (b.value['paragraph'] for b in data_t + if b.block_type == 'paragraph' and b.value.get('label') == ''), + None + ) + + date = extract_date(val) + + if date: + node_tmp2 = etree.SubElement(node_tmp, 'date') + node_tmp2.set('date-type', 'received') + + node_tmp3 = etree.SubElement(node_tmp2, 'day') + node_tmp3.text = date[0] + + node_tmp3 = etree.SubElement(node_tmp2, 'month') + node_tmp3.text = date[1] + + node_tmp3 = etree.SubElement(node_tmp2, 'year') + node_tmp3.text = date[2] + + val = next( + (b.value['paragraph'] for b in data_t + if b.block_type == 'paragraph' and b.value.get('label') == ''), + None + ) + + date = extract_date(val) + + if date: + node_tmp2 = etree.SubElement(node_tmp, 'date') + node_tmp2.set('date-type', 'accepted') + + node_tmp3 = etree.SubElement(node_tmp2, 'day') + node_tmp3.text = date[0] + + node_tmp3 = etree.SubElement(node_tmp2, 'month') + node_tmp3.text = date[1] + + node_tmp3 = etree.SubElement(node_tmp2, 'year') + node_tmp3.text = date[2] + + node_tmp = etree.SubElement(node, 'permissions') + + if article_docx.license: + node_tmp2 = etree.SubElement(node_tmp, 'license') + node_tmp2.set('license-type', 'open-access') + node_tmp2.set("{http://www.w3.org/1999/xlink}href", article_docx.license) + node_tmp2.set("{http://www.w3.org/XML/1998/namespace}lang", article_docx.language) + + node_tmp3 = etree.SubElement(node_tmp2, 'license-p') + node_tmp3.text = "Este es un artículo con licencia..." + + vals = [ + b + for b in data_t + if b.block_type == 'paragraph' + and b.value.get('label') == '' + ] + + vals2 = [ + b + for b in data_t + if b.block_type == 'paragraph_with_language' + and b.value.get('label') == '' + ] + + node_tmp = etree.SubElement(node, 'abstract') + + if vals[0]: + node_tmp2 = etree.SubElement(node_tmp, 'title') + append_fragment(node_tmp2, vals[0].value.get('paragraph')) + + if vals2[0]: + + # Encuentra su índice original en article_docx.content + last_index = data_t.index(vals2[0]) + + # Recorre los bloques siguientes + following_paragraphs = [] + for block in data_t[last_index:]: + if (block.block_type == 'paragraph' and block.value.get('label') == '

    ') or (block.block_type == 'paragraph_with_language' and block.value.get('label') == ''): + subsection = extract_subsection(block.value.get('paragraph')) + + if subsection['title']: + node_tmp2 = etree.SubElement(node_tmp, 'sec') + node_tmp3 = etree.SubElement(node_tmp2, 'title') + append_fragment(node_tmp3, subsection['title']) + node_tmp3 = etree.SubElement(node_tmp2, 'p') + append_fragment(node_tmp3, subsection['content']) + else: + node_tmp2 = etree.SubElement(node_tmp, 'p') + append_fragment(node_tmp2, subsection['content']) + else: + break + + for i, val in enumerate(vals[1:], start=1): + node_tmp = etree.SubElement(node, 'trans-abstract') + node_tmp.set("{http://www.w3.org/XML/1998/namespace}lang", vals2[i].value.get('language')) + + node_tmp2 = etree.SubElement(node_tmp, 'title') + append_fragment(node_tmp2, val.value.get('paragraph')) + + last_index = data_t.index(vals2[i]) + + # Recorre los bloques siguientes + following_paragraphs = [] + for block in data_t[last_index:]: + if (block.block_type == 'paragraph' and block.value.get('label') == '

    ') or (block.block_type == 'paragraph_with_language' and block.value.get('label') == ''): + subsection = extract_subsection(block.value.get('paragraph')) + + if subsection['title']: + node_tmp2 = etree.SubElement(node_tmp, 'sec') + node_tmp3 = etree.SubElement(node_tmp2, 'title') + append_fragment(node_tmp3, subsection['title']) + node_tmp3 = etree.SubElement(node_tmp2, 'p') + append_fragment(node_tmp3, subsection['content']) + else: + node_tmp2 = etree.SubElement(node_tmp, 'p') + append_fragment(node_tmp2, subsection['content']) + else: + break + + vals = [ + b + for b in data_t + if b.block_type == 'paragraph' + and b.value.get('label') == '' + ] + + vals2 = [ + b + for b in data_t + if b.block_type == 'paragraph_with_language' + and b.value.get('label') == '' + ] + + for i, val in enumerate(vals): + node_tmp = etree.SubElement(node, 'kwd-group') + node_tmp.set("{http://www.w3.org/XML/1998/namespace}lang", vals2[i].value.get('language')) + + node_tmp2 = etree.SubElement(node_tmp, 'title') + append_fragment(node_tmp2, val.value.get('paragraph')) + #node_tmp2.text = val.value.get('paragraph') + + for kw in vals2[i].value.get('paragraph').split(', '): + node_tmp2 = etree.SubElement(node_tmp, 'kwd') + append_fragment(node_tmp2, kw) + + countFN = 0 + for i, d in enumerate(data): + node = body + + if continue_t: + continue_t = False + continue + + if d['value']['label'] == '': + val_p = d['value']['paragraph'].lower() + attrib={} + if re.search(r"^(intro|sinops|synops)", val_p): + attrib={'sec-type': 'intro'} + elif re.search(r"^(caso|case)", val_p): + attrib={'sec-type': 'cases'} + elif re.search(r"^(conclus|comment|coment)", val_p): + attrib={'sec-type': 'conclusions'} + elif re.search(r"^(discus)", val_p): + attrib={'sec-type': 'discussion'} + elif re.search(r"^(materia)", val_p): + attrib={'sec-type': 'materials'} + elif re.search(r"^(proced|method|métod|metod)", val_p): + attrib={'sec-type': 'methods'} + elif re.search(r"^(result|statement|finding|declara|hallaz)", val_p): + attrib={'sec-type': 'results'} + elif re.search(r"^(subject|participant|patient|pacient|assunt|sujeto)", val_p): + attrib={'sec-type': 'subjects'} + elif re.search(r"^(suplement|material)", val_p): + attrib={'sec-type': 'supplementary-material'} + + node = etree.SubElement(body, 'sec', attrib=attrib) + node_title = etree.SubElement(node, 'title') + append_fragment(node_title, d['value']['paragraph']) + + subsec = False + + if d['value']['label'] == '': + subsec = True + node_sec = etree.SubElement(node, 'sec') + node_title = etree.SubElement(node_sec, 'title') + #if re.search(r'^\[style name="italic"\](.*?)\[/style\]$', d['value']['paragraph']): + if re.search(r'^(.*?)$', d['value']['paragraph']): + #sech = d['value']['paragraph'].replace('[style name="italic"]', '').replace('[/style]', '') + sech = d['value']['paragraph'] + node_subtitle = etree.SubElement(node_title, 'italic') + append_fragment(node_subtitle, sech) + #node_subtitle.text = sech + else: + #node_title.text = d['value']['paragraph'].replace('[style name="italic"]', '').replace('[/style]', '') + pass + + if d['value']['label'] == '': + re_search = re.search(r'list list-type="(.*?)"\]', d['value']['paragraph']) + list_type = re_search.group(1) + attrib={'list-type': list_type} + + if subsec: + node_p = etree.SubElement(node_sec, 'p') + node_list = etree.SubElement(node_p, 'list', attrib=attrib) + else: + node_p = etree.SubElement(node, 'p') + node_list = etree.SubElement(node_p, 'list', attrib=attrib) + + content_list = re.search(r'\[list list-type="[^"]*"\](.*?)\[/list\]', d['value']['paragraph'], re.DOTALL) + content_list = content_list.group(1) + node_list_text = content_list \ + .replace('[list-item]', '

    ') \ + .replace('[/list-item]', '

    ') + #.replace('[style name="italic"]', '').replace('[/style]', '') \ + + node_list_text = etree.fromstring(f"{node_list_text}") + + for child in node_list_text: + node_list.append(child) + + if d['value']['label'] == '' or d['value']['label'] == '': + + attrib={'id': d['value']['tabid']} + + if subsec: + node_p = etree.SubElement(node_sec, 'p') + node_table = etree.SubElement(node_p, 'table-wrap', attrib=attrib) + else: + node_p = etree.SubElement(node, 'p') + node_table = etree.SubElement(node_p, 'table-wrap', attrib=attrib) + + node_label = etree.SubElement(node_table, 'label') + append_fragment(node_label, d.get('value', {}).get('tablabel')) + + node_caption = etree.SubElement(node_table, 'caption') + node_title = etree.SubElement(node_caption, 'title') + append_fragment(node_title, d.get('value', {}).get('title')) + + node_table_text = d['value']['content'] + + # Quitar saltos de línea y espacios extra + node_table_text = re.sub(r"\s*\n\s*", "", node_table_text).replace('
    ','') + + # Parsear la tabla como fragmento XML/HTML + tabla_element = etree.XML(node_table_text) + + # Insertar en el XML principal + node_table.append(tabla_element) + + node_foot = etree.SubElement(node_p, 'table-wrap-foot') + + if d['value']['label'] == '': + countFN += 1 + node_fn = etree.SubElement(node_foot, 'fn', attrib={"id":f"TFN{str(countFN)}"}) + node_fnp = etree.SubElement(node_fn, 'p') + append_fragment(node_fnp, d['value']['paragraph']) + + if d['value']['label'] == '': + + attrib={'id': d['value']['figid']} + + if subsec: + node_p = etree.SubElement(node_sec, 'p') + node_fig = etree.SubElement(node_p, 'fig', attrib=attrib) + else: + node_p = etree.SubElement(node, 'p') + node_fig = etree.SubElement(node_p, 'fig', attrib=attrib) + + etree.SubElement(node_fig, 'label').text = d['value']['figlabel'] + node_caption = etree.SubElement(node_fig, 'caption') + etree.SubElement(node_caption, 'title').text = d['value']['title'] if 'title' in d['value'] else None + + Image = get_image_model() + image_id = d['value']['image'] + image_obj = Image.objects.get(pk=image_id) + file_name = os.path.basename(image_obj.file.name) + original_url = image_obj.get_rendition('original').url + original_filename = os.path.basename(urlparse(original_url).path) + + #node_caption = etree.SubElement(node_fig, 'graphic', attrib={'{http://www.w3.org/1999/xlink}ref': f"{d['value']['figid']}.jpeg"}) + node_caption = etree.SubElement(node_fig, 'graphic', attrib={'{http://www.w3.org/1999/xlink}href': original_filename}) + + if d['value']['label'] == '': + + node_attrib = etree.SubElement(node_fig, 'attrib') + append_fragment(node_attrib, d['value']['paragraph']) + + if d['value']['label'] == '': + attrib={'id': d['value']['eid']} + + if subsec: + node_p = etree.SubElement(node_sec, 'p') + node_f = etree.SubElement(node_p, 'disp-formula', attrib=attrib) + else: + node_p = etree.SubElement(node, 'p') + node_f = etree.SubElement(node_p, 'disp-formula', attrib=attrib) + + + for c in d['value']['content']: + if c['type'] == 'text': + node_t = etree.SubElement(node_f, 'label') + append_fragment(node_t, c['value']) + if c['type'] == 'formula': + append_fragment(node_f, c['value']) + + if d['value']['label'] == '': + attrib={'id': d['value']['eid']} + + if subsec: + node_p = etree.SubElement(node_sec, 'p') + else: + node_p = etree.SubElement(node, 'p') + + content = '' + for c in d['value']['content']: + if c['type'] == 'text': + content += c['value'] + if c['type'] == 'formula': + node_f = etree.Element('inline-formula', attrib=attrib) + append_fragment(node_f, c['value']) + content += etree.tostring(node_f, pretty_print=True, encoding="unicode") + + append_fragment(node_p, content) + + if d['value']['label'] == '

    ': + if subsec: + node_p = etree.SubElement(node_sec, 'p') + else: + node_p = etree.SubElement(node, 'p') + + #refs = extraer_citas_apa(d['value']['paragraph'].replace('[style name="italic"]', '').replace('[/style]', ''), data_back) + #refs = extraer_citas_apa(d['value']['paragraph'].replace('', '').replace('', ''), data_back) + if 'xref' not in d['value']['paragraph']: + refs = proccess_labeled_text(d['value']['paragraph'], data_back) + for r in refs: + #print(f"r in refs: {r}") + d['value']['paragraph'] = d['value']['paragraph'].replace(r['cita'], f"{r['cita']}") + """ + if 'et al' in r['cita']: + et_al_replace = r['cita'].replace('et al', 'et al') + d['value']['paragraph'] = d['value']['paragraph'].replace(et_al_replace, f"{et_al_replace}") + else: + #print(r['cita']) + d['value']['paragraph'] = d['value']['paragraph'].replace(r['cita'], f"{r['cita']}") + """ + + elements = proccess_special_content(d['value']['paragraph'], data) + for e in elements: + d['value']['paragraph'] = d['value']['paragraph'].replace(e['label'], f"{e['label']}") + + append_fragment(node_p, d['value']['paragraph']) + + #if re.search(r'^\[style name="italic"\](.*?)\[/style\]$', d['value']['paragraph']): + #if re.search(r'^(.*?)$', d['value']['paragraph']): + # node_title.text = '' + #ph = d['value']['paragraph'].replace('', '').replace('', '') + #node_subtitle = etree.SubElement(node_title, 'italic') + #node_subtitle.text = ph + #node_subtitle = etree.fromstring(f"{d['value']['paragraph']}") + #for child in node_subtitle: + # node_title.append(child) + #else: + #node_p.text = d['value']['paragraph'].replace('[style name="italic"]', '').replace('[/style]', '') + #p_text = d['value']['paragraph'].replace('[style name="italic"]', '').replace('[/style]', '') + # append_fragment(node_p, d['value']['paragraph']) + #node_p.text = d['value']['paragraph'].replace('[style name="italic"]', '').replace('[/style]', '') + #p_text = d['value']['paragraph'] + #try: + #node_text = etree.fromstring(f"{p_text}") + #for child in node_text: + #node_p.append(child) + #except Exception as e: + #print(p_text) + #print(e) + + if d['value']['label'] == '': + if subsec: + node_p = etree.SubElement(node_sec, 'p') + else: + node_p = etree.SubElement(node, 'p') + + p_text = '' + if 'content' in d['value']: + for val in d['value']['content']: + if val['type'] == 'text': + type_val = 'text' + else: + type_val = 'formula' + + #if re.search(r'^\[style name="italic"\](.*?)\[/style\]$', val['value']): + if re.search(r'^(.*?)$', val['value']): + node_title.text = '' + #ph = val['value'].replace('[style name="italic"]', '').replace('[/style]', '') + ph = val['value'] + node_subtitle = etree.fromstring(f"{ph}") + for child in node_subtitle: + node_title.append(child) + else: + #p_text += val['value'].replace('[style name="italic"]', '').replace('[/style]', '').replace('xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math"', '') + p_text += val['value'].replace('xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math"', '') + + node_text = etree.fromstring(f"{p_text}") + for child in node_text: + node_p.append(child) + + for i, d in enumerate(data_back): + if d['value']['label'] == '': + node_tit = etree.SubElement(node_reflist, 'title') + append_fragment(node_tit, d['value']['paragraph']) + if d['value']['label'] == '

    ': + values = d['value'] + node_ref = etree.SubElement(node_reflist, 'ref', attrib={"id": values['refid']}) + #node_label = etree.SubElement(node_ref, 'label') + #append_fragment(node_label, values['refid'].replace('B', '')) + node_mix = etree.SubElement(node_ref, 'mixed-citation') + append_fragment(node_mix, values['paragraph']) + + if values['reftype'] == 'journal': + node_elem = etree.SubElement(node_ref, 'element-citation', attrib={"publication-type": values['reftype']}) + node_person = etree.SubElement(node_elem, 'person-group', attrib={"person-group-type": "author"}) + for a in values['authors']: + node_name = etree.SubElement(node_person, 'name') + node_sname = etree.SubElement(node_name, 'surname') + node_gname = etree.SubElement(node_name, 'given-names') + append_fragment(node_sname, a['value']['surname']) + append_fragment(node_gname, a['value']['given_names']) + + append_fragment(etree.SubElement(node_ref, 'article-title'), values['title']) + append_fragment(etree.SubElement(node_ref, 'source'), values['source']) + append_fragment(etree.SubElement(node_ref, 'year'), str(values['date'])) + append_fragment(etree.SubElement(node_ref, 'volume'), str(values['vol'])) + append_fragment(etree.SubElement(node_ref, 'issue'), str(values['issue'])) + + if values['fpage'] and values['fpage'][0] == 'e': + append_fragment(etree.SubElement(node_ref, 'elocation-id'), values['fpage']) + else: + append_fragment(etree.SubElement(node_ref, 'fpage'), str(values['fpage'])) + append_fragment(etree.SubElement(node_ref, 'lpage'), str(values['lpage'])) + + append_fragment(etree.SubElement(node_ref, 'pub-id', attrib={"pub-id-type": "doi"}), values['doi']) + + if values['uri']: + append_fragment(etree.SubElement(node_ref, 'ext-link', + attrib={ + "ext-link-type": "uri", + "{http://www.w3.org/1999/xlink}href": values['uri'] + }), + values['uri']) + + if values['reftype'] == 'book': + node_elem = etree.SubElement(node_ref, 'element-citation', attrib={"publication-type": values['reftype']}) + node_person = etree.SubElement(node_elem, 'person-group', attrib={"person-group-type": "author"}) + for a in values['authors']: + node_name = etree.SubElement(node_person, 'name') + node_sname = etree.SubElement(node_name, 'surname') + node_gname = etree.SubElement(node_name, 'given-names') + append_fragment(node_sname, a['value']['surname']) + append_fragment(node_gname, a['value']['given_names']) + + append_fragment(etree.SubElement(node_ref, 'part-title'), values['chapter']) + append_fragment(etree.SubElement(node_ref, 'source'), values['source']) + append_fragment(etree.SubElement(node_ref, 'edition'), values['edition']) + append_fragment(etree.SubElement(node_ref, 'publisher-loc'), values['location']) + append_fragment(etree.SubElement(node_ref, 'publisher-name'), values['organization']) + append_fragment(etree.SubElement(node_ref, 'year'), str(values['date'])) + append_fragment(etree.SubElement(node_ref, 'fpage'), str(values['fpage'])) + append_fragment(etree.SubElement(node_ref, 'lpage'), str(values['lpage'])) + + + if values['reftype'] == 'data': + node_elem = etree.SubElement(node_ref, 'element-citation', attrib={"publication-type": values['reftype']}) + node_person = etree.SubElement(node_elem, 'person-group', attrib={"person-group-type": "author"}) + for a in values['authors']: + node_name = etree.SubElement(node_person, 'name') + node_sname = etree.SubElement(node_name, 'surname') + node_gname = etree.SubElement(node_name, 'given-names') + append_fragment(node_sname, a['value']['surname']) + append_fragment(node_gname, a['value']['given_names']) + + append_fragment(etree.SubElement(node_ref, 'data-title'), values['title']) + append_fragment(etree.SubElement(node_ref, 'version'), values['version']) + append_fragment(etree.SubElement(node_ref, 'year'), str(values['date'])) + append_fragment(etree.SubElement(node_ref, 'source'), values['source']) + append_fragment(etree.SubElement(node_ref, 'pub-id', attrib={"pub-id-type": "doi"}), values['doi']) + append_fragment(etree.SubElement(node_ref, 'ext-link', + attrib={ + "ext-link-type": "uri", + "{http://www.w3.org/1999/xlink}href": values['uri'] + }), + values['uri']) + + if values['reftype'] == 'webpage': + node_elem = etree.SubElement(node_ref, 'element-citation', attrib={"publication-type": values['reftype']}) + node_person = etree.SubElement(node_elem, 'person-group', attrib={"person-group-type": "author"}) + for a in values['authors']: + node_name = etree.SubElement(node_person, 'name') + node_sname = etree.SubElement(node_name, 'surname') + node_gname = etree.SubElement(node_name, 'given-names') + append_fragment(node_sname, a['value']['surname']) + append_fragment(node_gname, a['value']['given_names']) + + append_fragment(etree.SubElement(node_ref, 'source'), values['source']) + append_fragment(etree.SubElement(node_ref, 'ext-link', + attrib={ + "ext-link-type": "uri", + "{http://www.w3.org/1999/xlink}href": values['uri'] + }), + values['uri']) + append_fragment(etree.SubElement(node_ref, 'access-date'), values['access_date']) + + if values['reftype'] == 'confproc': + node_elem = etree.SubElement(node_ref, 'element-citation', attrib={"publication-type": values['reftype']}) + node_person = etree.SubElement(node_elem, 'person-group', attrib={"person-group-type": "author"}) + for a in values['authors']: + node_name = etree.SubElement(node_person, 'name') + node_sname = etree.SubElement(node_name, 'surname') + node_gname = etree.SubElement(node_name, 'given-names') + append_fragment(node_sname, a['value']['surname']) + append_fragment(node_gname, a['value']['given_names']) + + append_fragment(etree.SubElement(node_ref, 'source'), values['source']) + append_fragment(etree.SubElement(node_ref, 'conf-name'), values['title']) + append_fragment(etree.SubElement(node_ref, 'conf-num'), str(values['issue'])) + append_fragment(etree.SubElement(node_ref, 'conf-date'), str(values['date'])) + append_fragment(etree.SubElement(node_ref, 'conf-loc'), values['location']) + append_fragment(etree.SubElement(node_ref, 'publisher-loc'), values['org_location']) + append_fragment(etree.SubElement(node_ref, 'publisher-name'), values['organization']) + append_fragment(etree.SubElement(node_ref, 'page'), values['pages']) + + if values['reftype'] == 'thesis': + node_elem = etree.SubElement(node_ref, 'element-citation', attrib={"publication-type": values['reftype']}) + node_person = etree.SubElement(node_elem, 'person-group', attrib={"person-group-type": "author"}) + for a in values['authors']: + node_name = etree.SubElement(node_person, 'name') + node_sname = etree.SubElement(node_name, 'surname') + node_gname = etree.SubElement(node_name, 'given-names') + append_fragment(node_sname, a['value']['surname']) + append_fragment(node_gname, a['value']['given_names']) + + append_fragment(etree.SubElement(node_ref, 'source'), values['source']) + append_fragment(etree.SubElement(node_ref, 'publisher-loc'), values['org_location']) + append_fragment(etree.SubElement(node_ref, 'publisher-name'), values['organization']) + append_fragment(etree.SubElement(node_ref, 'year'), str(values['date'])) + append_fragment(etree.SubElement(node_ref, 'page'), values['pages']) + + # Convertir a una cadena XML + xml_como_texto = etree.tostring(root, pretty_print=True, encoding="unicode") + + return xml_como_texto, data \ No newline at end of file diff --git a/markuplib/__init__.py b/markuplib/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/markuplib/function_docx.py b/markuplib/function_docx.py new file mode 100644 index 0000000..fb1e930 --- /dev/null +++ b/markuplib/function_docx.py @@ -0,0 +1,587 @@ +import docx +from docx.oxml.table import CT_Tbl +from docx.oxml.text.paragraph import CT_P +from docx.oxml.ns import qn +from lxml import etree, objectify +from wagtail.images import get_image_model +from django.core.files.base import ContentFile +import re, zipfile +import os + +ImageModel = get_image_model() + + +class functionsDocx: + + def openDocx(filename): + doc = docx.Document(filename) + return doc + + # Función: solo reemplaza mfenced que NO tengan atributos open/close y que usen | + def replace_mfenced_pipe_only(self, mathml_root): + mml_ns = "http://www.w3.org/1998/Math/MathML" + for mfenced in mathml_root.xpath(".//mml:mfenced", namespaces={"mml": mml_ns}): + has_open = mfenced.get("open") + has_close = mfenced.get("close") + separators = mfenced.get("separators", "") + + # Solo reemplazar si: no tiene open/close y usa barra + if not has_open and not has_close and separators == "|": + mrow = etree.Element(f"{{{mml_ns}}}mrow") + + mo_open = etree.Element(f"{{{mml_ns}}}mo") + mo_open.text = "(" + mo_close = etree.Element(f"{{{mml_ns}}}mo") + mo_close.text = ")" + + mrow.append(mo_open) + for child in list(mfenced): + mrow.append(child) + mrow.append(mo_close) + + parent = mfenced.getparent() + if parent is not None: + parent.replace(mfenced, mrow) + return mathml_root + + + def extract_numbering_info(self, docx_path): + # Diccionario para mapear numId a su tipo (numerada o viñeta) + numbering_map = {} + namespaces = '{http://schemas.openxmlformats.org/wordprocessingml/2006/main}' + + # Abrir el archivo DOCX como un archivo ZIP + with zipfile.ZipFile(docx_path, 'r') as docx: + # Verificar si existe el archivo numbering.xml + if 'word/numbering.xml' in docx.namelist(): + # Extraer el archivo numbering.xml + numbering_xml = docx.read('word/numbering.xml') + # Parsear el XML + numbering_tree = etree.fromstring(numbering_xml) + + # Buscar todas las definiciones abstractas de numeración + for abstract_num in numbering_tree.findall('.//w:abstractNum', namespaces=numbering_tree.nsmap): + abstract_num_id = abstract_num.get(namespaces+'abstractNumId') + # Revisar los niveles dentro de la definición abstracta + for lvl in abstract_num.findall('.//w:lvl', namespaces=abstract_num.nsmap): + num_fmt = lvl.find('.//w:numFmt', lvl.nsmap).get(namespaces+'val') + ilvl = lvl.get(namespaces+'ilvl') + + # Asignar el tipo según el valor de numFmt + if abstract_num_id not in numbering_map: + numbering_map[abstract_num_id] = {} + + numbering_map[abstract_num_id][ilvl] = num_fmt + + # Relacionar numId con su abstractNumId + for num in numbering_tree.findall('.//w:num', namespaces=numbering_tree.nsmap): + num_id = num.get(namespaces+'numId') + abstract_num_id = num.find('.//w:abstractNumId', namespaces=num.nsmap).get(namespaces+'val') + if abstract_num_id in numbering_map: + numbering_map[abstract_num_id]['numId'] = num_id + else: + numbering_map = None + + return numbering_map + + + def extract_hiperlinks_info(self, docx_path): + hiperlinks = [] + with zipfile.ZipFile(docx_path, 'r') as docx: + # Leer relaciones del documento + rels_path = 'word/_rels/document.xml.rels' + if rels_path in docx.namelist(): + rels_data = docx.read(rels_path) + rels_root = etree.fromstring(rels_data) + + # Buscar hipervínculos + for rel in rels_root.findall('{http://schemas.openxmlformats.org/package/2006/relationships}Relationship'): + r_id = rel.attrib['Id'] + target = rel.attrib['Target'] + if rel.attrib['Type'].endswith('/hyperlink'): + hiperlinks.append((r_id, target)) + + return dict(hiperlinks) + + + def extract_hiperlink(self, element, rels_map, namespaces): + links = [] + + # 1. Buscar hipervínculos de texto (recursivo con .//) + for hyperlink in element.findall('.//w:hyperlink', namespaces=namespaces): + r_id = hyperlink.attrib.get('{http://schemas.openxmlformats.org/officeDocument/2006/relationships}id') + if r_id and r_id in rels_map: + links.append(rels_map[r_id]) + + # 2. Buscar hipervínculos en imágenes (recursivo con .//) + for hlink in element.findall('.//a:hlinkClick', namespaces=namespaces): + r_id = hlink.attrib.get('{http://schemas.openxmlformats.org/officeDocument/2006/relationships}id') + if r_id and r_id in rels_map: + links.append(rels_map[r_id]) + + return ' '.join(links) if links else None + + + def extractContent(self, doc, doc_path): + + list_types = self.extract_numbering_info(doc_path) + + hiperlinks_info = self.extract_hiperlinks_info(doc_path) + + found_hiperlinks = True + + # Obtener el directorio actual del archivo .py + BASE_DIR = os.path.dirname(os.path.abspath(__file__)) + + # Construir la ruta completa al archivo XSLT + xslt_path = os.path.join(BASE_DIR, "omml2mml.xsl") + + # Cargar XSLT y prepararlo + xslt = etree.parse(xslt_path) + transform = etree.XSLT(xslt) + + def match_paragraph(text): + keywords = r'(?im)^\s*(?:)?\s*(palabra(?:s)?\s*clave|palavras?\s*-?\s*chave|keywords?)\s*(?:)?\s*(?::|\s*:\s*)\s*(.+)$' + #history = r'\d{2}/\d{2}/\d{4}' + #corresp = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' + abstract = r'(?i)^resumen|^resumo|^abstract' + accepted = r'(?i)aceptado|accepted|aceited|aprovado' + received = r'(?i)recibido|received|recebido' + + if re.search(keywords, text): + return '' + #if re.search(history, text): + #return '' + #if re.search(corresp, text): + #return '' + if re.search(abstract, text): + return '' + if re.search(accepted, text): + return '' + if re.search(received, text): + return '' + return False + + def matches_section(a, b): + try: + return ( + a.get('size') == b.get('size') and + a.get('bold') == b.get('bold') and + a.get('isupper') == b.get('isupper') + ) + except Exception as e: + print(f"Error comparando secciones: {e}") + return False + + def section_priority(sections): + return (-sections['size'], not sections['bold'], not sections['isupper']) + + def identify_section(sections, size, bold, text): + if size == 0: + return sections + + isupper = text.isupper() + s_id = {'size': size, 'bold': bold, 'isupper': isupper, 'count': 0} + + if len(sections) == 0: + sections.append(s_id) + return sections + + for section in sections: + if matches_section(s_id, section): + section['count'] += 1 + return sections + + sections.append(s_id) + return sections + + def clean_labels(text): + # Eliminar etiquetas cuadradas tipo [ ... ] con espacios opcionales + extract_label = re.sub(r'\[\s*/?\s*[\w-]+(?:\s+[^\]]+)?\s*\]', '', text) + + # Reemplazar múltiples espacios por uno solo + clean_text = re.sub(r'\s+', ' ', extract_label) + + # Eliminar espacio antes de signos de puntuación + clean_text = re.sub(r'\s+([;:,.])', r'\1', clean_text) + + return clean_text.strip() + + def extrae_Tabla(element, rels_map, namespaces): + # Inicializa la estructura HTML de la tabla + html = "

    \n" + + # Almacena las combinaciones para las celdas + rowspan_dict = {} # {(row, col): rowspan_count} + colspan_dict = {} # {(row, col): colspan_count} + + # Itera sobre las filas de la tabla + for i, row in enumerate(element.xpath('.//w:tr')): + hiperlinks = self.extract_hiperlink(row, rels_map, namespaces) if found_hiperlinks else None + + html += " \n" + # Itera sobre las celdas de cada fila + j = 0 # índice de columna + for cell in row.xpath('.//w:tc'): + # Revisa si la celda está en una posición afectada por rowspan + while (i, j) in rowspan_dict and rowspan_dict[(i, j)] > 0: + # Reduce el contador de rowspan + rowspan_dict[(i, j)] -= 1 + j += 1 # Mueve a la siguiente columna + + # Revisa las propiedades de la celda para rowspan y colspan + cell_props = cell.xpath('.//w:tcPr') + rowspan = 1 + colspan = 1 + + # Procesa rowspan (vMerge) + v_merge_fin = False + v_merge = cell.xpath('.//w:vMerge') + if v_merge: + v_merge_val = v_merge[0].get(qn('w:val')) + if v_merge_val == "restart": + # Es el inicio de una combinación vertical + rowspan = 1 + # Busca el total de filas combinadas contando hacia abajo + k = i + 1 + while k < len(element.xpath('.//w:tr')): + try: + next_cell = element.xpath('.//w:tr')[k].xpath('.//w:tc')[j] + next_merge = next_cell.xpath('.//w:tcPr//w:vMerge') + except: + next_cell = None + next_merge = None + + if next_merge and next_merge[0].get(qn('w:val')) is None: + rowspan += 1 + else: + break + k += 1 + + for k in range(rowspan): + rowspan_dict[(i + k, j)] = rowspan - k - 1 + else: + v_merge_fin = True + + # Procesa colspan (gridSpan) + grid_span = cell.xpath('.//w:gridSpan') + if grid_span: + colspan = int(grid_span[0].get(qn('w:val'))) + for k in range(colspan): + colspan_dict[(i, j + k)] = colspan - k - 1 + + if not v_merge_fin: + # Obtén el contenido del texto de la celda + cell_text = "
    ".join([t.text for t in cell.xpath('.//w:t')]) + cell_text = clean_labels(cell_text) + (f" {hiperlinks}" if hiperlinks else "") + + # Determina el tag a usar (th para el encabezado, td para celdas normales) + tag = "th" if i == 0 else "td" + + # Construye la celda en HTML + cell_html = f" <{tag}" + if rowspan > 1: + cell_html += f' rowspan="{rowspan}"' + if colspan > 1: + cell_html += f' colspan="{colspan}"' + cell_html += f">{cell_text}\n" + + html += cell_html + j += 1 + (colspan - 1) # Avanza las columnas tomando en cuenta el colspan + + html += " \n" + + html += "
    " + return html + + content = [] + sections = [] + images = [] + found_fb = False + review_fb = True + #Palabras a buscar como indicador del primer bloque + start_text = ['introducción', 'introduction', 'introdução'] + + current_list = [] + current_num_id = None + numId = None + namespaces_p = '{http://schemas.openxmlformats.org/wordprocessingml/2006/main}' + + for element in doc.element.body: + if isinstance(element, CT_P): + obj = {} + + namespaces = { + 'w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main', + 'a': 'http://schemas.openxmlformats.org/drawingml/2006/main', + 'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships' + } + + hiperlinks = self.extract_hiperlink(element, hiperlinks_info, namespaces) if found_hiperlinks else None + + obj_image = False + obj_formula = False + + for drawing in element.findall('.//w:drawing', namespaces=namespaces): + if drawing.find('.//a:blip', namespaces=namespaces) is not None: + blip = drawing.find('.//a:blip', namespaces=namespaces) + if blip is not None: + obj_image = True + + rId = blip.get('{http://schemas.openxmlformats.org/officeDocument/2006/relationships}embed') + image_part = doc.part.related_parts[rId] + image_data = image_part.blob + image_name = image_part.partname.split('/')[-1] + + if image_name not in images: + images.append(image_name) + + # Guardar la imagen en Wagtail + wagtail_image = ImageModel.objects.create( + title=image_name, + file=ContentFile(image_data, name=image_name) + ) + + # Referenciar la imagen guardada en el objeto + obj['type'] = 'image' + obj['image'] = wagtail_image.id + + ns_math = { + 'm': 'http://schemas.openxmlformats.org/officeDocument/2006/math', + 'w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main' + } + + for formula in element.findall('.//m:oMathPara', namespaces=ns_math): + obj_formula = True + mathml_result = transform(formula) + mathml_root = etree.fromstring(str(mathml_result)) + mathml_root = self.replace_mfenced_pipe_only(mathml_root) + obj['type'] = 'formula' + obj['formula'] = etree.tostring(mathml_root, pretty_print=True, encoding='unicode') + + + if not obj_image: + paragraph = element + text_paragraph = [] + + # Determina si es parte de una lista + is_numPr = paragraph.find('.//w:numPr', namespaces=paragraph.nsmap) is not None + + # obtiene id y nivel + if is_numPr: + numPr = paragraph.find('.//w:numPr', namespaces=paragraph.nsmap) + numId = numPr.find('.//w:numId', namespaces=paragraph.nsmap).get(namespaces_p + 'val') + type = [(key, objt) for key, objt in list_types.items() if objt['numId'] == numId] + + #Es una lista diferente + if numId != current_num_id: + current_num_id = numId + if len(current_list) > 0: + current_list.append('[/list]') + objl = {} + objl['type'] = 'list' + objl['list'] = '\n'.join(current_list) + current_list = [] + content.append(objl) + list_type = 'bullet' + if type[0][1][str(0)] == 'decimal': + list_type = 'order' + + current_list.append(f'[list list-type="{list_type}"]') + else: + #Se terminaron de agregar elementos a la lista + if len(current_list) > 0: + current_list.append('[/list]') + objl = {} + objl['type'] = 'list' + objl['list'] = '\n'.join(current_list) + current_list = [] + content.append(objl) + + for child in paragraph: + if child.tag == '{http://schemas.openxmlformats.org/wordprocessingml/2006/main}hyperlink': + for r in child.findall('w:r', namespaces=child.nsmap): + t_elem = r.find('w:t', namespaces=child.nsmap) + if t_elem is not None and t_elem.text: + text_paragraph.append(t_elem.text) + + elif child.tag == '{http://schemas.openxmlformats.org/wordprocessingml/2006/main}r': + namespaces = '{http://schemas.openxmlformats.org/wordprocessingml/2006/main}' + sz_element = child.find('.//w:sz', namespaces=child.nsmap) + obj['font_size'] = 0 + + if sz_element is None: + p_pr = paragraph.find('.//w:rPr/w:sz', namespaces=child.nsmap) + if p_pr is not None: + sz_element = p_pr.find('.//w:pPr', namespaces=child.nsmap) + + if sz_element is not None: + xml_string = etree.tostring(sz_element, pretty_print=True, encoding='unicode') + size_element = objectify.fromstring(xml_string) + font_size_value = size_element.get(namespaces+'val') + obj['font_size'] = int(font_size_value)/2 + + color_element = child.find('.//w:color', namespaces=child.nsmap) + + if color_element is None: + p_pr = paragraph.find('.//w:pPr', namespaces=child.nsmap) + if p_pr is not None: + color_element = p_pr.find('.//w:rPr/w:color', namespaces=child.nsmap) + + if color_element is not None: + xml_string_color = etree.tostring(color_element, pretty_print=True, encoding='unicode') + object_element = objectify.fromstring(xml_string_color) + color_value = object_element.get(namespaces + 'val') + obj['color'] = color_value + + b_tag = child.find('.//w:b', namespaces=child.nsmap) + + if b_tag is None: + p_pr = paragraph.find('.//w:rPr/w:b', namespaces=child.nsmap) + if p_pr is not None: + b_tag = p_pr.find('.//w:pPr', namespaces=child.nsmap) + + if b_tag is not None: + val = b_tag.get('{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val') + obj['bold'] = (val is None or val in ['1', 'true', 'True']) + else: + obj['bold'] = False + + i_tag = child.find('.//w:i', namespaces=child.nsmap) + + if i_tag is None: + p_pr = paragraph.find('.//w:rPr/w:i', namespaces=child.nsmap) + if p_pr is not None: + i_tag = p_pr.find('.//w:pPr', namespaces=child.nsmap) + + if i_tag is not None: + val = i_tag.get('{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val') + obj['italic'] = (val is None or val in ['1', 'true', 'True']) + else: + obj['italic'] = False + + s_tag = child.find('.//w:spacing', namespaces=child.nsmap) + + if s_tag is None: + p_pr = paragraph.find('.//w:rPr/w:spacing', namespaces=child.nsmap) + if p_pr is not None: + s_tag = p_pr.find('.//w:pPr', namespaces=child.nsmap) + + if s_tag is not None: + val = s_tag.get('{http://schemas.openxmlformats.org/wordprocessingml/2006/main}before') + obj['spacing'] = not (val is None) + else: + obj['spacing'] = False + + clean_text = clean_labels(child.text) + + #identifica sección + sections = identify_section(sections, obj['font_size'], obj['bold'] , clean_text) + + if obj['italic']: + text_paragraph.append('' + clean_text + '' + (f" {hiperlinks}" if hiperlinks else "")) + else: + text_paragraph.append(clean_text + (f" {hiperlinks}" if hiperlinks else "")) + + paraph = match_paragraph(clean_text) + if paraph: + obj['paraph'] = paraph + obj['type'] = paraph + + if review_fb: + found_fb = any(word in clean_text.lower() for word in start_text) + + #Si se encontró alguna palabra, incluye todo lo anterior en un sólo bloque + if found_fb: + found_fb = False + review_fb = False + found_hiperlinks = False + sections = [sections[-1]] + first_block = '' + tmp_content = [] + abstract_mode = False + + for c in content: + if abstract_mode: + if c['text'] == '' or c['spacing'] is True: + abstract_mode = False + else: + tmp_content.append(c) + continue + + if 'paraph' in c: + tmp_content.append(c) + abstract_mode = False + if c['paraph'] == '': + abstract_mode = True + continue + else: + if 'text' in c: + first_block = first_block + "\n" + c["text"] + if 'table' in c: + first_block = first_block + "\n" + c["table"] + + obj_b = {} + obj_b['type'] = 'first_block' + obj_b['text'] = first_block + tmp_content.append(obj_b) + content = tmp_content + start_text = [] + + if child.tag == f"{{{ns_math['m']}}}oMath": + if 'text' not in obj or not isinstance(obj['text'], list): + obj['type'] = 'compound' + obj['text'] = [] + if len(text_paragraph) > 0: + obj2 = {} + obj2['type'] = 'text' + obj2['value'] = ' '.join(text_paragraph) + obj['text'].append(obj2) + text_paragraph = [] + + mathml_result = transform(child) + mathml_root = etree.fromstring(str(mathml_result)) + self.replace_mfenced_pipe_only(mathml_root) + obj2 = {} + obj2['type'] = 'formula' + obj2['value'] = etree.tostring(mathml_root, pretty_print=True, encoding='unicode') + obj['text'].append(obj2) + + if 'text' not in obj: + obj['text'] = (' '.join(text_paragraph)).strip() + clean_text = clean_labels(obj['text']) + obj['text'] = clean_text + + paraph = match_paragraph(obj['text']) + if paraph: + obj['paraph'] = paraph + obj['type'] = paraph + + if is_numPr: + if 'font_size' in obj: + del obj['font_size'] + current_list.append(f'[list-item]{obj["text"]}[/list-item]') + if isinstance(obj['text'], list) and len(text_paragraph) > 0: + obj2 = {} + obj2['type'] = 'text' + obj2['value'] = ' '.join(text_paragraph) + obj['text'].append(obj2) + text_paragraph = [] + + elif isinstance(element, CT_Tbl): + namespaces = { + 'w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main', + 'a': 'http://schemas.openxmlformats.org/drawingml/2006/main', + 'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships' + } + + table = element + table_data = extrae_Tabla(element, hiperlinks_info, namespaces) + obj = {} + obj['type'] = 'table' + obj['table'] = table_data + + if not is_numPr: + content.append(obj) + sections.sort(key=section_priority) + return sections, content diff --git a/markuplib/omml2mml.xsl b/markuplib/omml2mml.xsl new file mode 100644 index 0000000..dcd23ee --- /dev/null +++ b/markuplib/omml2mml.xsl @@ -0,0 +1,2068 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ˘ + + ¸ + + ` + + - + + + + . + + ˙ + + ˝ + + ´ + + ~ + + ˜ + + ¨ + + ˇ + + ^ + + ¯ + + _ + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + left + + + right + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 0 + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0in + + + 0in + + + 0in + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + false + + + + + + + + + + + + + + + + + + + off + + + + + + + + + + + off + + + + + + + + + + + + + + off + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + 0pt + + + + right + + + left + + + + + right + + + left + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + ¯ + + + + + + + + + + _ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + normal + + + + + + + + monospace + sans-serif-italic + bold-sans-serif + sans-serif-bold-italic + sans-serif + bold-fraktur + fraktur + double-struck + bold-script + script + bold + italic + normal + bold-italic + + + + + + bold + normal + + + + + normal + italic + + + + + + + + + + + + + + + + + + + + + + + + italic + + + bold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + box + + + + + + + + + + + + + + + + + left right top bottom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + -1 + + + + + + + + + + + + + 0 + 1 + + + + + + + + + + + + + 1 + 0 + + + \ No newline at end of file diff --git a/model_ai/__init__.py b/model_ai/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/model_ai/apps.py b/model_ai/apps.py new file mode 100644 index 0000000..8f15738 --- /dev/null +++ b/model_ai/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ModelIAConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "model_ai" \ No newline at end of file diff --git a/model_ai/exceptions.py b/model_ai/exceptions.py new file mode 100644 index 0000000..c1017de --- /dev/null +++ b/model_ai/exceptions.py @@ -0,0 +1,8 @@ +class LlamaDisabledError(Exception): + pass + +class LlamaModelNotFoundError(FileNotFoundError): + pass + +class LlamaNotInstalledError(ImportError): + pass diff --git a/model_ai/llama.py b/model_ai/llama.py new file mode 100644 index 0000000..366f75b --- /dev/null +++ b/model_ai/llama.py @@ -0,0 +1,131 @@ +# Standard library imports +import logging +import os + +from config.settings.base import ( + LLAMA_ENABLED, + LLAMA_MODEL_DIR, +) + +# Third-party imports +import google.generativeai as genai + +# Local application imports +from model_ai import messages +from model_ai.exceptions import ( + LlamaDisabledError, + LlamaModelNotFoundError, + LlamaNotInstalledError, +) +from model_ai.models import LlamaModel + + +class LlamaService: + # Singleton pattern to cache the LLaMA model instance + _cached_llm = None + + def __init__(self, messages=None, response_format=None, max_tokens=4000, temperature=0.1, top_p=0.1, mode='chat', nthreads=2): + self.messages = messages + self.response_format = response_format + self.max_tokens = max_tokens + self.temperature = temperature + self.top_p = top_p + self.mode = mode + + if not LLAMA_ENABLED: + raise LlamaDisabledError("LLaMA is disabled in settings.") + + if LlamaService._cached_llm is None: + try: + from llama_cpp import Llama + except ImportError as e: + raise LlamaNotInstalledError("The 'llama-cpp-python' package is not installed. Please use the llama-activated Docker image (Dockerfile.llama).") from e + + model_ai = LlamaModel.objects.first() + if not model_ai: + raise LlamaModelNotFoundError("No LLaMA model configured in the database. Please add a LLaMA model entry.") + + model_path = os.path.join(LLAMA_MODEL_DIR, model_ai.name_file) + if not os.path.isfile(model_path): + raise LlamaModelNotFoundError(f"LLaMA model file not found at {model_path}. Please ensure the model is downloaded and the path is correct.") + + try: + LlamaService._cached_llm = Llama(model_path=model_path, n_ctx=max_tokens, n_threads=nthreads) + except Exception as e: + raise RuntimeError(f"Failed to initialize LLaMA model: {e}") from e + + self.llm = LlamaService._cached_llm + + def run(self, user_input): + if self.mode == 'chat': + return self._run_as_chat(user_input) + elif self.mode == 'prompt': + return self._run_as_content_generation(user_input) + + def _run_as_chat(self, user_input): + """ Run LLaMA in chat mode.""" + input = self.messages.copy() + input.append({ + 'role': 'user', + 'content': user_input + }) + return self.llm.create_chat_completion( + messages=input, + response_format=self.response_format, + max_tokens=self.max_tokens, + temperature=self.temperature, + top_p=self.top_p + ) + + def _run_as_content_generation(self, user_input): + """ Run LLaMA in completion mode.""" + model_ai = LlamaModel.objects.first() + + # Try to use Gemini if configured + if model_ai and model_ai.api_key_gemini: + + # Setup Gemini API key + genai.configure(api_key=model_ai.api_key_gemini) + + # Fetch the Gemini model + # FIXME: Hardcoded model name + model = genai.GenerativeModel('models/gemini-2.0-flash') + + # Generate content using Gemini + return model.generate_content(user_input).text + + # Gemini not configured, fallback to LLaMA + else: + return self.llm( + user_input, + max_tokens=self.max_tokens, + temperature=self.temperature, + stop=["\n\n"] + ) + +class LlamaInputSettings: + @staticmethod + def get_first_metadata(text): + logging.debug(messages.ALL_FIRST_BLOCK.format(text=text)) + return messages.ALL_FIRST_BLOCK.format(text=text) + + @staticmethod + def get_doi_and_section(): + return messages.DOI_AND_SECTION_MESSAGES, messages.DOI_AND_SECTION_FORMAT + + @staticmethod + def get_titles(): + return messages.TITLE_MESSAGES, messages.TITLE_RESPONSE_FORMAT + + @staticmethod + def get_author_config(): + return messages.AUTHOR_MESSAGES, messages.AUTHOR_RESPONSE_FORMAT + + @staticmethod + def get_affiliations(): + return messages.AFFILIATION_MESSAGES, messages.AFFILIATION_RESPONSE_FORMAT + + @staticmethod + def get_reference(): + return messages.REFERENCE_MESSAGES, messages.REFERENCE_RESPONSE_FORMAT + \ No newline at end of file diff --git a/model_ai/messages.py b/model_ai/messages.py new file mode 100644 index 0000000..b21c06d --- /dev/null +++ b/model_ai/messages.py @@ -0,0 +1,595 @@ +import json + +DOI_AND_SECTION_MESSAGES = [ + { 'role': 'system', + 'content': 'You are an assistant who distinguishes ONLY the DOI and the Section of an initial fragment of an article with output in JSON' + }, + { 'role': 'user', + 'content': """ + Indización automatizada de Revistas + DOI: 10.4025/abm.v4i8.55 + + + + + + + + +
    Edgar Durán
    Ingeniero (Universidade Federal do Ceará – UFC)
    Profesor del Instituto de ingeniería – IFCE
    E-mail: isac.freitas@ifce.edu.br
    Recibido: 22-01-2025Aceptado: 17-05-2022
    + """ + }, + { 'role': 'assistant', + 'content': json.dumps( + { + "doi": "10.4025/abm.v4i8.55", + "section": "", + } + ) + }, + { 'role': 'user', + 'content': """ + 10.3456/jc.4545.740 + SECCION A + Estrategias de gamificación para mejorar la motivación en plataformas de aprendizaje virtual: un estudio de caso en universidades de México + Estratégias de gamificação para melhorar a motivação em plataformas de aprendizagem virtual: um estudo de caso em universidades do México + Laura Fernández Ramos* 0000-0003-2456-8721 + Carlos Méndez Sotelo** 0000-0001-9987-3342 + * Doctora en Sociología. Máster en Estudios de Género. Licenciada en Ciencias Políticas. Profesora titular en la Facultad de Ciencias Sociales de la Universidad de Granada, España. Coordinadora del grupo de investigación Sociedad y Cambio Social. Líneas de investigación: igualdad de género, políticas públicas y análisis de movimientos sociales. Correo electrónico: lfernandez@ugr.es + ** Ingeniero en Informática. Máster en Ciencia de Datos. Consultor en analítica digital en la empresa TecnoSoft Iberia. Colaborador en proyectos de innovación educativa. Líneas de investigación: inteligencia artificial aplicada, minería de datos y visualización de información. Correo electrónico: cmendez@tecnosoft.es + """ + }, + { 'role': 'assistant', + 'content': json.dumps( + { + "doi": "10.3456/jc.4545.740", + "section": "SECCION A", + } + ) + }, +] + +DOI_AND_SECTION_FORMAT = { + 'type': 'json_object', + 'schema':{ + 'type': 'object', + 'properties': { + 'doi': {'type': 'string'}, + 'section': {'type': 'string'} + } + }, + 'required':['doi', 'section'], + } + +AUTHOR_MESSAGES = [ + { 'role': 'system', + 'content': 'You are an assistant who distinguishes all the Authors of an initial fragment of an article with output in JSON' + }, + { 'role': 'user', + 'content': """ + Indización automatizada de Revistas + DOI: 10.4025/abm.v4i8.55 + + + + + + + + +
    Edgar Durán
    Ingeniero (Universidade Federal do Ceará – UFC)
    Profesor del Instituto de ingeniería – IFCE
    E-mail: isac.freitas@ifce.edu.br
    Recibido: 22-01-2025Aceptado: 17-05-2022
    + """ + }, + { 'role': 'assistant', + 'content': json.dumps({ + 'authors': [ + { + "name": "Edgar", + "surname": "Durán", + "orcid": "", + "aff": "1", + "char": "*" + } + ] + }) + }, + { 'role': 'user', + 'content': """ + 10.3456/jc.4545.740 + SECCION A + Estrategias de gamificación para mejorar la motivación en plataformas de aprendizaje virtual: un estudio de caso en universidades de México + Estratégias de gamificação para melhorar a motivação em plataformas de aprendizagem virtual: um estudo de caso em universidades do México + Laura Fernández Ramos* 0000-0003-2456-8721 + Carlos Méndez Sotelo** 0000-0001-9987-3342 + * Doctora en Sociología. Máster en Estudios de Género. Licenciada en Ciencias Políticas. Profesora titular en la Facultad de Ciencias Sociales de la Universidad de Granada, España. Coordinadora del grupo de investigación Sociedad y Cambio Social. Líneas de investigación: igualdad de género, políticas públicas y análisis de movimientos sociales. Correo electrónico: lfernandez@ugr.es + ** Ingeniero en Informática. Máster en Ciencia de Datos. Consultor en analítica digital en la empresa TecnoSoft Iberia. Colaborador en proyectos de innovación educativa. Líneas de investigación: inteligencia artificial aplicada, minería de datos y visualización de información. Correo electrónico: cmendez@tecnosoft.es + """ + }, + { 'role': 'assistant', + 'content': json.dumps({ + 'authors': [ + { + "name": "Laura", + "surname": "Fernández Ramos", + "orcid": "0000-0003-2456-8721", + "aff": "1", + "char": "*" + }, + { + "name": "Carlos", + "surname": "Méndez Sotelo", + "orcid": "0000-0001-9987-3342", + "aff": "2", + "char": "**" + } + ] + }) + } +] + +AUTHOR_RESPONSE_FORMAT = { + 'type': 'json_object', + 'schema':{ + 'type': 'object', + 'properties': { + 'authors': {'type': 'array', + 'items': { + 'type': 'object', + 'properties': { + 'name': {'type': 'string'}, + 'surname': {'type': 'string'}, + 'orcid': {'type': 'string'}, + 'aff': {'type': 'integer'}, + 'char': {'type': 'string'} + }, + 'required': ['name', 'surname', 'orcid', 'aff', 'char'] + } + }, + }, + 'required':['authors'] + } + } + +TITLE_MESSAGES = [ + { 'role': 'system', + 'content': """ + You are an assistant who distinguishes all Titles and their languages of an initial fragment of an article with output in JSON + Use 2-letter language codes (en, pt, es, etc). + """ + }, + { 'role': 'user', + 'content': """ + Indización automatizada de Revistas + DOI: 10.4025/abm.v4i8.55 + + + + + + + + +
    Edgar Durán
    Ingeniero (Universidade Federal do Ceará – UFC)
    Profesor del Instituto de ingeniería – IFCE
    E-mail: isac.freitas@ifce.edu.br
    Recibido: 22-01-2025Aceptado: 17-05-2022
    + """ + }, + { 'role': 'assistant', + 'content': json.dumps({ + 'art_titles': [ + { + "title": "Indización automatizada de Revistas", + "language": "es", + } + ] + }) + }, + { 'role': 'user', + 'content': """ + 10.3456/jc.4545.740 + SECCION A + Estrategias de gamificación para mejorar la motivación en plataformas de aprendizaje virtual: un estudio de caso en universidades de México + Estratégias de gamificação para melhorar a motivação em plataformas de aprendizagem virtual: um estudo de caso em universidades do México + Laura Fernández Ramos* 0000-0003-2456-8721 + Carlos Méndez Sotelo** 0000-0001-9987-3342 + * Doctora en Sociología. Máster en Estudios de Género. Licenciada en Ciencias Políticas. Profesora titular en la Facultad de Ciencias Sociales de la Universidad de Granada, España. Coordinadora del grupo de investigación Sociedad y Cambio Social. Líneas de investigación: igualdad de género, políticas públicas y análisis de movimientos sociales. Correo electrónico: lfernandez@ugr.es + ** Ingeniero en Informática. Máster en Ciencia de Datos. Consultor en analítica digital en la empresa TecnoSoft Iberia. Colaborador en proyectos de innovación educativa. Líneas de investigación: inteligencia artificial aplicada, minería de datos y visualización de información. Correo electrónico: cmendez@tecnosoft.es + """ + }, + { 'role': 'assistant', + 'content': json.dumps({ + 'art_titles': [ + { + "title": "Estrategias de gamificación para mejorar la motivación en plataformas de aprendizaje virtual: un estudio de caso en universidades de México", + "language": "es", + }, + { + "title": "Estratégias de gamificação para melhorar a motivação em plataformas de aprendizagem virtual: um estudo de caso em universidades do México", + "language": "pt", + } + ] + }) + }, +] + +TITLE_RESPONSE_FORMAT = { + 'type': 'json_object', + 'schema':{ + 'type': 'object', + 'properties': { + 'art_titles': {'type': 'array', + 'items': { + 'type': 'object', + 'properties': { + 'title': {'type': 'string'}, + 'language': {'type': 'char(2)'}, + }, + 'required':['title', 'language'] + } + }, + }, + 'required':['art_titles'] + } + } + +AFFILIATION_MESSAGES = [ + { 'role': 'system', + 'content': """You are an assistant who distinguishes all the metadata of Author''s Affiliations of an initial fragment of an article with output in JSON + Rules: + - Each distinct institution must be assigned a distinct "char(s)" symbol. + - Reuse the same "char" only if the affiliation is exactly the same institution. + - Use the following pattern for "char": *, **, ***, ****, etc. + - The "aff" field is a unique identifier (1, 2, 3...) for each distinct institution. + - Always include the original affiliation text in "text_aff". + """ + }, + { 'role': 'user', + 'content': """ + Indización automatizada de Revistas + DOI: 10.4025/abm.v4i8.55 + + + + + + + + +
    Edgar Durán
    Ingeniero (Universidade Federal do Ceará – UFC)
    Profesor del Instituto de ingeniería – IFCE
    E-mail: isac.freitas@ifce.edu.br
    Recibido: 22-01-2025Aceptado: 17-05-2022
    + """ + }, + { 'role': 'assistant', + 'content': json.dumps({ + 'affiliations': [ + { + "aff": "1", + "char": "*", + "orgname": "Universidade Federal do Ceará", + "orgdiv1": "Instituto de ingeniería", + "orgdiv2": "", + "postal": "string", + "city": "", + "state": "", + "code_country": "", + "name_country": "", + "text_aff": "Ingeniero (Universidade Federal do Ceará – UFC)
    Profesor del Instituto de ingeniería – IFCE" + } + ] + }) + }, + { 'role': 'user', + 'content': """ + 10.3456/jc.4545.740 + SECCION A + Estrategias de gamificación para mejorar la motivación en plataformas de aprendizaje virtual: un estudio de caso en universidades de México + Estratégias de gamificação para melhorar a motivação em plataformas de aprendizagem virtual: um estudo de caso em universidades do México + Laura Fernández Ramos* 0000-0003-2456-8721 + Carlos Méndez Sotelo** 0000-0001-9987-3342 + * Doctora en Sociología. Máster en Estudios de Género. Licenciada en Ciencias Políticas. Profesora titular en la Facultad de Ciencias Sociales de la Universidad de Granada, España. Coordinadora del grupo de investigación Sociedad y Cambio Social. Líneas de investigación: igualdad de género, políticas públicas y análisis de movimientos sociales. Correo electrónico: lfernandez@ugr.es + ** Ingeniero en Informática. Máster en Ciencia de Datos. Consultor en analítica digital en la empresa TecnoSoft Iberia. Colaborador en proyectos de innovación educativa. Líneas de investigación: inteligencia artificial aplicada, minería de datos y visualización de información. Correo electrónico: cmendez@tecnosoft.es + """ + }, + { 'role': 'assistant', + 'content': json.dumps({ + 'affiliations': [ + { + "aff": "1", + "char": "*", + "orgname": "Universidad de Granada", + "orgdiv1": "Facultad de Ciencias Sociales", + "orgdiv2": "", + "postal": "", + "city": "", + "state": "", + "code_country": "es", + "name_country": "España", + "text_aff": "Doctora en Sociología. Máster en Estudios de Género. Licenciada en Ciencias Políticas. Profesora titular en la Facultad de Ciencias Sociales de la Universidad de Granada, España. Coordinadora del grupo de investigación Sociedad y Cambio Social. Líneas de investigación: igualdad de género, políticas públicas y análisis de movimientos sociales" + }, + { + "aff": "2", + "char": "**", + "orgname": "TecnoSoft Iberia", + "orgdiv1": "", + "orgdiv2": "", + "postal": "", + "city": "", + "state": "", + "code_country": "", + "name_country": "", + "text_aff": "Ingeniero en Informática. Máster en Ciencia de Datos. Consultor en analítica digital en la empresa TecnoSoft Iberia. Colaborador en proyectos de innovación educativa. Líneas de investigación: inteligencia artificial aplicada, minería de datos y visualización de información" + } + ] + }) + } +] + +AFFILIATION_RESPONSE_FORMAT = { + 'type': 'json_object', + 'schema':{ + 'type': 'object', + 'properties': { + 'affiliations': {'type': 'array', + 'items': { + 'type': 'object', + 'properties': { + 'aff': {'type': 'integer'}, + 'char': {'type': 'string'}, + 'orgname': {'type': 'string'}, + 'orgdiv1': {'type': 'string'}, + 'orgdiv2': {'type': 'string'}, + 'postal': {'type': 'string'}, + 'city': {'type': 'string'}, + 'state': {'type': 'string'}, + 'code_country': {'type': 'string'}, + 'name_country': {'type': 'string'}, + 'text_aff': {'type': 'text'} + }, + "required": [ + "aff", "char", "orgname", "orgdiv1", "orgdiv2", + "postal", "city", "state", "code_country", + "name_country", "text_aff" + ] + } + }, + }, + 'required': ['affiliations'] + } + } + +REFERENCE_MESSAGES = [ + { 'role': 'system', + 'content': 'You are an assistant who distinguishes the metadata of a bibliographic reference and returns it in JSON format.' + }, + { 'role': 'user', + 'content': """ + Smith, J. (2020). Understanding AI. Journal of Technology, 15(3), 45-60. https://doi.org/10.1234/jtech.2020.015 + """ + }, + { 'role': 'assistant', + 'content': json.dumps({ + 'authors': [ + { + "name": "J.", + "surname": "Smith", + "orcid": "", + "aff": "", + "char": "" + } + ], + 'title': "Understanding AI", + 'journal': "Journal of Technology", + 'year': "2020", + 'volume': "15", + 'issue': "3", + 'pages': "45-60", + 'doi': "10.1234/jtech.2020.015" + }) + }, +] + +REFERENCE_RESPONSE_FORMAT = { + 'type': 'json_object', + 'schema':{ + 'type': 'object', + 'properties': { + 'authors': {'type': 'array', + 'items': { + 'type': 'object', + 'properties': { + 'name': {'type': 'string'}, + 'surname': {'type': 'string'}, + 'orcid': {'type': 'string'}, + 'aff': {'type': 'string'}, + 'char': {'type': 'string'} + }, + 'required': ['name', 'surname', 'orcid', 'aff', 'char'] + } + }, + 'title': {'type': 'string'}, + 'journal': {'type': 'string'}, + 'year': {'type': 'string'}, + 'volume': {'type': 'string'}, + 'issue': {'type': 'string'}, + 'pages': {'type': 'string'}, + 'doi': {'type': 'string'} + }, + 'required':['authors', 'title', 'journal', 'year', 'volume', 'issue', 'pages', 'doi'] + } +} + + +ALL_FIRST_BLOCK = """ + ### Instruction: + From the provided Text, extract the specified metadata as shown in the Example. + + Specifications: + language: Use 2-letter codes + orgname: Name of Organization, University, Intitution or similar + orgdiv1: Name of Departament, Division or similar + orgdiv2: Name of Subdepartament, Subdivision or similar + name_country: Complete name of Country + code_country: Use 2-letter codes for Country + state: State or province abbreviation in capital letters + char: Characters that link the author with their affiliation + section: If you don't specify a section, choose the word adjacent to the DOI + text_aff: Full text block of affiliation data + orgdiv1, orgdiv2: No street names or neighborhoods + + Notes: + - The text may contain bracket-style tags or markup. + - Return the result in JSON format. + - Return ONLY the JSON result. No explanations, notes, or formatting outside the JSON. + - Only one JSON object must be returned. + - If multiple values exist (e.g. multiple "section" labels), pick the most relevant or the first one. + - Do NOT return multiple JSON objects. + - Include all fields in object JSON even if they are empty. + + Example: + {{ + "doi": "DOI", + "section": "Section", + "titles": [ + {{ + "title": "Title 1", + "language": "Language 1" + }}, + {{ + "title": "Title 2", + "language": "Language 2" + }} + ], + "authors": [ + {{ + "name": "First Name", + "surname": "Last Name", + "orcid": "ORCID", + "aff": 1, + "char": "*" + }}, + {{ + "name": "First Name 2", + "surname": "Last Name 2", + "orcid": "ORCID", + "aff": 2, + "char": "**" + }} + ], + "affiliations": [ + {{ + "aff": 1, + "char": "*", + "orgname": "Organization Name 1", + "orgdiv1": "Department or Division 1", + "orgdiv2": "Subdepartment or Subdivision 1", + "postal": "Postal Code 1", + "city": "City 1", + "state": "ST", + "code_country": "co", + "name_country": "Country 1", + "text_aff": "Block of Text Affiliation 1" + }}, + {{ + "aff": 2, + "char": "**", + "orgname": "Organization Name 2", + "orgdiv1": "Department or Division 2", + "orgdiv2": "Subdepartment or Subdivision 2", + "postal": "Postal Code 2", + "city": "City 2", + "state": "ST", + "code_country": "co", + "name_country": "Country 2", + "text_aff": "Block of Text Affiliation 2" + }} + ] + }} + + ### Text: + {text} + + ### Response: +""" + + +instruction = """ + From the provided Text, extract the metadata and return it as a single JSON object. + + RULES: + 1. Output MUST be ONLY one valid JSON object (no markdown, no notes). + 2. Always include ALL fields in the JSON, even if they are empty. + 3. Use arrays for "titles", "authors", and "affiliations". + 4. If there are multiple options, choose the first or most relevant. + 5. Do NOT invent data; leave empty strings if unknown. + 6. orgdiv1/orgdiv2 must be departments or divisions (no street names). + 7. language must use 2-letter codes. + 8. country must include full name and 2-letter code. + 9. section: if not specified, use the word next to the DOI. + 10. Keep "char" consistent between authors and affiliations. + + OUTPUT FORMAT (strictly follow this): + { + "doi": "string", + "section": "string", + "titles": [ + {"title": "string", "language": "xx"} + ], + "authors": [ + {"name": "string", "surname": "string", "orcid": "string", "aff": number, "char": "string"} + ], + "affiliations": [ + { + "aff": number, + "char": "string", + "orgname": "string", + "orgdiv1": "string", + "orgdiv2": "string", + "postal": "string", + "city": "string", + "state": "string", + "code_country": "xx", + "name_country": "string", + "text_aff": "string" + } + ] + } + + EXAMPLE: + { + "doi": "10.1234/example.doi", + "section": "Article", + "titles": [ + {"title": "Example Title in English", "language": "en"}, + {"title": "Ejemplo de título en Español", "language": "es"} + ], + "authors": [ + {"name": "Alice", "surname": "Smith", "orcid": "0000-0001-2345-6789", "aff": 1, "char": "*"}, + {"name": "Bob", "surname": "Johnson", "orcid": "", "aff": 2, "char": "**"} + ], + "affiliations": [ + { + "aff": 1, + "char": "*", + "orgname": "University of Example", + "orgdiv1": "Department of Biology", + "orgdiv2": "", + "postal": "12345", + "city": "Example City", + "state": "EX", + "code_country": "us", + "name_country": "United States", + "text_aff": "Department of Biology, University of Example, 12345 Example City, EX, United States" + }, + { + "aff": 2, + "char": "**", + "orgname": "Institute of Testing", + "orgdiv1": "Division of Chemistry", + "orgdiv2": "", + "postal": "54321", + "city": "Testville", + "state": "TS", + "code_country": "uk", + "name_country": "United Kingdom", + "text_aff": "Division of Chemistry, Institute of Testing, 54321 Testville, TS, United Kingdom" + } + ] + } + """ \ No newline at end of file diff --git a/model_ai/migrations/0001_initial.py b/model_ai/migrations/0001_initial.py new file mode 100644 index 0000000..01ff28b --- /dev/null +++ b/model_ai/migrations/0001_initial.py @@ -0,0 +1,118 @@ +# Generated by Django 5.0.3 on 2025-09-07 17:04 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name="LlamaModel", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "created", + models.DateTimeField( + auto_now_add=True, verbose_name="Creation date" + ), + ), + ( + "updated", + models.DateTimeField( + auto_now=True, verbose_name="Last update date" + ), + ), + ( + "name_model", + models.CharField( + blank=True, + max_length=255, + verbose_name="Hugging Face model name", + ), + ), + ( + "name_file", + models.CharField( + blank=True, max_length=255, verbose_name="Model file" + ), + ), + ( + "hf_token", + models.CharField( + blank=True, max_length=255, verbose_name="Hugging Face token" + ), + ), + ( + "download_status", + models.IntegerField( + blank=True, + choices=[ + (1, "No model"), + (2, "Downloading model"), + (3, "Model downloaded"), + (4, "Download error"), + ], + default=1, + verbose_name="Local model estatus", + ), + ), + ( + "api_url", + models.URLField( + blank=True, + help_text="Enter the AI API URL.", + null=True, + verbose_name="URL Markapi", + ), + ), + ( + "api_key_gemini", + models.CharField( + blank=True, max_length=255, verbose_name="API KEY Gemini" + ), + ), + ( + "creator", + models.ForeignKey( + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_creator", + to=settings.AUTH_USER_MODEL, + verbose_name="Creator", + ), + ), + ( + "updated_by", + models.ForeignKey( + blank=True, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_last_mod_user", + to=settings.AUTH_USER_MODEL, + verbose_name="Updater", + ), + ), + ], + options={ + "abstract": False, + }, + ), + ] diff --git a/model_ai/migrations/0002_alter_llamamodel_download_status.py b/model_ai/migrations/0002_alter_llamamodel_download_status.py new file mode 100644 index 0000000..2cadd23 --- /dev/null +++ b/model_ai/migrations/0002_alter_llamamodel_download_status.py @@ -0,0 +1,18 @@ +# Generated by Django 5.0.8 on 2025-10-20 19:41 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('model_ai', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='llamamodel', + name='download_status', + field=models.IntegerField(blank=True, choices=[(1, 'No model'), (2, 'Downloading model'), (3, 'Model downloaded'), (4, 'Download error')], default=1, verbose_name='Local model status'), + ), + ] diff --git a/model_ai/migrations/__init__.py b/model_ai/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/model_ai/models.py b/model_ai/models.py new file mode 100644 index 0000000..edcb564 --- /dev/null +++ b/model_ai/models.py @@ -0,0 +1,75 @@ +from django.db import models +from django import forms +from django.utils.translation import gettext_lazy as _ +from django.core.exceptions import ValidationError +from wagtail.admin.panels import FieldPanel +from core.models import ( + CommonControlField, +) +from core.forms import CoreAdminModelForm + + +class MaskedPasswordWidget(forms.PasswordInput): + def __init__(self, attrs=None): + super().__init__(attrs=attrs, render_value=True) + + def render(self, name, value, attrs=None, renderer=None): + return super().render(name, value, attrs, renderer) + + +class DownloadStatus(models.IntegerChoices): + NO_MODEL = 1, _("No model") + DOWNLOADING = 2, _("Downloading model") + DOWNLOADED = 3, _("Model downloaded") + ERROR = 4, _("Download error") + + +class DisabledSelect(forms.Select): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.attrs.update({'disabled': 'disabled'}) + + +class LlamaModel(CommonControlField): + name_model = models.CharField(_("Hugging Face model name"), blank=True, max_length=255) + name_file = models.CharField(_("Model file"), blank=True, max_length=255) + hf_token = models.CharField(_("Hugging Face token"), blank=True, max_length=255) + download_status = models.IntegerField( + _("Local model status"), + choices=DownloadStatus.choices, + blank=True, + default=DownloadStatus.NO_MODEL + ) + api_url = models.URLField( + verbose_name=_("URL Markapi"), + blank=True, + null=True, + help_text="Enter the AI API URL." + ) + api_key_gemini = models.CharField(_("API KEY Gemini"), blank=True, max_length=255) + + panels = [ + FieldPanel("name_model"), + FieldPanel("name_file"), + FieldPanel("hf_token", widget=MaskedPasswordWidget()), + FieldPanel("download_status", widget=DisabledSelect(choices=DownloadStatus.choices)), + FieldPanel("api_url"), + FieldPanel("api_key_gemini", widget=MaskedPasswordWidget()), + ] + + base_form_class = CoreAdminModelForm + + def display_name_model(self): + return self.name_model if self.name_model else self.api_url + + def clean(self): + if not self.pk and LlamaModel.objects.exists(): + raise ValidationError(_("Only one instance of LlamaModel is allowed.")) + + def save(self, *args, **kwargs): + if not self.pk and LlamaModel.objects.exists(): + raise ValidationError(_("Only one instance of LlamaModel is allowed.")) + super().save(*args, **kwargs) + + def __str__(self): + return self.name_model \ No newline at end of file diff --git a/model_ai/tasks.py b/model_ai/tasks.py new file mode 100644 index 0000000..e7c354e --- /dev/null +++ b/model_ai/tasks.py @@ -0,0 +1,26 @@ +# Standard library imports +from config import celery_app +from config.settings.base import LLAMA_MODEL_DIR + +# Third party imports +from huggingface_hub import login, hf_hub_download + +# Local application imports +from model_ai.models import LlamaModel, DownloadStatus + + +def get_model(hf_token, name_model, name_file): + login(token=hf_token) + local_dir = LLAMA_MODEL_DIR + downloaded_file = hf_hub_download(repo_id=name_model, filename=name_file, local_dir=local_dir) + + +@celery_app.task() +def download_model(id): + try: + instance = LlamaModel.objects.get(id=id) + get_model(instance.hf_token, instance.name_model, instance.name_file) + instance.download_status = DownloadStatus.DOWNLOADED + except Exception: + instance.download_status = DownloadStatus.ERROR + instance.save() diff --git a/model_ai/wagtail_hooks.py b/model_ai/wagtail_hooks.py new file mode 100644 index 0000000..6ff6edf --- /dev/null +++ b/model_ai/wagtail_hooks.py @@ -0,0 +1,108 @@ +# Third party imports +from django.http import HttpResponseRedirect +from django.utils.translation import gettext_lazy as _ +from django.contrib import messages + +from wagtail.snippets.views.snippets import ( + CreateView, + EditView, + SnippetViewSet, +) + +from wagtail.snippets.models import register_snippet + +# Local application imports +from model_ai.models import ( + LlamaModel, + DownloadStatus, +) +from model_ai.tasks import download_model + + +class LlamaModelCreateView(CreateView): + def form_valid(self, form): + data = form.cleaned_data + + if data.get("name_model") or data.get("name_file"): + if not data.get("name_model"): # Esto detecta '', None o False + messages.error(self.request, _("Model name is required.")) + return self.form_invalid(form) + + if not data.get("name_file"): + messages.error(self.request, _("Model file is required.")) + return self.form_invalid(form) + + if not data.get("hf_token"): + messages.error(self.request, _("Hugging Face token is required.")) + return self.form_invalid(form) + self.object = form.save_all(self.request.user) + + self.object.download_status = DownloadStatus.DOWNLOADING + self.object.save() + messages.success(self.request, _("Model created and download started.")) + download_model.delay(form.instance.id) + else: + if not data.get("api_url"): + messages.error(self.request, _("API AI URL is required.")) + return self.form_invalid(form) + + self.object = form.save_all(self.request.user) + messages.success(self.request, _("Model created, use API AI.")) + + return HttpResponseRedirect(self.get_success_url()) + + +class LlamaModelEditView(EditView): + def form_valid(self, form): + form.instance.updated_by = self.request.user + form.instance.save() + data = form.cleaned_data + if form.instance.name_model: + if form.instance.download_status != DownloadStatus.DOWNLOADING: + if not data.get("name_model"): + messages.error(self.request, _("Model name is required.")) + return self.form_invalid(form) + + if not data.get("name_file"): + messages.error(self.request, _("Model file is required.")) + return self.form_invalid(form) + + if not data.get("hf_token"): + messages.error(self.request, _("Hugging Face token is required.")) + return self.form_invalid(form) + + form.instance.download_status = DownloadStatus.DOWNLOADING + download_model.delay(form.instance.id) + form.instance.save() + messages.success(self.request, _("Model updated and download started.")) + else: + messages.success(self.request, _("Model updated and already downloaded.")) + else: + if not data.get("api_url"): + messages.error(self.request, _("API AI URL is required.")) + return self.form_invalid(form) + + form.instance.save() + messages.success(self.request, _("Model updated, use API AI.")) + + return HttpResponseRedirect(self.get_success_url()) + + +class LlamaModelViewSet(SnippetViewSet): + model = LlamaModel + add_view_class = LlamaModelCreateView + edit_view_class = LlamaModelEditView + menu_label = _("AI LLM Model") + menu_icon = "folder" + menu_order = 100 + exclude_from_explorer = ( + False # or True to exclude pages of this type from Wagtail's explorer view + ) + add_to_admin_menu = True + list_per_page = 20 + list_display = ( + "display_name_model", + "get_download_status_display" + ) + +register_snippet(LlamaModelViewSet) diff --git a/reference/api/v1/views.py b/reference/api/v1/views.py index e7dceaf..82511df 100755 --- a/reference/api/v1/views.py +++ b/reference/api/v1/views.py @@ -6,11 +6,11 @@ from rest_framework.response import Response from reference.api.v1.serializers import ReferenceSerializer from reference.marker import mark_references -from reference.tasks import get_reference +from reference.data_utils import get_reference import json -from reference.models import Reference, ElementCitation +from reference.models import Reference, ElementCitation, ReferenceStatus # Create your views here. @@ -19,7 +19,7 @@ class ReferenceViewSet( CreateModelMixin, # handles POSTs ): serializer_class = ReferenceSerializer - permission_classes = [IsAuthenticated] + permission_classes = [IsAuthenticated] http_method_names = [ "post", ] @@ -40,7 +40,7 @@ def api_reference(self, request): except Reference.DoesNotExist: new_reference = Reference.objects.create( mixed_citation=post_reference, - estatus=1, + estatus=ReferenceStatus.CREATING, creator=self.request.user, ) diff --git a/reference/config.py b/reference/config.py index 4b8ac25..7c385e0 100644 --- a/reference/config.py +++ b/reference/config.py @@ -1,3 +1,5 @@ +import json + MESSAGES = [ { 'role': 'system', 'content': 'You are an assistant who distinguishes all the components of a citation in an article with output in JSON' @@ -6,7 +8,7 @@ 'content': 'Bachman, S., J. Moat, A. W. Hill, J. de la Torre and B. Scott. 2011. Supporting Red List threat assessments with GeoCAT: geospatial conservation assessment tool. ZooKeys 150: 117-126. DOI: https://doi.org/10.3897/zookeys.150.2109' }, { 'role': 'assistant', - 'content': { + 'content': json.dumps({ 'reftype': 'journal', 'authors': [ { 'surname': 'Bachman', 'fname': 'S.' }, @@ -15,51 +17,54 @@ { 'surname': 'de la Torre', 'fname': 'J.' }, { 'surname': 'Scott', 'fname': 'B.' }, ], + 'full_text': 'Bachman, S., J. Moat, A. W. Hill, J. de la Torre and B. Scott. 2011. Supporting Red List threat assessments with GeoCAT: geospatial conservation assessment tool. ZooKeys 150: 117-126. DOI: https://doi.org/10.3897/zookeys.150.2109', 'date': 2011, 'title': 'Supporting Red List threat assessments with GeoCAT: geospatial conservation assessment tool', 'source': 'ZooKeys', 'vol': '150', 'num': None, - 'pages': '117-126', + 'fpage': '117', + 'lpage': '126', 'doi': '10.3897/zookeys.150.2109', - } + }) }, { 'role': 'user', 'content': 'Brunel, J. F. 1987. Sur le genre Phyllanthus L. et quelques genres voisins de la Tribu des Phyllantheae Dumort. (Euphorbiaceae, Phyllantheae) en Afrique intertropicale et à Madagascar. Thèse de doctorat de l’Université L. Pasteur. Strasbourg, France. 760 pp.' }, { 'role': 'assistant', - 'content': { + 'content': json.dumps({ 'reftype': 'Thesis', 'authors': [ { 'surname': 'Brunel', 'fname': 'J. F.' }, ], + 'full_text': 'Brunel, J. F. 1987. Sur le genre Phyllanthus L. et quelques genres voisins de la Tribu des Phyllantheae Dumort. (Euphorbiaceae, Phyllantheae) en Afrique intertropicale et à Madagascar. Thèse de doctorat de l’Université L. Pasteur. Strasbourg, France. 760 pp.', 'date': 1987, - 'title': 'Sur le genre Phyllanthus L. et quelques genres voisins de la Tribu des Phyllantheae Dumort. (Euphorbiaceae, Phyllantheae) en Afrique intertropicale et à Madagascar', + 'source': 'Sur le genre Phyllanthus L. et quelques genres voisins de la Tribu des Phyllantheae Dumort. (Euphorbiaceae, Phyllantheae) en Afrique intertropicale et à Madagascar', 'degree': 'doctorat', 'organization': 'l’Université L. Pasteur', 'city': 'Strasbourg', - 'country': 'France', + 'location': 'Strasbourg, France', 'num_pages': 760 - }, + }), }, { 'role': 'user', 'content': 'Hernández-López, L. 1995. The endemic flora of Jalisco, Mexico: Centers of endemism and implications for conservation. Tesis de maestría. Universidad de Wisconsin. Madison, USA. 74 pp.' }, { 'role': 'assistant', - 'content': { + 'content': json.dumps({ 'reftype': 'Thesis', 'authors': [ { 'surname': 'Hernández-López', 'fname': 'L.' }, ], + 'full_text': 'Hernández-López, L. 1995. The endemic flora of Jalisco, Mexico: Centers of endemism and implications for conservation. Tesis de maestría. Universidad de Wisconsin. Madison, USA. 74 pp.', 'date': 1995, - 'title': 'The endemic flora of Jalisco, Mexico: Centers of endemism and implications for conservation', + 'source': 'The endemic flora of Jalisco, Mexico: Centers of endemism and implications for conservation', 'degree': 'maestría', 'organization': 'Universidad de Wisconsin', - 'city': 'Madison', - 'country': 'USA', + 'location': 'Madison, USA', 'num_pages': 74 - }, + }), }, { 'role': 'user', @@ -67,18 +72,18 @@ }, { 'role': 'assistant', - 'content': { + 'content': json.dumps({ 'reftype': 'book', 'authors':[ { 'surname': 'Schimper', 'fname': 'A. F. W.' }, ], + 'full_text': 'Schimper, A. F. W. 1903. Plant geography upon a physiological basis. Clarendon Press. Oxford, UK. 839 pp.', 'date': 1903, - 'title': 'Plant geography upon a physiological basis', + 'source': 'Plant geography upon a physiological basis', 'organization': 'Clarendon Press', - 'city': 'Oxford', - 'country': 'UK', + 'location': 'Oxford, UK', 'num_pages': 839 - } + }) }, { 'role': 'user', @@ -86,20 +91,20 @@ }, { 'role': 'assistant', - 'content': { + 'content': json.dumps({ 'reftype': 'book', 'authors':[ { 'surname': 'Correa', 'fname': 'M. D.' }, { 'surname': 'Galdames', 'fname': 'C.' }, { 'surname': 'Stapf', 'fname': 'M.' }, ], + 'full_text': 'Correa, M. D., C. Galdames and M. Stapf. 2004. Catálogo de Plantas Vasculares de Panamá. Smithsonian Tropical Research Institute. Ciudad de Panamá, Panamá. 599 pp.', 'date': 2004, - 'title': 'Catálogo de Plantas Vasculares de Panamá', + 'source': 'Catálogo de Plantas Vasculares de Panamá', 'organization': 'Smithsonian Tropical Research Institute', - 'city': 'Ciudad de Panamá', - 'country': 'Panamá', + 'location': 'Ciudad de Panamá, Panamá', 'num_pages': 599 - } + }) }, { 'role': 'user', @@ -107,19 +112,19 @@ }, { 'role': 'assistant', - 'content': { + 'content': json.dumps({ 'reftype': 'data', 'authors':[ { 'surname': 'Hernández-López', 'fname': 'L.' }, ], + 'full_text': 'Hernández-López, L. 2019. Las especies endémicas de plantas en el estado de Jalisco: su distribución y conservación. Comisión Nacional para el Conocimiento y Uso de la Biodiversidad (CONABIO). Cd. Mx., México. https://doi.org/10.15468/ktvqds (consultado diciembre de 2019).', 'date': 2019, 'title': 'Las especies endémicas de plantas en el estado de Jalisco: su distribución y conservación', - 'organization': 'Comisión Nacional para el Conocimiento y Uso de la Biodiversidad (CONABIO)', - 'city': 'Cd. Mx.', - 'country': 'México', + 'source': 'Comisión Nacional para el Conocimiento y Uso de la Biodiversidad (CONABIO)', + 'location': 'Cd. Mx. México', 'doi': '10.15468/ktvqds', 'access_date': 'diciembre de 2019' - } + }) }, { 'role': 'user', @@ -127,17 +132,18 @@ }, { 'role': 'assistant', - 'content': { + 'content': json.dumps({ 'reftype': 'webpage', 'authors':[ { 'collab': 'INAFED' }, ], + 'full_text': 'INAFED. 2010. Enciclopedia de los Municipios y Delegaciones de México: Jalisco. Instituto Nacional para el Federalismo y el Desarrollo Municipal. http://www.inafed.gob.mx/ work/enciclopedia/EMM21puebla/index.html (consultado diciembre de 2018).', 'date': 2010, - 'title': 'Enciclopedia de los Municipios y Delegaciones de México: Jalisco', + 'source': 'Enciclopedia de los Municipios y Delegaciones de México: Jalisco', 'organization': 'Instituto Nacional para el Federalismo y el Desarrollo Municipal', 'uri': 'http://www.inafed.gob.mx/ work/enciclopedia/EMM21puebla/index.html', 'access_date': 'diciembre de 2018' - } + }) }, { 'role': 'user', @@ -145,17 +151,41 @@ }, { 'role': 'assistant', - 'content': { + 'content': json.dumps({ 'reftype': 'software', 'authors':[ { 'collab': 'Nikon Corporation' }, ], + 'full_text': 'Nikon Corporation. 1991-2006. NIS- Elements, version 2.33. Tokio, Japón.', 'date': 2006, 'source': 'NIS- Elements', 'version': '2.33', 'city': 'Tokio', 'country': 'Japón', - } + }) + }, + { + 'role': 'user', + 'content': 'Furton EJ, Dort V, editors. Addiction and compulsive behaviors. Proceedings of the 17th Workshop for Bishops; 1999; Dallas, TX. Boston: National Catholic Bioethics Center (US); 2000. 258 p.' + }, + { + 'role': 'assistant', + 'content': json.dumps({ + 'reftype': 'confproc', + 'full_text': 'Furton EJ, Dort V, editors. Addiction and compulsive behaviors. Proceedings of the 17th Workshop for Bishops; 1999; Dallas, TX. Boston: National Catholic Bioethics Center (US); 2000. 258 p.', + 'authors':[ + { 'surname': 'Furton', 'fname': 'EJ' }, + { 'surname': 'Dort', 'fname': 'V' }, + ], + 'date': 2000, + 'source': 'Addiction and compulsive behaviors', + 'title': 'Proceedings of the 17th Workshop for Bishops', + 'location': 'Dallas, TX', + 'num': '17', + 'organization': 'National Catholic Bioethics Center (US)', + 'org_location': 'Boston', + 'pages': '258 p' + }) }, ] @@ -164,7 +194,7 @@ 'schema':{ 'type': 'object', 'properties': { - 'reftype': {'type': 'string', 'enum': ['journal', 'thesis', 'book', 'data', 'webpage', 'software']}, + 'reftype': {'type': 'string', 'enum': ['journal', 'thesis', 'book', 'data', 'webpage', 'software', 'confproc']}, 'authors': {'type': 'array', 'items': { 'type': 'object', @@ -175,29 +205,27 @@ } } }, - 'date': {'type': 'integer'}, - 'title': {'type': 'string'}, - 'source': {'type': 'string'}, - 'vol': {'type': 'integer'}, - 'num': {'type': 'integer'}, - 'pages': {'type': 'string'}, - 'doi': {'type': 'string'}, - 'degree': {'type': 'string'}, - 'organization': {'type': 'string'}, - 'city': {'type': 'string'}, - 'country': {'type': 'string'}, - 'num_pages': {'type': 'integer'}, - 'uri': {'type': 'string'}, - 'access_date': {'type': 'string'}, - 'version': {'type': 'string'}, + "full_text": {"type": "integer"}, + "date": {"type": "integer"}, + "title": {"type": "string"}, + "chapter": {"type": "string"}, + "edition": {"type": "string"}, + "source": {"type": "string"}, + "vol": {"type": "integer"}, + "num": {"type": "integer"}, + "pages": {"type": "string"}, + "fpage": {"type": "string"}, + "lpage": {"type": "string"}, + "doi": {"type": "string"}, + "degree": {"type": "string"}, + "organization": {"type": "string"}, + "location": {"type": "string"}, + "org_location": {"type": "string"}, + "num_pages": {"type": "integer"}, + "uri": {"type": "string"}, + "access_id": {"type": "string"}, + "access_date": {"type": "string"}, + "version": {"type": "string"}, }, - 'required':{ - 'journal': ['reftype', 'authors', 'date', 'title', 'source', 'vol', 'num', 'pages', 'doi'], - 'thesis': ['reftype', 'authors', 'date', 'title', 'degree', 'organization', 'city', 'country', 'num_pages'], - 'book': ['reftype', 'authors', 'date', 'title', 'organization', 'city', 'country', 'num_pages'], - 'data': ['reftype', 'authors', 'date', 'title', 'organization', 'city', 'country', 'num_pages', 'doi', 'access_date'], - 'webpage': ['reftype', 'authors', 'date', 'title', 'organization', 'uri', 'access_date'], - 'software': ['reftype', 'authors', 'date', 'source', 'version', 'city', 'country'] - } } } \ No newline at end of file diff --git a/reference/config_gemini.py b/reference/config_gemini.py new file mode 100644 index 0000000..d7fb18f --- /dev/null +++ b/reference/config_gemini.py @@ -0,0 +1,292 @@ +def create_prompt_reference(references): + + prompt_reference = f""" + You are an assistant who distinguishes all the components of all citations in an article with output in JSON + + Rules: + - If a DOI is present in the citation, it must be included in the doi field, and the uri field must be None. If there is no DOI, then a valid persistent URL (e.g., from a repository or publisher) must be provided in the uri field instead. One of these fields — doi or uri — must always be populated. Never leave both empty. + - For references of type journal, the field pages must not be included, even if they appear in the original citation. Instead, the page range should be provided only in the fields fpage and lpage. + - Consider that in book-type references, the source field generally refers to the title of the book, so do not use the title field in this case, only source. + + Specifications of JSON: + + {{ + "type": "json_object", + "schema":{{ + "type": "object", + "properties": {{ + "full_text": {{"type": "string"}}, + "reftype": {{"type": "string", "enum": ["journal", "thesis", "book", "data", "webpage", "software", "confproc"]}}, + "authors": {{"type": "array", + "items": {{ + "type": "object", + "properties": {{ + "surname": {{"type": "string"}}, + "fname": {{"type": "string"}}, + "collab": {{"type": "string"}} + }} + }} + }}, + "date": {{"type": "integer"}}, + "title": {{"type": "string"}}, + "chapter": {{"type": "string"}}, + "edition": {{"type": "string"}}, + "source": {{"type": "string"}}, + "vol": {{"type": "integer"}}, + "num": {{"type": "integer"}}, + "pages": {{"type": "string"}}, + "fpage": {{"type": "string"}}, + "lpage": {{"type": "string"}}, + "doi": {{"type": "string"}}, + "degree": {{"type": "string"}}, + "organization": {{"type": "string"}}, + "location": {{"type": "string"}}, + "org_location": {{"type": "string"}}, + "num_pages": {{"type": "integer"}}, + "uri": {{"type": "string"}}, + "access_id": {{"type": "string"}}, + "access_date": {{"type": "string"}}, + "version": {{"type": "string"}}, + }} + }} + }} + + Example: + + Bachman, S., J. Moat, A. W. Hill, J. de la Torre and B. Scott. 2011. Supporting Red List threat assessments with GeoCAT: geospatial conservation assessment tool. ZooKeys 150: 117-126. DOI: https://doi.org/10.3897/zookeys.150.2109 + + Brunel, J. F. 1987. Sur le genre Phyllanthus L. et quelques genres voisins de la Tribu des Phyllantheae Dumort. (Euphorbiaceae, Phyllantheae) en Afrique intertropicale et à Madagascar. Thèse de doctorat de l’Université L. Pasteur. Strasbourg, France. 760 pp. + + Hernández-López, L. 1995. The endemic flora of Jalisco, Mexico: Centers of endemism and implications for conservation. Tesis de maestría. Universidad de Wisconsin. Madison, USA. 74 pp. + + Jones DL. The role of physical activity on the need for revision total knee arthroplasty in individuals with osteoarthritis of the knee [dissertation]. [Pittsburgh (PA)]: University of Pittsburgh; 2001. 436 p. + + Schimper, A. F. W. 1903. Plant geography upon a physiological basis. Clarendon Press. Oxford, UK. 839 pp. + + Correa, M. D., C. Galdames and M. Stapf. 2004. Catálogo de Plantas Vasculares de Panamá. Smithsonian Tropical Research Institute. Ciudad de Panamá, Panamá. 599 pp. + + Hernández-López, L. 2019. Las especies endémicas de plantas en el estado de Jalisco: su distribución y conservación. Comisión Nacional para el Conocimiento y Uso de la Biodiversidad (CONABIO). Cd. Mx., México. https://doi.org/10.15468/ktvqds (consultado diciembre de 2019). + + Lucas Leão; Perobelli, Fernando Salgueiro; Ribeiro, Hilton Manoel Dias, 2024, Data for: Ação Coletiva Institucional e Consórcio Públicos Intermunicipais no Brasil, DOI: 10.48331/scielodata.5Z4TMP, SciELO Data, V1, UNF:6:Neyjad4du3rFprhupCXizA== [fileUNF]. Disponível em: https://doi.org/10.48331/scielodata + + INAFED. 2010. Enciclopedia de los Municipios y Delegaciones de México: Jalisco. Instituto Nacional para el Federalismo y el Desarrollo Municipal. http://www.inafed.gob.mx/ work/enciclopedia/EMM21puebla/index.html (consultado diciembre de 2018). + + COB - Comitê Olímpico Brasileiro. Desafio para o corpo. Disponível em: http://www.cob.org.br/esportes/esporte.asp?id=39. (Acesso em 10 abr 2010) + + Nikon Corporation. 1991-2006. NIS- Elements, version 2.33. Tokio, Japón. + + Hamric, Ann B.; Spross, Judith A.; Hanson, Charlene M. Advanced practice nursing: an integrative approach. 3rd ed. St. Louis (MO): Elsevier Saunders; c2005. 979 p. + + Calkins BM, Mendeloff AI. The epidemiology of idiopathic inflammatory bowel disease. In: Kirsner JB, Shorter RG, eds. Inflammatory bowel disease, 4th ed. Baltimore: Williams & Wilkins. 1995:31-68. + + Furton EJ, Dort V, editors. Addiction and compulsive behaviors. Proceedings of the 17th Workshop for Bishops; 1999; Dallas, TX. Boston: National Catholic Bioethics Center (US); 2000. 258 p. + + Response: + + [ + {{ + "full_text": "Bachman, S., J. Moat, A. W. Hill, J. de la Torre and B. Scott. 2011. Supporting Red List threat assessments with GeoCAT: geospatial conservation assessment tool. ZooKeys 150: 117-126. DOI: https://doi.org/10.3897/zookeys.150.2109", + "reftype": "journal", + "authors": [ + {{ "surname": "Bachman", "fname": "S." }}, + {{ "surname": "Moat", "fname": "J." }}, + {{ "surname": "Hill", "fname": "A. W." }}, + {{ "surname": "de la Torre", "fname": "J." }}, + {{ "surname": "Scott", "fname": "B." }}, + ], + "date": 2011, + "title": "Supporting Red List threat assessments with GeoCAT: geospatial conservation assessment tool", + "source": "ZooKeys", + "vol": "150", + "num": None, + "fpage": "117", + "lpage": "126", + "doi": "10.3897/zookeys.150.2109", + }}, + {{ + "full_text": "Brunel, J. F. 1987. Sur le genre Phyllanthus L. et quelques genres voisins de la Tribu des Phyllantheae Dumort. (Euphorbiaceae, Phyllantheae) en Afrique intertropicale et à Madagascar. Thèse de doctorat de l’Université L. Pasteur. Strasbourg, France. 760 pp.", + "reftype": "Thesis", + "authors": [ + {{ "surname": "Brunel", "fname": "J. F." }}, + ], + "date": 1987, + "source": "Sur le genre Phyllanthus L. et quelques genres voisins de la Tribu des Phyllantheae Dumort. (Euphorbiaceae, Phyllantheae) en Afrique intertropicale et à Madagascar", + "degree": "doctorat", + "organization": "l’Université L. Pasteur", + "location": "Strasbourg, France", + "num_pages": 760 + }}, + {{ + "full_text": "Hernández-López, L. 1995. The endemic flora of Jalisco, Mexico: Centers of endemism and implications for conservation. Tesis de maestría. Universidad de Wisconsin. Madison, USA. 74 pp.", + "reftype": "Thesis", + "authors": [ + {{ "surname": "Hernández-López", "fname": "L." }}, + ], + "date": 1995, + "source": "The endemic flora of Jalisco, Mexico: Centers of endemism and implications for conservation", + "degree": "maestría", + "organization": "Universidad de Wisconsin", + "location": "Madison, USA", + "num_pages": 74 + }}, + {{ + "full_text": "Jones DL. The role of physical activity on the need for revision total knee arthroplasty in individuals with osteoarthritis of the knee [dissertation]. [Pittsburgh (PA)]: University of Pittsburgh; 2001. 436 p.", + "reftype": "Thesis", + "authors": [ + {{ "surname": "Jones", "fname": "DL" }}, + ], + "date": 2001, + "source": "The role of physical activity on the need for revision total knee arthroplasty in individuals with osteoarthritis of the knee [dissertation]", + "organization": "University of Pittsburgh", + "location": "[Pittsburgh (PA)]", + "num_pages": "436 p" + }}, + {{ + "full_text": "Schimper, A. F. W. 1903. Plant geography upon a physiological basis. Clarendon Press. Oxford, UK. 839 pp.", + "reftype": "book", + "authors":[ + {{ "surname": "Schimper", "fname": "A. F. W." }}, + ], + "date": 1903, + "source": "Plant geography upon a physiological basis", + "organization": "Clarendon Press", + "location": "Oxford, UK", + "num_pages": 839 + }}, + {{ + "full_text": "Correa, M. D., C. Galdames and M. Stapf. 2004. Catálogo de Plantas Vasculares de Panamá. Smithsonian Tropical Research Institute. Ciudad de Panamá, Panamá. 599 pp.", + "reftype": "book", + "authors":[ + {{ "surname": "Correa", "fname": "M. D." }}, + {{ "surname": "Galdames", "fname": "C." }}, + {{ "surname": "Stapf", "fname": "M." }}, + ], + "date": 2004, + "source": "Catálogo de Plantas Vasculares de Panamá", + "organization": "Smithsonian Tropical Research Institute", + "location": "Ciudad de Panamá, Panamá", + "num_pages": 599 + }}, + {{ + "full_text": "Hernández-López, L. 2019. Las especies endémicas de plantas en el estado de Jalisco: su distribución y conservación. Comisión Nacional para el Conocimiento y Uso de la Biodiversidad (CONABIO). Cd. Mx., México. https://doi.org/10.15468/ktvqds (consultado diciembre de 2019).", + "reftype": "data", + "authors":[ + {{ "surname": "Hernández-López", "fname": "L." }}, + ], + "date": 2019, + "title": "Las especies endémicas de plantas en el estado de Jalisco: su distribución y conservación", + "source": "Comisión Nacional para el Conocimiento y Uso de la Biodiversidad (CONABIO)", + "location": "Cd. Mx. México", + "doi": "https://doi.org/10.15468/ktvqds ", + "access_date": "diciembre de 2019" + }}, + {{ + "full_text": "Lucas Leão; Perobelli, Fernando Salgueiro; Ribeiro, Hilton Manoel Dias, 2024, Data for: Ação Coletiva Institucional e Consórcio Públicos Intermunicipais no Brasil, DOI: 10.48331/scielodata.5Z4TMP, SciELO Data, V1, UNF:6:Neyjad4du3rFprhupCXizA== [fileUNF]. Disponível em: https://doi.org/10.48331/scielodata", + "reftype": "data", + "authors":[ + {{ "surname": "Leão", "fname": "Lucas" }}, + {{ "surname": "Perobelli", "fname": "Fernando Salgueiro" }}, + {{ "surname": "Ribeiro", "fname": "Hilton Manoel Dias" }} + ], + "date": 2024, + "version": "V1", + "title": "Data for: Ação Coletiva Institucional e Consórcio Públicos Intermunicipais no Brasil", + "source": "SciELO Data", + "doi": "https://doi.org/10.48331/scielodata", + "access_id": "UNF:6:Neyjad4du3rFprhupCXizA== [fileUNF]", + "access_date": "diciembre de 2019" + }}, + {{ + "full_text": "INAFED. 2010. Enciclopedia de los Municipios y Delegaciones de México: Jalisco. Instituto Nacional para el Federalismo y el Desarrollo Municipal. http://www.inafed.gob.mx/ work/enciclopedia/EMM21puebla/index.html (consultado diciembre de 2018).", + "reftype": "webpage", + "authors":[ + {{ "collab": "INAFED" }}, + ], + "date": 2010, + "source": "Enciclopedia de los Municipios y Delegaciones de México: Jalisco", + "organization": "Instituto Nacional para el Federalismo y el Desarrollo Municipal", + "uri": "http://www.inafed.gob.mx/ work/enciclopedia/EMM21puebla/index.html", + "access_date": "diciembre de 2018" + }}, + {{ + "full_text": "COB - Comitê Olímpico Brasileiro. Desafio para o corpo. Disponível em: http://www.cob.org.br/esportes/esporte.asp?id=39. (Acesso em 10 abr 2010)", + "reftype": "webpage", + "authors":[ + {{ "collab": "COB -Comitê Olímpico Brasileiro" }}, + ], + "date": 2010, + "source": "Desafio para o corpo", + "uri": "http://www.cob.org.br/esportes/esporte.asp?id=39", + "access_date": "10 abr 2010" + }}, + {{ + "full_text": "Nikon Corporation. 1991-2006. NIS- Elements, version 2.33. Tokio, Japón.", + "reftype": "software", + "authors":[ + {{ "collab": "Nikon Corporation" }}, + ], + "date": 2006, + "source": "NIS- Elements", + "version": "2.33", + "city": "Tokio", + "country": "Japón", + }}, + {{ + "full_text": "Hamric, Ann B.; Spross, Judith A.; Hanson, Charlene M. Advanced practice nursing: an integrative approach. 3rd ed. St. Louis (MO): Elsevier Saunders; c2005. 979 p.", + "reftype": "book", + "authors":[ + {{ "surname": "Hamric", "fname": "Ann B." }}, + {{ "surname": "Spross", "fname": "Judith A." }}, + {{ "surname": "Hanson", "fname": "Charlene M." }}, + ], + "date": c2005, + "source": "Advanced practice nursing: an integrative approach", + "edition: "3rd ed", + "organization": "Elsevier Saunders", + "location": "St. Louis (MO)", + "num_pages": "979 p" + }}, + {{ + "full_text": "Calkins BM, Mendeloff AI. The epidemiology of idiopathic inflammatory bowel disease. In: Kirsner JB, Shorter RG, eds. Inflammatory bowel disease, 4th ed. Baltimore: Williams & Wilkins. 1995:31-68.", + "reftype": "book", + "authors":[ + {{ "surname": "Calkins", "fname": "BM" }}, + {{ "surname": "Mendeloff", "fname": "AI" }}, + ], + "editors":[ + {{ "surname": "Kirsner", "fname": "JB" }}, + {{ "surname": "Shorter", "fname": "RG" }}, + ], + "date": 1995, + "source": "Inflammatory bowel disease", + "chapter": "The epidemiology of idiopathic inflammatory bowel disease.", + "edition: "4th", + "organization": "Williams & Wilkins", + "location": "Baltimore", + "fpage": 31, + "lpage": 68 + }}, + {{ + "full_text": "Furton EJ, Dort V, editors. Addiction and compulsive behaviors. Proceedings of the 17th Workshop for Bishops; 1999; Dallas, TX. Boston: National Catholic Bioethics Center (US); 2000. 258 p.", + "reftype": "confproc", + "authors":[ + {{ "surname": "Furton", "fname": "EJ" }}, + {{ "surname": "Dort", "fname": "V" }}, + ], + "date": 2000, + "source": "Addiction and compulsive behaviors", + "title": "Proceedings of the 17th Workshop for Bishops", + "location": "Dallas, TX", + "num": "17", + "organization": "National Catholic Bioethics Center (US)", + "org_location": "Boston", + "pages": "258 p" + }} + ] + + Citations: + + {references} + """ + + return prompt_reference \ No newline at end of file diff --git a/reference/tasks.py b/reference/data_utils.py similarity index 97% rename from reference/tasks.py rename to reference/data_utils.py index 51d4eff..b97518f 100644 --- a/reference/tasks.py +++ b/reference/data_utils.py @@ -1,6 +1,6 @@ from config import celery_app from reference.marker import mark_references -from reference.models import Reference, ElementCitation +from reference.models import Reference, ElementCitation, ReferenceStatus import json from lxml import etree import re @@ -116,5 +116,5 @@ def get_reference(obj_id): marked=i, marked_xml=etree.tostring(get_xml(i), pretty_print=True, encoding='unicode') ) - obj_reference.estatus = 2 + obj_reference.estatus = ReferenceStatus.READY obj_reference.save() diff --git a/reference/marker.py b/reference/marker.py index dda75ec..96a639a 100644 --- a/reference/marker.py +++ b/reference/marker.py @@ -1,7 +1,7 @@ import logging -from llama3.generic_llama import ( - GenericLlama, +from model_ai.llama import ( + LlamaService, LlamaDisabledError, LlamaNotInstalledError, LlamaModelNotFoundError, @@ -12,7 +12,7 @@ def mark_reference(reference_text): try: - reference_marker = GenericLlama(MESSAGES, RESPONSE_FORMAT) + reference_marker = LlamaService(MESSAGES, RESPONSE_FORMAT) output = reference_marker.run(reference_text) for item in output.get("choices", []): yield item.get("message", {}).get("content", "") diff --git a/reference/migrations/0001_initial.py b/reference/migrations/0001_initial.py index a8bced5..8df5170 100644 --- a/reference/migrations/0001_initial.py +++ b/reference/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.8 on 2025-02-05 08:54 +# Generated by Django 5.0.8 on 2025-10-17 18:23 import django.core.validators import django.db.models.deletion @@ -23,7 +23,7 @@ class Migration(migrations.Migration): ('created', models.DateTimeField(auto_now_add=True, verbose_name='Creation date')), ('updated', models.DateTimeField(auto_now=True, verbose_name='Last update date')), ('mixed_citation', models.TextField(blank=True, verbose_name='Mixed Citation')), - ('estatus', models.IntegerField(default=0)), + ('status', models.IntegerField(blank=True, choices=[(0, 'No reference'), (1, 'Creating reference'), (2, 'Reference ready')], default=0, verbose_name='Reference status')), ('creator', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_creator', to=settings.AUTH_USER_MODEL, verbose_name='Creator')), ('updated_by', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_last_mod_user', to=settings.AUTH_USER_MODEL, verbose_name='Updater')), ], @@ -37,7 +37,8 @@ class Migration(migrations.Migration): ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('sort_order', models.IntegerField(blank=True, editable=False, null=True)), ('marked', models.JSONField(blank=True, default=dict, verbose_name='Marked')), - ('score', models.IntegerField(blank=True, help_text='Puntuación del 1 al 10', null=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(10)])), + ('marked_xml', models.TextField(blank=True, verbose_name='Marked XML')), + ('score', models.IntegerField(blank=True, help_text='Rating from 1 to 10', null=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(10)])), ('reference', modelcluster.fields.ParentalKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='element_citation', to='reference.reference')), ], options={ diff --git a/reference/migrations/0002_alter_elementcitation_score.py b/reference/migrations/0002_alter_elementcitation_score.py deleted file mode 100644 index 35b76ce..0000000 --- a/reference/migrations/0002_alter_elementcitation_score.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 5.0.8 on 2025-02-14 21:02 - -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reference', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='elementcitation', - name='score', - field=models.IntegerField(blank=True, help_text='Rating from 1 to 10', null=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(10)]), - ), - ] diff --git a/reference/migrations/0003_elementcitation_marked_xml.py b/reference/migrations/0003_elementcitation_marked_xml.py deleted file mode 100644 index a481f68..0000000 --- a/reference/migrations/0003_elementcitation_marked_xml.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.0.8 on 2025-03-02 07:02 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('reference', '0002_alter_elementcitation_score'), - ] - - operations = [ - migrations.AddField( - model_name='elementcitation', - name='marked_xml', - field=models.TextField(blank=True, verbose_name='Marked XML'), - ), - ] diff --git a/reference/models.py b/reference/models.py index e5e39aa..684a045 100755 --- a/reference/models.py +++ b/reference/models.py @@ -11,10 +11,22 @@ from core.forms import CoreAdminModelForm +class ReferenceStatus(models.IntegerChoices): + NO_REFERENCE = 0, _("No reference") + CREATING = 1, _("Creating reference") + READY = 2, _("Reference ready") + + + class Reference(CommonControlField, ClusterableModel): mixed_citation = models.TextField(_("Mixed Citation"), null=False, blank=True) - estatus = models.IntegerField(default=0) + status = models.IntegerField( + _("Reference status"), + choices=ReferenceStatus.choices, + blank=True, + default=ReferenceStatus.NO_REFERENCE + ) panels = [ FieldPanel('mixed_citation'), @@ -26,10 +38,6 @@ class Reference(CommonControlField, ClusterableModel): def __str__(self): return self.mixed_citation - class Meta: - verbose_name = _("Referência") - verbose_name_plural = _("Referências") - class ElementCitation(Orderable): reference = ParentalKey( diff --git a/reference/wagtail_hooks.py b/reference/wagtail_hooks.py index c7c5255..1df2211 100644 --- a/reference/wagtail_hooks.py +++ b/reference/wagtail_hooks.py @@ -1,10 +1,15 @@ +# Third-party imports from django.http import HttpResponseRedirect from django.utils.translation import gettext_lazy as _ from wagtail.snippets.models import register_snippet -from wagtail.snippets.views.snippets import CreateView, SnippetViewSet +from wagtail.snippets.views.snippets import ( + CreateView, + SnippetViewSet, +) +# Local application imports +from reference.data_utils import get_reference from reference.models import Reference -from reference.tasks import get_reference class ReferenceCreateView(CreateView): @@ -30,8 +35,7 @@ def form_valid(self, form): return HttpResponseRedirect(self.get_success_url()) - -class ReferenceAdmin(SnippetViewSet): +class ReferenceModelViewSet(SnippetViewSet): model = Reference add_view_class = ReferenceCreateView menu_label = _("Reference") @@ -43,4 +47,5 @@ class ReferenceAdmin(SnippetViewSet): list_per_page = 20 add_to_admin_menu = True -register_snippet(ReferenceAdmin) \ No newline at end of file + +register_snippet(ReferenceModelViewSet) \ No newline at end of file diff --git a/requirements/base.txt b/requirements/base.txt index 5c1bac1..f8be424 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -42,3 +42,12 @@ git+https://git@github.com/scieloorg/packtools@4.12.6#egg=packtools # Langdetect # ------------------------------------------------------------------------------ langdetect~=1.0.9 +langid + +# Google Generative AI +# ------------------------------------------------------------------------------ +google-generativeai==0.3.2 + +# Docx +# ------------------------------------------------------------------------------ +python-docx==1.1.2 \ No newline at end of file diff --git a/tracker/migrations/0006_alter_generalevent_options.py b/tracker/migrations/0006_alter_generalevent_options.py new file mode 100644 index 0000000..2c1a8b1 --- /dev/null +++ b/tracker/migrations/0006_alter_generalevent_options.py @@ -0,0 +1,17 @@ +# Generated by Django 5.0.8 on 2025-10-20 19:41 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('tracker', '0005_alter_xmldocumentevent_error_type'), + ] + + operations = [ + migrations.AlterModelOptions( + name='generalevent', + options={'ordering': ['-created'], 'verbose_name': 'General Event', 'verbose_name_plural': 'General Events'}, + ), + ]