diff --git a/.dockerignore b/.dockerignore index 63ce98d..c10d370 100644 --- a/.dockerignore +++ b/.dockerignore @@ -37,3 +37,4 @@ wheels/ *.egg-info/ .installed.cfg *.egg +.ipython/ diff --git a/.gitignore b/.gitignore index a3cd991..49f31f2 100644 --- a/.gitignore +++ b/.gitignore @@ -173,4 +173,20 @@ cython_debug/ # End of https://www.toptal.com/developers/gitignore/api/django -llama3/llama-3.2/* \ No newline at end of file +llama3/llama-3.2/* +# Backups locais +*.backup +Makefile.backup +core/media.backup/ + +# Arquivos de trabalho temporário +diff.txt + +# Modelos de AI (muito grandes) +models/ + +# Binários +appimagetool + +# Migrations geradas localmente +reference/migrations/0002_rename_estatus_to_status.py diff --git a/Makefile b/Makefile index ce98fe5..f5dbec0 100755 --- a/Makefile +++ b/Makefile @@ -55,7 +55,7 @@ stop: ## Stop all app using $(compose) restart: @docker compose -f $(compose) restart - + ps: ## See all containers using $(compose) @docker compose -f $(compose) ps @@ -102,10 +102,10 @@ django_load_auth: ## Run manage.py dumpdata auth --indent=2 $(compose) @docker compose -f $(compose) run --rm django python manage.py loaddata --database=default fixtures/auth.json dump_data: ## Dump database into .sql $(compose) - docker exec -t scielo_markup_local_postgres pg_dumpall -c -U debug > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql + docker exec -t markapi_local_postgres pg_dumpall -c -U debug > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql restore_data: ## Restore database into from latest.sql file $(compose) - cat backup/latest.sql | docker exec -i scielo_markup_local_postgres psql -U debug + cat backup/latest.sql | docker exec -i markapi_local_postgres psql -U debug ############################################ ## Atalhos Úteis ## @@ -133,5 +133,4 @@ clean_migrations: ## Remove all migrations @echo "Migrations cleaned successfully." clean_celery_logs: - @sudo truncate -s 0 $$(docker inspect --format='{{.LogPath}}' scielo_markup_local_celeryworker) - + @sudo truncate -s 0 $$(docker inspect --format='{{.LogPath}}' markapi_local_celeryworker) \ No newline at end of file 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..59ec47e 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 @@ -214,7 +218,7 @@ # Wagtail settings -WAGTAIL_SITE_NAME = "markapi" +WAGTAIL_SITE_NAME = "SciELO XML Tools" # Search # https://docs.wagtail.org/en/stable/topics/search/backends.html @@ -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/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po old mode 100644 new mode 100755 index 842760b..b7e2885 --- a/locale/en/LC_MESSAGES/django.po +++ b/locale/en/LC_MESSAGES/django.po @@ -3,13 +3,12 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-04 14:18+0000\n" -"PO-Revision-Date: 2025-09-03 HO:MI+ZONE\n" +"POT-Creation-Date: 2025-10-24 13:56+0000\n" +"PO-Revision-Date: 2025-10-27 HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: English \n" "Language: en\n" @@ -18,6 +17,102 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: core/choices.py:192 +msgid "Editor-Chefe" +msgstr "Editor-in-Chief" + +#: core/choices.py:193 +msgid "Editor(es) Executivo" +msgstr "Executive Editor(s)" + +#: core/choices.py:194 +msgid "Editor(es) Associados ou de Seção" +msgstr "Associate or Section Editor(s)" + +#: core/choices.py:195 +msgid "Equipe Técnica" +msgstr "Technical Team" + +#: core/choices.py:199 +msgid "January" +msgstr "January" + +#: core/choices.py:200 +msgid "February" +msgstr "February" + +#: core/choices.py:201 +msgid "March" +msgstr "March" + +#: core/choices.py:202 +msgid "April" +msgstr "April" + +#: core/choices.py:203 +msgid "May" +msgstr "May" + +#: core/choices.py:204 +msgid "June" +msgstr "June" + +#: core/choices.py:205 +msgid "July" +msgstr "July" + +#: core/choices.py:206 +msgid "August" +msgstr "August" + +#: core/choices.py:207 +msgid "September" +msgstr "September" + +#: core/choices.py:208 +msgid "October" +msgstr "October" + +#: core/choices.py:209 +msgid "November" +msgstr "November" + +#: core/choices.py:210 +msgid "December" +msgstr "December" + +#: core/choices.py:216 +msgid "by" +msgstr "by" + +#: core/choices.py:217 +msgid "by-sa" +msgstr "by-sa" + +#: core/choices.py:218 +msgid "by-nc" +msgstr "by-nc" + +#: core/choices.py:219 +msgid "by-nc-sa" +msgstr "by-nc-sa" + +#: core/choices.py:220 +msgid "by-nd" +msgstr "by-nd" + +#: core/choices.py:221 +msgid "by-nc-nd" +msgstr "by-nc-nd" + +#: core/choices.py:225 +msgid "Male" +msgstr "Male" + +#: core/choices.py:226 +msgid "Female" +msgstr "Female" + #: core/home/templates/home/welcome_page.html:6 msgid "Visit the Wagtail website" msgstr "Visit the Wagtail website" @@ -30,16 +125,6 @@ msgstr "View the release notes" msgid "Welcome to your new Wagtail site!" msgstr "Welcome to your new Wagtail site!" -#: core/home/templates/home/welcome_page.html:28 -msgid "" -"Please feel free to join our community on Slack, or get started with one of the links " -"below." -msgstr "" -"Please feel free to join our community on Slack, or get started with one of the links " -"below." - #: core/home/templates/home/welcome_page.html:35 msgid "Wagtail Documentation" msgstr "Wagtail Documentation" @@ -64,22 +149,84 @@ msgstr "Admin Interface" msgid "Create your superuser first!" msgstr "Create your superuser first!" -#: core/models.py:19 tracker/models.py:76 +#: core/models.py:28 tracker/models.py:76 msgid "Creation date" msgstr "Creation date" -#: core/models.py:22 +#: core/models.py:31 msgid "Last update date" msgstr "Last update date" -#: core/models.py:27 +#: core/models.py:36 msgid "Creator" msgstr "Creator" -#: core/models.py:37 +#: core/models.py:46 msgid "Updater" msgstr "Updater" +#: core/models.py:66 +msgid "Code" +msgstr "Code" + +#: core/models.py:68 +msgid "Sex" +msgstr "Sex" + +#: core/models.py:133 +msgid "Language Name" +msgstr "Language Name" + +#: core/models.py:134 +msgid "Language code 2" +msgstr "Language code 2" + +#: core/models.py:142 core/models.py:190 core/models.py:207 core/models.py:251 +#: core/models.py:523 markup_doc/models.py:357 xml_manager/models.py:58 +#: xml_manager/models.py:90 +msgid "Language" +msgstr "Language" + +#: core/models.py:143 +msgid "Languages" +msgstr "Languages" + +#: core/models.py:186 markup_doc/models.py:129 +msgid "Text" +msgstr "Text" + +#: core/models.py:202 core/models.py:247 +msgid "Rich Text" +msgstr "Rich Text" + +#: core/models.py:203 +msgid "Plain Text" +msgstr "Plain Text" + +#: core/models.py:268 +msgid "Year" +msgstr "Year" + +#: core/models.py:269 +msgid "Month" +msgstr "Month" + +#: core/models.py:270 django_celery_beat/choices.py:18 +msgid "Day" +msgstr "Day" + +#: core/models.py:301 core/models.py:382 +msgid "License" +msgstr "License" + +#: core/models.py:302 core/models.py:383 +msgid "Licenses" +msgstr "Licenses" + +#: core/models.py:515 +msgid "File" +msgstr "File" + #: core_settings/models.py:18 core_settings/models.py:19 msgid "Site configuration" msgstr "Site configuration" @@ -179,10 +326,6 @@ msgstr "Seconds" msgid "Microseconds" msgstr "Microseconds" -#: django_celery_beat/choices.py:18 -msgid "Day" -msgstr "Day" - #: django_celery_beat/choices.py:19 msgid "Hour" msgstr "Hour" @@ -291,355 +434,737 @@ msgstr "interval" msgid "intervals" msgstr "intervals" -#: django_celery_beat/models.py:175 -msgid "every {}" -msgstr "every {}" - -#: django_celery_beat/models.py:180 -msgid "every {} {}" -msgstr "every {} {}" - -#: django_celery_beat/models.py:191 -msgid "Clock Time" -msgstr "Clock Time" +#: django_celery_beat/models.py:169 +msgid "Minute (integer from 0-59)" +msgstr "Minute (integer from 0-59)" -#: django_celery_beat/models.py:192 -msgid "Run the task at clocked time" -msgstr "Run the task at clocked time" +#: django_celery_beat/models.py:171 +msgid "Hour (integer from 0-23)" +msgstr "Hour (integer from 0-23)" -#: django_celery_beat/models.py:198 django_celery_beat/models.py:199 -msgid "clocked" -msgstr "clocked" +#: django_celery_beat/models.py:173 +msgid "Day of the week (0-6, 0 is Sunday, or 'mon', 'tue', etc.)" +msgstr "Day of the week (0-6, 0 is Sunday, or 'mon', 'tue', etc.)" -#: django_celery_beat/models.py:239 -msgid "Minute(s)" -msgstr "Minute(s)" - -#: django_celery_beat/models.py:240 -msgid "Cron Minutes to Run. Use \"*\" for \"all\". (Example: \"0,30\")" -msgstr "Cron Minutes to Run. Use \"*\" for \"all\". (Example: \"0,30\")" - -#: django_celery_beat/models.py:246 -msgid "Hour(s)" -msgstr "Hour(s)" - -#: django_celery_beat/models.py:247 -msgid "Cron Hours to Run. Use \"*\" for \"all\". (Example: \"8,20\")" -msgstr "Cron Hours to Run. Use \"*\" for \"all\". (Example: \"8,20\")" - -#: django_celery_beat/models.py:253 -msgid "Day(s) Of The Week" -msgstr "Day(s) Of The Week" - -#: django_celery_beat/models.py:255 -msgid "Cron Days Of The Week to Run. Use \"*\" for \"all\". (Example: \"0,5\")" -msgstr "" -"Cron Days Of The Week to Run. Use \"*\" for \"all\". (Example: \"0,5\")" +#: django_celery_beat/models.py:176 +msgid "Day of the month (1-31)" +msgstr "Day of the month (1-31)" -#: django_celery_beat/models.py:262 -msgid "Day(s) Of The Month" -msgstr "Day(s) Of The Month" +#: django_celery_beat/models.py:178 +msgid "Month of the year (1-12)" +msgstr "Month of the year (1-12)" -#: django_celery_beat/models.py:264 -msgid "" -"Cron Days Of The Month to Run. Use \"*\" for \"all\". (Example: \"1,15\")" -msgstr "" -"Cron Days Of The Month to Run. Use \"*\" for \"all\". (Example: \"1,15\")" - -#: django_celery_beat/models.py:271 -msgid "Month(s) Of The Year" -msgstr "Month(s) Of The Year" - -#: django_celery_beat/models.py:273 -msgid "" -"Cron Months Of The Year to Run. Use \"*\" for \"all\". (Example: \"0,6\")" -msgstr "" -"Cron Months Of The Year to Run. Use \"*\" for \"all\". (Example: \"0,6\")" - -#: django_celery_beat/models.py:280 -msgid "Cron Timezone" -msgstr "Cron Timezone" +#: django_celery_beat/models.py:180 +msgid "Timezone" +msgstr "Timezone" -#: django_celery_beat/models.py:281 -msgid "Timezone to Run the Cron Schedule on. Default is UTC." -msgstr "Timezone to Run the Cron Schedule on. Default is UTC." +#: django_celery_beat/models.py:209 +msgid "The human-readable timezone name that this schedule will follow (e.g. 'Europe/Berlin')" +msgstr "The human-readable timezone name that this schedule will follow (e.g. 'Europe/Berlin')" -#: django_celery_beat/models.py:287 +#: django_celery_beat/models.py:233 msgid "crontab" msgstr "crontab" -#: django_celery_beat/models.py:288 +#: django_celery_beat/models.py:234 msgid "crontabs" msgstr "crontabs" -#: django_celery_beat/models.py:385 +#: django_celery_beat/models.py:254 msgid "Name" msgstr "Name" -#: django_celery_beat/models.py:386 -msgid "Short Description For This Task" -msgstr "Short Description For This Task" - -#: django_celery_beat/models.py:392 -msgid "" -"The Name of the Celery Task that Should be Run. (Example: \"proj.tasks." -"import_contacts\")" -msgstr "" -"The Name of the Celery Task that Should be Run. (Example: \"proj.tasks." -"import_contacts\")" - -#: django_celery_beat/models.py:404 -msgid "Interval Schedule" -msgstr "Interval Schedule" - -#: django_celery_beat/models.py:406 -msgid "" -"Interval Schedule to run the task on. Set only one schedule type, leave the " -"others null." -msgstr "" -"Interval Schedule to run the task on. Set only one schedule type, leave the " -"others null." - -#: django_celery_beat/models.py:415 -msgid "Crontab Schedule" -msgstr "Crontab Schedule" - -#: django_celery_beat/models.py:417 -msgid "" -"Crontab Schedule to run the task on. Set only one schedule type, leave the " -"others null." -msgstr "" -"Crontab Schedule to run the task on. Set only one schedule type, leave the " -"others null." +#: django_celery_beat/models.py:255 +msgid "Event" +msgstr "Event" -#: django_celery_beat/models.py:426 -msgid "Solar Schedule" -msgstr "Solar Schedule" +#: django_celery_beat/models.py:301 +msgid "Clocked Time" +msgstr "Clocked Time" -#: django_celery_beat/models.py:428 -msgid "" -"Solar Schedule to run the task on. Set only one schedule type, leave the " -"others null." -msgstr "" -"Solar Schedule to run the task on. Set only one schedule type, leave the " -"others null." +#: django_celery_beat/models.py:308 +msgid "clocked schedule" +msgstr "clocked schedule" -#: django_celery_beat/models.py:437 -msgid "Clocked Schedule" -msgstr "Clocked Schedule" +#: django_celery_beat/models.py:309 +msgid "clocked schedules" +msgstr "clocked schedules" -#: django_celery_beat/models.py:439 -msgid "" -"Clocked Schedule to run the task on. Set only one schedule type, leave the " -"others null." -msgstr "" -"Clocked Schedule to run the task on. Set only one schedule type, leave the " -"others null." +#: django_celery_beat/models.py:407 +msgid "seconds" +msgstr "seconds" -#: django_celery_beat/models.py:447 -msgid "Positional Arguments" -msgstr "Positional Arguments" +#: django_celery_beat/models.py:412 +msgid "positional arguments" +msgstr "positional arguments" -#: django_celery_beat/models.py:448 +#: django_celery_beat/models.py:414 msgid "JSON encoded positional arguments (Example: [\"arg1\", \"arg2\"])" msgstr "JSON encoded positional arguments (Example: [\"arg1\", \"arg2\"])" -#: django_celery_beat/models.py:453 -msgid "Keyword Arguments" -msgstr "Keyword Arguments" +#: django_celery_beat/models.py:419 +msgid "keyword arguments" +msgstr "keyword arguments" -#: django_celery_beat/models.py:455 +#: django_celery_beat/models.py:421 msgid "JSON encoded keyword arguments (Example: {\"argument\": \"value\"})" msgstr "JSON encoded keyword arguments (Example: {\"argument\": \"value\"})" -#: django_celery_beat/models.py:464 -msgid "Queue Override" -msgstr "Queue Override" - -#: django_celery_beat/models.py:466 -msgid "Queue defined in CELERY_TASK_QUEUES. Leave None for default queuing." -msgstr "Queue defined in CELERY_TASK_QUEUES. Leave None for default queuing." - -#: django_celery_beat/models.py:478 -msgid "Exchange" -msgstr "Exchange" - -#: django_celery_beat/models.py:479 -msgid "Override Exchange for low-level AMQP routing" -msgstr "Override Exchange for low-level AMQP routing" +#: django_celery_beat/models.py:426 +msgid "queue" +msgstr "queue" -#: django_celery_beat/models.py:486 -msgid "Routing Key" -msgstr "Routing Key" +#: django_celery_beat/models.py:430 +msgid "exchange" +msgstr "exchange" -#: django_celery_beat/models.py:487 -msgid "Override Routing Key for low-level AMQP routing" -msgstr "Override Routing Key for low-level AMQP routing" +#: django_celery_beat/models.py:434 +msgid "routing key" +msgstr "routing key" -#: django_celery_beat/models.py:492 -msgid "AMQP Message Headers" -msgstr "AMQP Message Headers" +#: django_celery_beat/models.py:438 +msgid "headers" +msgstr "headers" -#: django_celery_beat/models.py:493 +#: django_celery_beat/models.py:440 msgid "JSON encoded message headers for the AMQP message." msgstr "JSON encoded message headers for the AMQP message." -#: django_celery_beat/models.py:501 -msgid "Priority" -msgstr "Priority" +#: django_celery_beat/models.py:444 +msgid "priority" +msgstr "priority" -#: django_celery_beat/models.py:503 -msgid "" -"Priority Number between 0 and 255. Supported by: RabbitMQ, Redis (priority " -"reversed, 0 is highest)." -msgstr "" -"Priority Number between 0 and 255. Supported by: RabbitMQ, Redis (priority " -"reversed, 0 is highest)." +#: django_celery_beat/models.py:446 +msgid "Priority Number between 0 and 255. Supported by: RabbitMQ." +msgstr "Priority Number between 0 and 255. Supported by: RabbitMQ." -#: django_celery_beat/models.py:510 -msgid "Expires Datetime" -msgstr "Expires Datetime" +#: django_celery_beat/models.py:453 +msgid "expires" +msgstr "expires" -#: django_celery_beat/models.py:512 -msgid "" -"Datetime after which the schedule will no longer trigger the task to run" -msgstr "" -"Datetime after which the schedule will no longer trigger the task to run" +#: django_celery_beat/models.py:455 +msgid "Datetime after which the schedule will no longer trigger the task to run" +msgstr "Datetime after which the schedule will no longer trigger the task to run" -#: django_celery_beat/models.py:519 -msgid "Expires timedelta with seconds" -msgstr "Expires timedelta with seconds" +#: django_celery_beat/models.py:460 +msgid "expire seconds" +msgstr "expire seconds" -#: django_celery_beat/models.py:521 -msgid "" -"Timedelta with seconds which the schedule will no longer trigger the task to " -"run" -msgstr "" -"Timedelta with seconds which the schedule will no longer trigger the task to " -"run" +#: django_celery_beat/models.py:462 +msgid "Timedelta with seconds which the schedule will no longer trigger the task to run" +msgstr "Timedelta with seconds which the schedule will no longer trigger the task to run" -#: django_celery_beat/models.py:527 -msgid "One-off Task" -msgstr "One-off Task" +#: django_celery_beat/models.py:467 +msgid "one-off task" +msgstr "one-off task" -#: django_celery_beat/models.py:528 +#: django_celery_beat/models.py:469 msgid "If True, the schedule will only run the task a single time" msgstr "If True, the schedule will only run the task a single time" -#: django_celery_beat/models.py:533 -msgid "Start Datetime" -msgstr "Start Datetime" +#: django_celery_beat/models.py:473 +msgid "start datetime" +msgstr "start datetime" -#: django_celery_beat/models.py:535 +#: django_celery_beat/models.py:475 msgid "Datetime when the schedule should begin triggering the task to run" msgstr "Datetime when the schedule should begin triggering the task to run" -#: django_celery_beat/models.py:540 -msgid "Enabled" -msgstr "Enabled" +#: django_celery_beat/models.py:480 +msgid "enabled" +msgstr "enabled" -#: django_celery_beat/models.py:541 +#: django_celery_beat/models.py:482 msgid "Set to False to disable the schedule" msgstr "Set to False to disable the schedule" -#: django_celery_beat/models.py:549 -msgid "Last Run Datetime" -msgstr "Last Run Datetime" +#: django_celery_beat/models.py:486 +msgid "last run at" +msgstr "last run at" -#: django_celery_beat/models.py:551 -msgid "" -"Datetime that the schedule last triggered the task to run. Reset to None if " -"enabled is set to False." -msgstr "" -"Datetime that the schedule last triggered the task to run. Reset to None if " -"enabled is set to False." +#: django_celery_beat/models.py:488 +msgid "Datetime that the schedule last triggered the task to run. Reset to None if enabled is set to False." +msgstr "Datetime that the schedule last triggered the task to run. Reset to None if enabled is set to False." -#: django_celery_beat/models.py:558 -msgid "Total Run Count" -msgstr "Total Run Count" +#: django_celery_beat/models.py:493 +msgid "total run count" +msgstr "total run count" -#: django_celery_beat/models.py:560 +#: django_celery_beat/models.py:495 msgid "Running count of how many times the schedule has triggered the task" msgstr "Running count of how many times the schedule has triggered the task" -#: django_celery_beat/models.py:565 -msgid "Last Modified" -msgstr "Last Modified" +#: django_celery_beat/models.py:499 +msgid "datetime changed" +msgstr "datetime changed" -#: django_celery_beat/models.py:566 +#: django_celery_beat/models.py:501 msgid "Datetime that this PeriodicTask was last modified" msgstr "Datetime that this PeriodicTask was last modified" -#: django_celery_beat/models.py:570 -msgid "Description" -msgstr "Description" +#: django_celery_beat/models.py:505 +msgid "description" +msgstr "description" -#: django_celery_beat/models.py:571 +#: django_celery_beat/models.py:507 msgid "Detailed description about the details of this Periodic Task" msgstr "Detailed description about the details of this Periodic Task" -#: django_celery_beat/models.py:576 -msgid "This is the configuration area for executing asynchronous tasks." -msgstr "This is the configuration area for executing asynchronous tasks." - -#: django_celery_beat/models.py:597 -msgid "Content" -msgstr "Content" +#: django_celery_beat/models.py:755 +msgid "Only one schedule can be selected: Interval, Crontab, Solar, or Clocked" +msgstr "Only one schedule can be selected: Interval, Crontab, Solar, or Clocked" -#: django_celery_beat/models.py:598 -msgid "Scheduler" -msgstr "Scheduler" +#: django_celery_beat/models.py:759 +msgid "One of interval, crontab, solar, or clocked must be set." +msgstr "One of interval, crontab, solar, or clocked must be set." -#: django_celery_beat/models.py:608 +#: django_celery_beat/models.py:785 msgid "periodic task" msgstr "periodic task" -#: django_celery_beat/models.py:609 +#: django_celery_beat/models.py:786 msgid "periodic tasks" msgstr "periodic tasks" -#: django_celery_beat/templates/admin/djcelery/change_list.html:6 -msgid "Home" -msgstr "Home" +#: django_celery_beat/wagtail_hooks.py:217 +msgid "enabled,disabled" +msgstr "enabled,disabled" -#: django_celery_beat/views.py:34 -#, python-brace-format -msgid "Task {0} was successfully run" -msgstr "Task {0} was successfully run" +#: django_celery_beat/wagtail_hooks.py:224 +msgid "Periodic tasks" +msgstr "Periodic tasks" -#: django_celery_beat/wagtail_hooks.py:193 -msgid "Tasks" -msgstr "Tasks" +#: journal/models.py:27 +msgid "Site ID" +msgstr "Site ID" + +#: journal/models.py:29 +msgid "Short title" +msgstr "Short title" + +#: journal/models.py:31 +msgid "Journal ISSN" +msgstr "Journal ISSN" + +#: journal/models.py:33 +msgid "Online Journal ISSN" +msgstr "Online Journal ISSN" + +#: journal/models.py:36 +msgid "ISSN SciELO" +msgstr "ISSN SciELO" + +#: journal/models.py:38 +msgid "ISSN SciELO Legacy" +msgstr "ISSN SciELO Legacy" + +#: journal/models.py:41 +msgid "Subject descriptors" +msgstr "Subject descriptors" + +#: journal/models.py:46 +msgid "Purpose" +msgstr "Purpose" + +#: journal/models.py:49 +msgid "Sponsorship" +msgstr "Sponsorship" + +#: journal/models.py:52 +msgid "Mission" +msgstr "Mission" + +#: journal/models.py:55 +msgid "Index at" +msgstr "Index at" + +#: journal/models.py:58 +msgid "Availability" +msgstr "Availability" + +#: journal/models.py:61 +msgid "Summary form" +msgstr "Summary form" + +#: journal/models.py:64 +msgid "Standard" +msgstr "Standard" + +#: journal/models.py:67 +msgid "Alphabet title" +msgstr "Alphabet title" + +#: journal/models.py:69 +msgid "Print title" +msgstr "Print title" + +#: journal/models.py:72 +msgid "Short title (slug)" +msgstr "Short title (slug)" + +#: journal/models.py:76 +#: markup_doc/models.py:40 +msgid "Title" +msgstr "Title" + +#: journal/models.py:81 +msgid "Subtitle" +msgstr "Subtitle" + +#: journal/models.py:86 +msgid "Next title" +msgstr "Next title" + +#: journal/models.py:90 +msgid "Previous title" +msgstr "Previous title" + +#: journal/models.py:94 +msgid "Control number" +msgstr "Control number" + +#: journal/models.py:97 +msgid "Publisher name" +msgstr "Publisher name" + +#: journal/models.py:99 +msgid "Publisher country" +msgstr "Publisher country" + +#: journal/models.py:102 +msgid "Publisher state" +msgstr "Publisher state" + +#: journal/models.py:105 +msgid "Publisher city" +msgstr "Publisher city" + +#: journal/models.py:108 +msgid "Publisher address" +msgstr "Publisher address" + +#: journal/models.py:111 +msgid "Publication level" +msgstr "Publication level" + +#: journal/models.py:115 +msgid "Email" +msgstr "Email" + +#: journal/models.py:119 +msgid "URL online submission" +msgstr "URL online submission" + +#: journal/models.py:122 +msgid "URL home page" +msgstr "URL home page" + +#: journal/models.py:146 +msgid "Journal" +msgstr "Journal" + +#: journal/models.py:147 +msgid "Journals" +msgstr "Journals" + +#: journal/models.py:162 +msgid "Order" +msgstr "Order" + +#: journal/models.py:174 +msgid "Editor" +msgstr "Editor" + +#: journal/models.py:175 +msgid "Editors" +msgstr "Editors" + +#: journal/wagtail_hooks.py:57 +msgid "Journal and Editor" +msgstr "Journal and Editor" + +#: location/models.py:11 +msgid "Country Name" +msgstr "Country Name" + +#: location/models.py:12 +msgid "ACR3" +msgstr "ACR3" + +#: location/models.py:13 +msgid "ACR2" +msgstr "ACR2" + +#: location/models.py:23 +msgid "Country" +msgstr "Country" + +#: location/models.py:24 +msgid "Countries" +msgstr "Countries" + +#: location/models.py:36 +msgid "State name" +msgstr "State name" + +#: location/models.py:37 +msgid "ACR 2 (state)" +msgstr "ACR 2 (state)" + +#: location/models.py:48 +msgid "State" +msgstr "State" + +#: location/models.py:49 +msgid "States" +msgstr "States" + +#: location/models.py:61 +msgid "City name" +msgstr "City name" + +#: location/models.py:75 +msgid "City" +msgstr "City" + +#: location/models.py:76 +msgid "Cities" +msgstr "Cities" + +#: location/wagtail_hooks.py:55 +msgid "Location" +msgstr "Location" + +#: markup_doc/choices.py:11 +msgid "Document without content" +msgstr "Document without content" + +#: markup_doc/choices.py:12 +msgid "Structured document without references" +msgstr "Structured document without references" + +#: markup_doc/choices.py:13 +msgid "Structured document" +msgstr "Structured document" + +#: markup_doc/choices.py:14 +msgid "Structured document and references" +msgstr "Structured document and references" + +#: markup_doc/models.py:33 +msgid "DOI" +msgstr "DOI" + +#: markup_doc/models.py:56 +msgid "Rich Title" +msgstr "Rich Title" + +#: markup_doc/models.py:58 +msgid "Clean Title" +msgstr "Clean Title" + +#: markup_doc/models.py:97 +msgid "Document" +msgstr "Document" + +#: markup_doc/models.py:98 +#: markup_doc/wagtail_hooks.py:94 +msgid "Documents" +msgstr "Documents" + +#: markup_doc/models.py:130 +msgid "Type" +msgstr "Type" + +#: markup_doc/models.py:137 +msgid "Paragraph" +msgstr "Paragraph" + +#: markup_doc/models.py:138 +msgid "Paragraphs" +msgstr "Paragraphs" + +#: markup_doc/models.py:218 +msgid "Section title" +msgstr "Section title" + +#: markup_doc/models.py:222 +msgid "Section code" +msgstr "Section code" + +#: markup_doc/models.py:245 +msgid "Section" +msgstr "Section" + +#: markup_doc/models.py:246 +msgid "Sections" +msgstr "Sections" + +#: markup_doc/models.py:279 +msgid "Figure" +msgstr "Figure" + +#: markup_doc/models.py:280 +msgid "Figures" +msgstr "Figures" + +#: markup_doc/models.py:306 +msgid "Table" +msgstr "Table" + +#: markup_doc/models.py:307 +msgid "Tables" +msgstr "Tables" + +#: markup_doc/models.py:322 +msgid "Supplementary Material" +msgstr "Supplementary Material" + +#: markup_doc/models.py:323 +msgid "Supplementary Materials" +msgstr "Supplementary Materials" + +#: markup_doc/models.py:336 +msgid "Document ID" +msgstr "Document ID" + +#: markup_doc/models.py:340 +msgid "Document ID type" +msgstr "Document ID type" + +#: markup_doc/models.py:341 +msgid "Publisher ID" +msgstr "Publisher ID" + +#: markup_doc/models.py:342 +msgid "Pub Acronym" +msgstr "Pub Acronym" + +#: markup_doc/models.py:343 +msgid "Vol" +msgstr "Vol" + +#: markup_doc/models.py:344 +msgid "Suppl Vol" +msgstr "Suppl Vol" + +#: markup_doc/models.py:345 +msgid "Num" +msgstr "Num" + +#: markup_doc/models.py:346 +msgid "Suppl Num" +msgstr "Suppl Num" + +#: markup_doc/models.py:346 +msgid "Isid Part" +msgstr "Isid Part" + +#: markup_doc/models.py:347 +msgid "Dateiso" +msgstr "Dateiso" + +#: markup_doc/models.py:348 +msgid "Month/Season" +msgstr "Month/Season" + +#: markup_doc/models.py:349 +msgid "First Page" +msgstr "First Page" + +#: markup_doc/models.py:350 +msgid "@Seq" +msgstr "@Seq" + +#: markup_doc/models.py:351 +msgid "Last Page" +msgstr "Last Page" + +#: markup_doc/models.py:352 +msgid "Elocation ID" +msgstr "Elocation ID" + +#: markup_doc/models.py:353 +msgid "Order (In TOC)" +msgstr "Order (In TOC)" + +#: markup_doc/models.py:354 +msgid "Pag count" +msgstr "Pag count" + +#: markup_doc/models.py:355 +msgid "Doc Topic" +msgstr "Doc Topic" + +#: markup_doc/models.py:363 +msgid "Sps version" +msgstr "Sps version" + +#: markup_doc/models.py:364 +msgid "Artdate" +msgstr "Artdate" + +#: markup_doc/models.py:365 +msgid "Ahpdate" +msgstr "Ahpdate" + +#: markup_doc/models.py:370 +msgid "Document xml" +msgstr "Document xml" + +#: markup_doc/models.py:374 +msgid "Text XML" +msgstr "Text XML" + +#: markup_doc/models.py:513 +msgid "Details" +msgstr "Details" + +#: markup_doc/wagtail_hooks.py:117 +msgid "Documents Markup" +msgstr "Documents Markup" + +#: markup_doc/wagtail_hooks.py:130 +msgid "Carregar DOCX" +msgstr "Load DOCX" + +#: markup_doc/wagtail_hooks.py:148 +msgid "XML marcado" +msgstr "Marked XML" + +#: markup_doc/wagtail_hooks.py:189 +msgid "Modelo de Coleções" +msgstr "Collections Template" + +#: markup_doc/wagtail_hooks.py:209 +msgid "Modelo de Revistas" +msgstr "Journals Template" + +#: markup_doc/wagtail_hooks.py:240 +msgid "DOCX Files" +msgstr "DOCX Files" + +#: model_ai/models.py:21 +msgid "No model" +msgstr "No model" + +#: model_ai/models.py:22 +msgid "Downloading model" +msgstr "Downloading model" + +#: model_ai/models.py:23 +msgid "Model downloaded" +msgstr "Model downloaded" + +#: model_ai/models.py:24 +msgid "Download error" +msgstr "Download error" + +#: model_ai/models.py:34 +msgid "Hugging Face model name" +msgstr "Hugging Face model name" + +#: model_ai/models.py:35 +msgid "Model file" +msgstr "Model file" + +#: model_ai/models.py:36 +msgid "Hugging Face token" +msgstr "Hugging Face token" + +#: model_ai/models.py:38 +msgid "Local model status" +msgstr "Local model status" + +#: model_ai/models.py:44 +msgid "URL Markapi" +msgstr "URL Markapi" + +#: model_ai/models.py:49 +msgid "API KEY Gemini" +msgstr "API KEY Gemini" + +#: model_ai/models.py:67 model_ai/models.py:71 +msgid "Only one instance of LlamaModel is allowed." +msgstr "Only one instance of LlamaModel is allowed." + +#: model_ai/wagtail_hooks.py:28 model_ai/wagtail_hooks.py:63 +msgid "Model name is required." +msgstr "Model name is required." + +#: model_ai/wagtail_hooks.py:32 model_ai/wagtail_hooks.py:67 +msgid "Model file is required." +msgstr "Model file is required." + +#: model_ai/wagtail_hooks.py:36 model_ai/wagtail_hooks.py:71 +msgid "Hugging Face token is required." +msgstr "Hugging Face token is required." + +#: model_ai/wagtail_hooks.py:42 +msgid "Model created and download started." +msgstr "Model created and download started." + +#: model_ai/wagtail_hooks.py:46 model_ai/wagtail_hooks.py:82 +msgid "API AI URL is required." +msgstr "API AI URL is required." + +#: model_ai/wagtail_hooks.py:50 +msgid "Model created, use API AI." +msgstr "Model created, use API AI." + +#: model_ai/wagtail_hooks.py:77 +msgid "Model updated and download started." +msgstr "Model updated and download started." + +#: model_ai/wagtail_hooks.py:79 +msgid "Model updated and already downloaded." +msgstr "Model updated and already downloaded." + +#: model_ai/wagtail_hooks.py:86 +msgid "Model updated, use API AI." +msgstr "Model updated, use API AI." + +#: model_ai/wagtail_hooks.py:95 +msgid "AI LLM Model" +msgstr "AI LLM Model" #: reference/models.py:15 +msgid "No reference" +msgstr "No reference" + +#: reference/models.py:16 +msgid "Creating reference" +msgstr "Creating reference" + +#: reference/models.py:17 +msgid "Reference ready" +msgstr "Reference ready" + +#: reference/models.py:22 msgid "Mixed Citation" msgstr "Mixed Citation" -#: reference/models.py:30 -#, fuzzy -#| msgid "Reference" -msgid "Referência" -msgstr "Reference" +#: reference/models.py:25 +msgid "Reference status" +msgstr "Reference status" -#: reference/models.py:31 -#, fuzzy -#| msgid "Reference" -msgid "Referências" -msgstr "Reference" +#: reference/models.py:33 +msgid "Cited Elements" +msgstr "Cited Elements" -#: reference/models.py:38 +#: reference/models.py:46 msgid "Marked" msgstr "Marked" -#: reference/models.py:39 +#: reference/models.py:47 msgid "Marked XML" msgstr "Marked XML" -#: reference/models.py:48 +#: reference/models.py:56 msgid "Rating from 1 to 10" msgstr "Rating from 1 to 10" -#: reference/wagtail_hooks.py:45 +#: reference/wagtail_hooks.py:41 msgid "Reference" msgstr "Reference" @@ -828,10 +1353,6 @@ msgstr "DOCX File" msgid "Intermediate DOCX file generated during PDF creation" msgstr "Intermediate DOCX file generated during PDF creation" -#: xml_manager/models.py:58 xml_manager/models.py:90 -msgid "Language" -msgstr "Language" - #: xml_manager/models.py:59 xml_manager/models.py:91 msgid "Language code or name" msgstr "Language code or name" @@ -867,34 +1388,26 @@ msgid "Exceptions file" msgstr "Exceptions file" #: xml_manager/wagtail_hooks.py:118 -msgid "XML Manager" -msgstr "XML Manager" - -#, fuzzy -#~| msgid "Marked" -#~ msgid "marked" -#~ msgstr "Marked" +msgid "XML Processor" +msgstr "XML Processor" -#, fuzzy -#~| msgid "Marked" -#~ msgid "marked_xml" -#~ msgstr "Marked" -#~ msgid "score" -#~ msgstr "pontuação" +#: menu items +msgid "XML Files" +msgstr "XML Files" -#, fuzzy -#~| msgid "Action" -#~ msgid "Actions" -#~ msgstr "Action" +#: menu items +msgid "Tarefas" +msgstr "Tasks" -#~ msgid "Ações" -#~ msgstr "Actions" +#: markup_doc/wagtail_hooks.py +msgid "You must first select a collection." +msgstr "You must first select a collection." -#, fuzzy -#~| msgid "Essa é a área de configuração de execuçãoo de tarefas assíncronas." -#~ msgid "Essa é a área de configuração de execução de tarefas assíncronas." -#~ msgstr "This is the configuration area for executing asynchronous tasks." +#: markup_doc/wagtail_hooks.py +msgid "Wait a moment, there are no Journal elements yet." +msgstr "Wait a moment, there are no Journal elements yet." -#~ msgid "Configuração do site" -#~ msgstr "Site configuration" +#: markup_doc/wagtail_hooks.py +msgid "Synchronizing journals from the API, please wait a moment..." +msgstr "Synchronizing journals from the API, please wait a moment..." \ No newline at end of file diff --git a/locale/es/LC_MESSAGES/django.po b/locale/es/LC_MESSAGES/django.po old mode 100644 new mode 100755 index c9a213c..69ee7fe --- a/locale/es/LC_MESSAGES/django.po +++ b/locale/es/LC_MESSAGES/django.po @@ -3,13 +3,12 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-04 14:18+0000\n" -"PO-Revision-Date: 2025-09-03 HO:MI+ZONE\n" +"POT-Creation-Date: 2025-10-24 13:56+0000\n" +"PO-Revision-Date: 2025-10-27 HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: Spanish \n" "Language: es\n" @@ -19,6 +18,102 @@ msgstr "" "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? " "1 : 2;\n" +#: core/choices.py:192 +msgid "Editor-Chefe" +msgstr "Editor en Jefe" + +#: core/choices.py:193 +msgid "Editor(es) Executivo" +msgstr "Editor(es) Ejecutivo" + +#: core/choices.py:194 +msgid "Editor(es) Associados ou de Seção" +msgstr "Editor(es) Asociados o de Sección" + +#: core/choices.py:195 +msgid "Equipe Técnica" +msgstr "Equipo Técnico" + +#: core/choices.py:199 +msgid "January" +msgstr "Enero" + +#: core/choices.py:200 +msgid "February" +msgstr "Febrero" + +#: core/choices.py:201 +msgid "March" +msgstr "Marzo" + +#: core/choices.py:202 +msgid "April" +msgstr "Abril" + +#: core/choices.py:203 +msgid "May" +msgstr "Mayo" + +#: core/choices.py:204 +msgid "June" +msgstr "Junio" + +#: core/choices.py:205 +msgid "July" +msgstr "Julio" + +#: core/choices.py:206 +msgid "August" +msgstr "Agosto" + +#: core/choices.py:207 +msgid "September" +msgstr "Septiembre" + +#: core/choices.py:208 +msgid "October" +msgstr "Octubre" + +#: core/choices.py:209 +msgid "November" +msgstr "Noviembre" + +#: core/choices.py:210 +msgid "December" +msgstr "Diciembre" + +#: core/choices.py:216 +msgid "by" +msgstr "por" + +#: core/choices.py:217 +msgid "by-sa" +msgstr "by-sa" + +#: core/choices.py:218 +msgid "by-nc" +msgstr "by-nc" + +#: core/choices.py:219 +msgid "by-nc-sa" +msgstr "by-nc-sa" + +#: core/choices.py:220 +msgid "by-nd" +msgstr "by-nd" + +#: core/choices.py:221 +msgid "by-nc-nd" +msgstr "by-nc-nd" + +#: core/choices.py:225 +msgid "Male" +msgstr "Masculino" + +#: core/choices.py:226 +msgid "Female" +msgstr "Femenino" + #: core/home/templates/home/welcome_page.html:6 msgid "Visit the Wagtail website" msgstr "Visita el sitio web de Wagtail" @@ -31,16 +126,6 @@ msgstr "Ver las notas de lanzamiento" msgid "Welcome to your new Wagtail site!" msgstr "¡Bienvenido a tu nuevo sitio Wagtail!" -#: core/home/templates/home/welcome_page.html:28 -msgid "" -"Please feel free to join our community on Slack, or get started with one of the links " -"below." -msgstr "" -"Siéntete libre de unirte a nuestra comunidad en Slack, o comenzar con uno de los " -"enlaces a continuación." - #: core/home/templates/home/welcome_page.html:35 msgid "Wagtail Documentation" msgstr "Documentación de Wagtail" @@ -65,22 +150,84 @@ msgstr "Interfaz de Administración" msgid "Create your superuser first!" msgstr "¡Crea tu superusuario primero!" -#: core/models.py:19 tracker/models.py:76 +#: core/models.py:28 tracker/models.py:76 msgid "Creation date" msgstr "Fecha de creación" -#: core/models.py:22 +#: core/models.py:31 msgid "Last update date" msgstr "Fecha de última actualización" -#: core/models.py:27 +#: core/models.py:36 msgid "Creator" msgstr "Creador" -#: core/models.py:37 +#: core/models.py:46 msgid "Updater" msgstr "Actualizador" +#: core/models.py:66 +msgid "Code" +msgstr "Código" + +#: core/models.py:68 +msgid "Sex" +msgstr "Sexo" + +#: core/models.py:133 +msgid "Language Name" +msgstr "Nombre del Idioma" + +#: core/models.py:134 +msgid "Language code 2" +msgstr "Código de idioma 2" + +#: core/models.py:142 core/models.py:190 core/models.py:207 core/models.py:251 +#: core/models.py:523 markup_doc/models.py:357 xml_manager/models.py:58 +#: xml_manager/models.py:90 +msgid "Language" +msgstr "Idioma" + +#: core/models.py:143 +msgid "Languages" +msgstr "Idiomas" + +#: core/models.py:186 markup_doc/models.py:129 +msgid "Text" +msgstr "Texto" + +#: core/models.py:202 core/models.py:247 +msgid "Rich Text" +msgstr "Texto Enriquecido" + +#: core/models.py:203 +msgid "Plain Text" +msgstr "Texto Plano" + +#: core/models.py:268 +msgid "Year" +msgstr "Año" + +#: core/models.py:269 +msgid "Month" +msgstr "Mes" + +#: core/models.py:270 django_celery_beat/choices.py:18 +msgid "Day" +msgstr "Día" + +#: core/models.py:301 core/models.py:382 +msgid "License" +msgstr "Licencia" + +#: core/models.py:302 core/models.py:383 +msgid "Licenses" +msgstr "Licencias" + +#: core/models.py:515 +msgid "File" +msgstr "Archivo" + #: core_settings/models.py:18 core_settings/models.py:19 msgid "Site configuration" msgstr "Configuración del sitio" @@ -180,10 +327,6 @@ msgstr "Segundos" msgid "Microseconds" msgstr "Microsegundos" -#: django_celery_beat/choices.py:18 -msgid "Day" -msgstr "Día" - #: django_celery_beat/choices.py:19 msgid "Hour" msgstr "Hora" @@ -225,435 +368,751 @@ msgid "Nautical dusk" msgstr "Anochecer náutico" #: django_celery_beat/choices.py:32 -msgid "Solar noon" -msgstr "Mediodía solar" +msgid "Dawn" +msgstr "Amanecer" #: django_celery_beat/choices.py:33 msgid "Sunrise" -msgstr "Amanecer" +msgstr "Salida del sol" #: django_celery_beat/choices.py:34 +msgid "Solar noon" +msgstr "Mediodía solar" + +#: django_celery_beat/choices.py:35 msgid "Sunset" -msgstr "Atardecer" +msgstr "Puesta del sol" -#: django_celery_beat/models.py:70 -msgid "Solar Event" -msgstr "Evento Solar" +#: django_celery_beat/choices.py:36 +msgid "Dusk" +msgstr "Anochecer" + +#: django_celery_beat/forms.py:139 +msgid "Crontab expression is invalid. Please check the input fields." +msgstr "La expresión crontab es inválida. Por favor verifica los campos de entrada." + +#: django_celery_beat/models.py:24 +msgid "interval" +msgstr "intervalo" + +#: django_celery_beat/models.py:25 +msgid "intervals" +msgstr "intervalos" -#: django_celery_beat/models.py:71 -msgid "The type of solar event when the job should run" -msgstr "El tipo de evento solar cuando la tarea debe ejecutarse" +#: django_celery_beat/models.py:52 +msgid "Minute (integer from 0-59)" +msgstr "Minuto (entero de 0-59)" -#: django_celery_beat/models.py:76 +#: django_celery_beat/models.py:54 +msgid "Hour (integer from 0-23)" +msgstr "Hora (entero de 0-23)" + +#: django_celery_beat/models.py:56 +msgid "Day of the week (0-6, 0 is Sunday, or 'mon', 'tue', etc.)" +msgstr "Día de la semana (0-6, 0 es Domingo, o 'mon', 'tue', etc.)" + +#: django_celery_beat/models.py:59 +msgid "Day of the month (1-31)" +msgstr "Día del mes (1-31)" + +#: django_celery_beat/models.py:61 +msgid "Month of the year (1-12)" +msgstr "Mes del año (1-12)" + +#: django_celery_beat/models.py:63 +msgid "Timezone" +msgstr "Zona horaria" + +#: django_celery_beat/models.py:92 +msgid "The human-readable timezone name that this schedule will follow (e.g. 'Europe/Berlin')" +msgstr "El nombre legible de la zona horaria que seguirá este horario (ej. 'Europe/Berlin')" + +#: django_celery_beat/models.py:116 +msgid "crontab" +msgstr "crontab" + +#: django_celery_beat/models.py:117 +msgid "crontabs" +msgstr "crontabs" + +#: django_celery_beat/models.py:137 +msgid "Name" +msgstr "Nombre" + +#: django_celery_beat/models.py:138 +msgid "Event" +msgstr "Evento" + +#: django_celery_beat/models.py:139 msgid "Latitude" msgstr "Latitud" -#: django_celery_beat/models.py:77 -msgid "Run the task when the event happens at this latitude" -msgstr "Ejecutar la tarea cuando el evento ocurra en esta latitud" - -#: django_celery_beat/models.py:83 +#: django_celery_beat/models.py:141 msgid "Longitude" msgstr "Longitud" -#: django_celery_beat/models.py:84 -msgid "Run the task when the event happens at this longitude" -msgstr "Ejecutar la tarea cuando el evento ocurra en esta longitud" - -#: django_celery_beat/models.py:91 +#: django_celery_beat/models.py:171 msgid "solar event" msgstr "evento solar" -#: django_celery_beat/models.py:92 +#: django_celery_beat/models.py:172 msgid "solar events" msgstr "eventos solares" -#: django_celery_beat/models.py:132 -msgid "Number of Periods" -msgstr "Número de Períodos" +#: django_celery_beat/models.py:184 +msgid "Clocked Time" +msgstr "Hora Programada" -#: django_celery_beat/models.py:134 -msgid "Number of interval periods to wait before running the task again" -msgstr "" -"Número de períodos de intervalo a esperar antes de ejecutar la tarea " -"nuevamente" +#: django_celery_beat/models.py:191 +msgid "clocked schedule" +msgstr "horario programado" -#: django_celery_beat/models.py:141 -msgid "Interval Period" -msgstr "Período de Intervalo" +#: django_celery_beat/models.py:192 +msgid "clocked schedules" +msgstr "horarios programados" -#: django_celery_beat/models.py:142 -msgid "The type of period between task runs (Example: days)" -msgstr "El tipo de período entre ejecuciones de la tarea (Ejemplo: días)" +#: django_celery_beat/models.py:290 +msgid "seconds" +msgstr "segundos" -#: django_celery_beat/models.py:148 -msgid "interval" -msgstr "intervalo" +#: django_celery_beat/models.py:295 +msgid "positional arguments" +msgstr "argumentos posicionales" -#: django_celery_beat/models.py:149 -msgid "intervals" -msgstr "intervalos" +#: django_celery_beat/models.py:297 +msgid "JSON encoded positional arguments (Example: [\"arg1\", \"arg2\"])" +msgstr "Argumentos posicionales codificados en JSON (Ejemplo: [\"arg1\", \"arg2\"])" -#: django_celery_beat/models.py:175 -msgid "every {}" -msgstr "cada {}" +#: django_celery_beat/models.py:302 +msgid "keyword arguments" +msgstr "argumentos de palabras clave" -#: django_celery_beat/models.py:180 -msgid "every {} {}" -msgstr "cada {} {}" +#: django_celery_beat/models.py:304 +msgid "JSON encoded keyword arguments (Example: {\"argument\": \"value\"})" +msgstr "Argumentos de palabras clave codificados en JSON (Ejemplo: {\"argument\": \"value\"})" -#: django_celery_beat/models.py:191 -msgid "Clock Time" -msgstr "Hora del Reloj" +#: django_celery_beat/models.py:309 +msgid "queue" +msgstr "cola" -#: django_celery_beat/models.py:192 -msgid "Run the task at clocked time" -msgstr "Ejecutar la tarea a la hora programada" +#: django_celery_beat/models.py:313 +msgid "exchange" +msgstr "intercambio" -#: django_celery_beat/models.py:198 django_celery_beat/models.py:199 -msgid "clocked" -msgstr "programado" +#: django_celery_beat/models.py:317 +msgid "routing key" +msgstr "clave de enrutamiento" -#: django_celery_beat/models.py:239 -msgid "Minute(s)" -msgstr "Minuto(s)" +#: django_celery_beat/models.py:321 +msgid "headers" +msgstr "encabezados" -#: django_celery_beat/models.py:240 -msgid "Cron Minutes to Run. Use \"*\" for \"all\". (Example: \"0,30\")" -msgstr "" -"Minutos de Cron para Ejecutar. Usa \"*\" para \"todos\". (Ejemplo: \"0,30\")" +#: django_celery_beat/models.py:323 +msgid "JSON encoded message headers for the AMQP message." +msgstr "Encabezados de mensaje codificados en JSON para el mensaje AMQP." -#: django_celery_beat/models.py:246 -msgid "Hour(s)" -msgstr "Hora(s)" +#: django_celery_beat/models.py:327 +msgid "priority" +msgstr "prioridad" -#: django_celery_beat/models.py:247 -msgid "Cron Hours to Run. Use \"*\" for \"all\". (Example: \"8,20\")" -msgstr "" -"Horas de Cron para Ejecutar. Usa \"*\" para \"todas\". (Ejemplo: \"8,20\")" +#: django_celery_beat/models.py:329 +msgid "Priority Number between 0 and 255. Supported by: RabbitMQ." +msgstr "Número de prioridad entre 0 y 255. Compatible con: RabbitMQ." -#: django_celery_beat/models.py:253 -msgid "Day(s) Of The Week" -msgstr "Día(s) de la Semana" +#: django_celery_beat/models.py:336 +msgid "expires" +msgstr "expira" -#: django_celery_beat/models.py:255 -msgid "Cron Days Of The Week to Run. Use \"*\" for \"all\". (Example: \"0,5\")" -msgstr "" -"Días de la Semana de Cron para Ejecutar. Usa \"*\" para \"todos\". (Ejemplo: " -"\"0,5\")" +#: django_celery_beat/models.py:338 +msgid "Datetime after which the schedule will no longer trigger the task to run" +msgstr "Fecha y hora después de la cual el horario ya no activará la ejecución de la tarea" -#: django_celery_beat/models.py:262 -msgid "Day(s) Of The Month" -msgstr "Día(s) del Mes" +#: django_celery_beat/models.py:343 +msgid "expire seconds" +msgstr "segundos de expiración" -#: django_celery_beat/models.py:264 -msgid "" -"Cron Days Of The Month to Run. Use \"*\" for \"all\". (Example: \"1,15\")" -msgstr "" -"Días del Mes de Cron para Ejecutar. Usa \"*\" para \"todos\". (Ejemplo: " -"\"1,15\")" +#: django_celery_beat/models.py:345 +msgid "Timedelta with seconds which the schedule will no longer trigger the task to run" +msgstr "Timedelta en segundos después del cual el horario ya no activará la ejecución de la tarea" -#: django_celery_beat/models.py:271 -msgid "Month(s) Of The Year" -msgstr "Mes(es) del Año" +#: django_celery_beat/models.py:350 +msgid "one-off task" +msgstr "tarea única" -#: django_celery_beat/models.py:273 -msgid "" -"Cron Months Of The Year to Run. Use \"*\" for \"all\". (Example: \"0,6\")" -msgstr "" -"Meses del Año de Cron para Ejecutar. Usa \"*\" para \"todos\". (Ejemplo: " -"\"0,6\")" +#: django_celery_beat/models.py:352 +msgid "If True, the schedule will only run the task a single time" +msgstr "Si es True, el horario solo ejecutará la tarea una vez" -#: django_celery_beat/models.py:280 -msgid "Cron Timezone" -msgstr "Zona Horaria de Cron" +#: django_celery_beat/models.py:356 +msgid "start datetime" +msgstr "fecha y hora de inicio" -#: django_celery_beat/models.py:281 -msgid "Timezone to Run the Cron Schedule on. Default is UTC." -msgstr "Zona horaria para ejecutar la programación Cron. Por defecto es UTC." +#: django_celery_beat/models.py:358 +msgid "Datetime when the schedule should begin triggering the task to run" +msgstr "Fecha y hora en que el horario debe comenzar a activar la ejecución de la tarea" -#: django_celery_beat/models.py:287 -msgid "crontab" -msgstr "crontab" +#: django_celery_beat/models.py:363 +msgid "enabled" +msgstr "habilitado" -#: django_celery_beat/models.py:288 -msgid "crontabs" -msgstr "crontabs" +#: django_celery_beat/models.py:365 +msgid "Set to False to disable the schedule" +msgstr "Establecer en False para deshabilitar el horario" -#: django_celery_beat/models.py:385 -msgid "Name" -msgstr "Nombre" +#: django_celery_beat/models.py:369 +msgid "last run at" +msgstr "última ejecución en" -#: django_celery_beat/models.py:386 -msgid "Short Description For This Task" -msgstr "Descripción Corta para esta Tarea" +#: django_celery_beat/models.py:371 +msgid "Datetime that the schedule last triggered the task to run. Reset to None if enabled is set to False." +msgstr "Fecha y hora en que el horario activó por última vez la ejecución de la tarea. Se restablece a None si enabled se establece en False." -#: django_celery_beat/models.py:392 -msgid "" -"The Name of the Celery Task that Should be Run. (Example: \"proj.tasks." -"import_contacts\")" -msgstr "" -"El Nombre de la Tarea Celery que Debe Ejecutarse. (Ejemplo: \"proj.tasks." -"import_contacts\")" +#: django_celery_beat/models.py:376 +msgid "total run count" +msgstr "conteo total de ejecuciones" -#: django_celery_beat/models.py:404 -msgid "Interval Schedule" -msgstr "Programación por Intervalos" +#: django_celery_beat/models.py:378 +msgid "Running count of how many times the schedule has triggered the task" +msgstr "Conteo de cuántas veces el horario ha activado la tarea" -#: django_celery_beat/models.py:406 -msgid "" -"Interval Schedule to run the task on. Set only one schedule type, leave the " -"others null." -msgstr "" -"Programación por Intervalos para ejecutar la tarea. Establece solo un tipo " -"de programación, deja los otros nulos." +#: django_celery_beat/models.py:382 +msgid "datetime changed" +msgstr "fecha y hora modificada" -#: django_celery_beat/models.py:415 -msgid "Crontab Schedule" -msgstr "Programación Crontab" +#: django_celery_beat/models.py:384 +msgid "Datetime that this PeriodicTask was last modified" +msgstr "Fecha y hora en que esta PeriodicTask fue modificada por última vez" -#: django_celery_beat/models.py:417 -msgid "" -"Crontab Schedule to run the task on. Set only one schedule type, leave the " -"others null." -msgstr "" -"Programación Crontab para ejecutar la tarea. Establece solo un tipo de " -"programación, deja los otros nulos." +#: django_celery_beat/models.py:388 +msgid "description" +msgstr "descripción" -#: django_celery_beat/models.py:426 -msgid "Solar Schedule" -msgstr "Programación Solar" +#: django_celery_beat/models.py:390 +msgid "Detailed description about the details of this Periodic Task" +msgstr "Descripción detallada sobre los detalles de esta Tarea Periódica" -#: django_celery_beat/models.py:428 -msgid "" -"Solar Schedule to run the task on. Set only one schedule type, leave the " -"others null." -msgstr "" -"Programación Solar para ejecutar la tarea. Establece solo un tipo de " -"programación, deja los otros nulos." +#: django_celery_beat/models.py:638 +msgid "Only one schedule can be selected: Interval, Crontab, Solar, or Clocked" +msgstr "Solo se puede seleccionar un horario: Intervalo, Crontab, Solar o Programado" -#: django_celery_beat/models.py:437 -msgid "Clocked Schedule" -msgstr "Programación por Hora" +#: django_celery_beat/models.py:642 +msgid "One of interval, crontab, solar, or clocked must be set." +msgstr "Debe establecerse uno de: intervalo, crontab, solar o programado." -#: django_celery_beat/models.py:439 -msgid "" -"Clocked Schedule to run the task on. Set only one schedule type, leave the " -"others null." -msgstr "" -"Programación por Hora para ejecutar la tarea. Establece solo un tipo de " -"programación, deja los otros nulos." +#: django_celery_beat/models.py:668 +msgid "periodic task" +msgstr "tarea periódica" -#: django_celery_beat/models.py:447 -msgid "Positional Arguments" -msgstr "Argumentos Posicionales" +#: django_celery_beat/models.py:669 +msgid "periodic tasks" +msgstr "tareas periódicas" -#: django_celery_beat/models.py:448 -msgid "JSON encoded positional arguments (Example: [\"arg1\", \"arg2\"])" -msgstr "" -"Argumentos posicionales codificados en JSON (Ejemplo: [\"arg1\", \"arg2\"])" +#: django_celery_beat/wagtail_hooks.py:217 +msgid "enabled,disabled" +msgstr "habilitada,deshabilitada" -#: django_celery_beat/models.py:453 -msgid "Keyword Arguments" -msgstr "Argumentos con Palabra Clave" +#: django_celery_beat/wagtail_hooks.py:224 +msgid "Periodic tasks" +msgstr "Tareas periódicas" -#: django_celery_beat/models.py:455 -msgid "JSON encoded keyword arguments (Example: {\"argument\": \"value\"})" -msgstr "" -"Argumentos con palabra clave codificados en JSON (Ejemplo: {\"argument\": " -"\"value\"})" +#: journal/models.py:27 +msgid "Site ID" +msgstr "ID del Sitio" -#: django_celery_beat/models.py:464 -msgid "Queue Override" -msgstr "Anulación de Cola" +#: journal/models.py:29 +msgid "Short title" +msgstr "Título corto" -#: django_celery_beat/models.py:466 -msgid "Queue defined in CELERY_TASK_QUEUES. Leave None for default queuing." -msgstr "Cola definida en CELERY_TASK_QUEUES. Deja None para cola por defecto." +#: journal/models.py:31 +msgid "Journal ISSN" +msgstr "ISSN de la Revista" -#: django_celery_beat/models.py:478 -msgid "Exchange" -msgstr "Exchange" +#: journal/models.py:33 +msgid "Online Journal ISSN" +msgstr "ISSN de la Revista en Línea" -#: django_celery_beat/models.py:479 -msgid "Override Exchange for low-level AMQP routing" -msgstr "Anular Exchange para enrutamiento AMQP de bajo nivel" +#: journal/models.py:36 +msgid "ISSN SciELO" +msgstr "ISSN SciELO" -#: django_celery_beat/models.py:486 -msgid "Routing Key" -msgstr "Clave de Enrutamiento" +#: journal/models.py:38 +msgid "ISSN SciELO Legacy" +msgstr "ISSN SciELO Legacy" -#: django_celery_beat/models.py:487 -msgid "Override Routing Key for low-level AMQP routing" -msgstr "Anular Clave de Enrutamiento para enrutamiento AMQP de bajo nivel" +#: journal/models.py:41 +msgid "Subject descriptors" +msgstr "Descriptores de tema" -#: django_celery_beat/models.py:492 -msgid "AMQP Message Headers" -msgstr "Cabeceras de Mensaje AMQP" +#: journal/models.py:46 +msgid "Purpose" +msgstr "Propósito" -#: django_celery_beat/models.py:493 -msgid "JSON encoded message headers for the AMQP message." -msgstr "Cabeceras de mensaje codificadas en JSON para el mensaje AMQP." +#: journal/models.py:49 +msgid "Sponsorship" +msgstr "Patrocinio" -#: django_celery_beat/models.py:501 -msgid "Priority" -msgstr "Prioridad" +#: journal/models.py:52 +msgid "Mission" +msgstr "Misión" -#: django_celery_beat/models.py:503 -msgid "" -"Priority Number between 0 and 255. Supported by: RabbitMQ, Redis (priority " -"reversed, 0 is highest)." -msgstr "" -"Número de Prioridad entre 0 y 255. Soportado por: RabbitMQ, Redis (prioridad " -"invertida, 0 es la más alta)." +#: journal/models.py:55 +msgid "Index at" +msgstr "Indexado en" -#: django_celery_beat/models.py:510 -msgid "Expires Datetime" -msgstr "Fecha y Hora de Expiración" +#: journal/models.py:58 +msgid "Availability" +msgstr "Disponibilidad" -#: django_celery_beat/models.py:512 -msgid "" -"Datetime after which the schedule will no longer trigger the task to run" -msgstr "" -"Fecha y hora después de la cual la programación ya no activará la ejecución " -"de la tarea" +#: journal/models.py:61 +msgid "Summary form" +msgstr "Forma de resumen" -#: django_celery_beat/models.py:519 -msgid "Expires timedelta with seconds" -msgstr "Expira timedelta con segundos" +#: journal/models.py:64 +msgid "Standard" +msgstr "Estándar" -#: django_celery_beat/models.py:521 -msgid "" -"Timedelta with seconds which the schedule will no longer trigger the task to " -"run" -msgstr "" -"Timedelta con segundos después del cual la programación ya no activará la " -"ejecución de la tarea" +#: journal/models.py:67 +msgid "Alphabet title" +msgstr "Título alfabético" -#: django_celery_beat/models.py:527 -msgid "One-off Task" -msgstr "Tarea Única" +#: journal/models.py:69 +msgid "Print title" +msgstr "Título impreso" -#: django_celery_beat/models.py:528 -msgid "If True, the schedule will only run the task a single time" -msgstr "Si es Verdadero, la programación ejecutará la tarea solo una vez" +#: journal/models.py:72 +msgid "Short title (slug)" +msgstr "Título corto (slug)" -#: django_celery_beat/models.py:533 -msgid "Start Datetime" -msgstr "Fecha y Hora de Inicio" +#: journal/models.py:76 +#: markup_doc/models.py:40 +msgid "Title" +msgstr "Título" -#: django_celery_beat/models.py:535 -msgid "Datetime when the schedule should begin triggering the task to run" -msgstr "" -"Fecha y hora cuando la programación debe comenzar a activar la ejecución de " -"la tarea" +#: journal/models.py:81 +msgid "Subtitle" +msgstr "Subtítulo" -#: django_celery_beat/models.py:540 -msgid "Enabled" -msgstr "Habilitado" +#: journal/models.py:86 +msgid "Next title" +msgstr "Título siguiente" -#: django_celery_beat/models.py:541 -msgid "Set to False to disable the schedule" -msgstr "Establecer en Falso para deshabilitar la programación" +#: journal/models.py:90 +msgid "Previous title" +msgstr "Título anterior" -#: django_celery_beat/models.py:549 -msgid "Last Run Datetime" -msgstr "Fecha y Hora de Última Ejecución" +#: journal/models.py:94 +msgid "Control number" +msgstr "Número de control" -#: django_celery_beat/models.py:551 -msgid "" -"Datetime that the schedule last triggered the task to run. Reset to None if " -"enabled is set to False." -msgstr "" -"Fecha y hora en que la programación activó por última vez la ejecución de la " -"tarea. Se restablece a None si habilitado se establece en Falso." +#: journal/models.py:97 +msgid "Publisher name" +msgstr "Nombre del editor" -#: django_celery_beat/models.py:558 -msgid "Total Run Count" -msgstr "Conteo Total de Ejecuciones" +#: journal/models.py:99 +msgid "Publisher country" +msgstr "País del editor" -#: django_celery_beat/models.py:560 -msgid "Running count of how many times the schedule has triggered the task" -msgstr "Conteo continuo de cuántas veces la programación ha activado la tarea" +#: journal/models.py:102 +msgid "Publisher state" +msgstr "Estado del editor" -#: django_celery_beat/models.py:565 -msgid "Last Modified" -msgstr "Última Modificación" +#: journal/models.py:105 +msgid "Publisher city" +msgstr "Ciudad del editor" -#: django_celery_beat/models.py:566 -msgid "Datetime that this PeriodicTask was last modified" -msgstr "Fecha y hora en que esta Tarea Periódica fue modificada por última vez" +#: journal/models.py:108 +msgid "Publisher address" +msgstr "Dirección del editor" -#: django_celery_beat/models.py:570 -msgid "Description" -msgstr "Descripción" +#: journal/models.py:111 +msgid "Publication level" +msgstr "Nivel de publicación" -#: django_celery_beat/models.py:571 -msgid "Detailed description about the details of this Periodic Task" -msgstr "Descripción detallada sobre los detalles de esta Tarea Periódica" +#: journal/models.py:115 +msgid "Email" +msgstr "Correo electrónico" -#: django_celery_beat/models.py:576 -msgid "This is the configuration area for executing asynchronous tasks." -msgstr "Esta es el área de configuración de ejecución de tareas asíncronas." +#: journal/models.py:119 +msgid "URL online submission" +msgstr "URL de envío en línea" -#: django_celery_beat/models.py:597 -msgid "Content" -msgstr "Contenido" +#: journal/models.py:122 +msgid "URL home page" +msgstr "URL de página principal" -#: django_celery_beat/models.py:598 -msgid "Scheduler" -msgstr "Programador" +#: journal/models.py:146 +msgid "Journal" +msgstr "Revista" -#: django_celery_beat/models.py:608 -msgid "periodic task" -msgstr "tarea periódica" +#: journal/models.py:147 +msgid "Journals" +msgstr "Revistas" -#: django_celery_beat/models.py:609 -msgid "periodic tasks" -msgstr "tareas periódicas" +#: journal/models.py:162 +msgid "Order" +msgstr "Orden" -#: django_celery_beat/templates/admin/djcelery/change_list.html:6 -msgid "Home" -msgstr "Inicio" +#: journal/models.py:174 +msgid "Editor" +msgstr "Editor" -#: django_celery_beat/views.py:34 -#, python-brace-format -msgid "Task {0} was successfully run" -msgstr "La tarea {0} fue ejecutada exitosamente" +#: journal/models.py:175 +msgid "Editors" +msgstr "Editores" -#: django_celery_beat/wagtail_hooks.py:193 -msgid "Tasks" -msgstr "Tareas" +#: journal/wagtail_hooks.py:57 +msgid "Journal and Editor" +msgstr "Revista y Editor" + +#: location/models.py:11 +msgid "Country Name" +msgstr "Nombre del País" + +#: location/models.py:12 +msgid "ACR3" +msgstr "ACR3" + +#: location/models.py:13 +msgid "ACR2" +msgstr "ACR2" + +#: location/models.py:23 +msgid "Country" +msgstr "País" + +#: location/models.py:24 +msgid "Countries" +msgstr "Países" + +#: location/models.py:36 +msgid "State name" +msgstr "Nombre del estado" + +#: location/models.py:37 +msgid "ACR 2 (state)" +msgstr "ACR 2 (estado)" + +#: location/models.py:48 +msgid "State" +msgstr "Estado" + +#: location/models.py:49 +msgid "States" +msgstr "Estados" + +#: location/models.py:61 +msgid "City name" +msgstr "Nombre de la ciudad" + +#: location/models.py:75 +msgid "City" +msgstr "Ciudad" + +#: location/models.py:76 +msgid "Cities" +msgstr "Ciudades" + +#: location/wagtail_hooks.py:55 +msgid "Location" +msgstr "Ubicación" + +#: markup_doc/choices.py:11 +msgid "Document without content" +msgstr "Documento sin contenido" + +#: markup_doc/choices.py:12 +msgid "Structured document without references" +msgstr "Documento estructurado sin referencias" + +#: markup_doc/choices.py:13 +msgid "Structured document" +msgstr "Documento estructurado" + +#: markup_doc/choices.py:14 +msgid "Structured document and references" +msgstr "Documento estructurado y referencias" + +#: markup_doc/models.py:33 +msgid "DOI" +msgstr "DOI" + +#: markup_doc/models.py:56 +msgid "Rich Title" +msgstr "Título Enriquecido" + +#: markup_doc/models.py:58 +msgid "Clean Title" +msgstr "Título Limpio" + +#: markup_doc/models.py:97 +msgid "Document" +msgstr "Documento" + +#: markup_doc/models.py:98 +msgid "Documents" +msgstr "Documentos" + +#: markup_doc/models.py:130 +msgid "Type" +msgstr "Tipo" + +#: markup_doc/models.py:137 +msgid "Paragraph" +msgstr "Párrafo" + +#: markup_doc/models.py:138 +msgid "Paragraphs" +msgstr "Párrafos" + +#: markup_doc/models.py:218 +msgid "Section title" +msgstr "Título de sección" + +#: markup_doc/models.py:222 +msgid "Section code" +msgstr "Código de sección" + +#: markup_doc/models.py:245 +msgid "Section" +msgstr "Sección" + +#: markup_doc/models.py:246 +msgid "Sections" +msgstr "Secciones" + +#: markup_doc/models.py:279 +msgid "Figure" +msgstr "Figura" + +#: markup_doc/models.py:280 +msgid "Figures" +msgstr "Figuras" + +#: markup_doc/models.py:306 +msgid "Table" +msgstr "Tabla" + +#: markup_doc/models.py:307 +msgid "Tables" +msgstr "Tablas" + +#: markup_doc/models.py:322 +msgid "Supplementary Material" +msgstr "Material Suplementario" + +#: markup_doc/models.py:323 +msgid "Supplementary Materials" +msgstr "Materiales Suplementarios" + +#: markup_doc/models.py:336 +msgid "Document ID" +msgstr "ID de Documento" + +#: markup_doc/models.py:340 +msgid "Document ID type" +msgstr "Tipo de ID de documento" + +#: markup_doc/models.py:349 +msgid "DOCX ID" +msgstr "ID de DOCX" + +#: markup_doc/models.py:350 +msgid "DOCX IDs" +msgstr "IDs de DOCX" + +#: markup_doc/models.py:360 +msgid "DOCX Subtitle" +msgstr "Subtítulo de DOCX" + +#: markup_doc/models.py:377 +msgid "DOCX Body" +msgstr "Cuerpo de DOCX" + +#: markup_doc/models.py:378 +msgid "DOCX Bodies" +msgstr "Cuerpos de DOCX" + +#: markup_doc/models.py:386 +msgid "DOCX Section" +msgstr "Sección de DOCX" + +#: markup_doc/models.py:387 +msgid "DOCX Sections" +msgstr "Secciones de DOCX" + +#: markup_doc/models.py:400 +msgid "Legend" +msgstr "Leyenda" + +#: markup_doc/models.py:405 +msgid "Caption" +msgstr "Pie de imagen" + +#: markup_doc/models.py:409 +msgid "Source" +msgstr "Fuente" + +#: markup_doc/models.py:410 +msgid "Target" +msgstr "Destino" + +#: markup_doc/models.py:413 +msgid "Content type" +msgstr "Tipo de contenido" + +#: markup_doc/models.py:414 +msgid "MIME Type" +msgstr "Tipo MIME" + +#: markup_doc/models.py:428 +msgid "DOCX Figure" +msgstr "Figura de DOCX" + +#: markup_doc/models.py:429 +msgid "DOCX Figures" +msgstr "Figuras de DOCX" + +#: markup_doc/models.py:442 +msgid "Columns" +msgstr "Columnas" + +#: markup_doc/models.py:443 +msgid "Rows" +msgstr "Filas" + +#: markup_doc/models.py:451 +msgid "DOCX Table" +msgstr "Tabla de DOCX" + +#: markup_doc/models.py:452 +msgid "DOCX Tables" +msgstr "Tablas de DOCX" + +#: markup_doc/wagtail_hooks.py:91 +msgid "MarkupDoc" +msgstr "MarkupDoc" + +#: model_ai/models.py:17 +msgid "Model Provider" +msgstr "Proveedor del Modelo" + +#: model_ai/models.py:22 +msgid "Model Name" +msgstr "Nombre del Modelo" + +#: model_ai/models.py:27 +msgid "Model Type" +msgstr "Tipo de Modelo" + +#: model_ai/models.py:32 +msgid "Context length" +msgstr "Longitud del contexto" + +#: model_ai/models.py:34 +msgid "Hugging Face model name" +msgstr "Nombre del modelo de Hugging Face" + +#: model_ai/models.py:35 +msgid "Model file" +msgstr "Archivo del modelo" + +#: model_ai/models.py:36 +msgid "Hugging Face token" +msgstr "Token de Hugging Face" + +#: model_ai/models.py:38 +msgid "Local model status" +msgstr "Estado del modelo local" + +#: model_ai/models.py:44 +msgid "URL Markapi" +msgstr "URL de Markapi" + +#: model_ai/models.py:49 +msgid "API KEY Gemini" +msgstr "Clave API de Gemini" + +#: model_ai/models.py:67 model_ai/models.py:71 +msgid "Only one instance of LlamaModel is allowed." +msgstr "Solo se permite una instancia de LlamaModel." + +#: model_ai/wagtail_hooks.py:28 model_ai/wagtail_hooks.py:63 +msgid "Model name is required." +msgstr "El nombre del modelo es obligatorio." + +#: model_ai/wagtail_hooks.py:32 model_ai/wagtail_hooks.py:67 +msgid "Model file is required." +msgstr "El archivo del modelo es obligatorio." + +#: model_ai/wagtail_hooks.py:36 model_ai/wagtail_hooks.py:71 +msgid "Hugging Face token is required." +msgstr "El token de Hugging Face es obligatorio." + +#: model_ai/wagtail_hooks.py:42 +msgid "Model created and download started." +msgstr "Modelo creado y descarga iniciada." + +#: model_ai/wagtail_hooks.py:46 model_ai/wagtail_hooks.py:82 +msgid "API AI URL is required." +msgstr "La URL de API AI es obligatoria." + +#: model_ai/wagtail_hooks.py:50 +msgid "Model created, use API AI." +msgstr "Modelo creado, usar API AI." + +#: model_ai/wagtail_hooks.py:77 +msgid "Model updated and download started." +msgstr "Modelo actualizado y descarga iniciada." + +#: model_ai/wagtail_hooks.py:79 +msgid "Model updated and already downloaded." +msgstr "Modelo actualizado y ya descargado." + +#: model_ai/wagtail_hooks.py:86 +msgid "Model updated, use API AI." +msgstr "Modelo actualizado, usar API AI." + +#: model_ai/wagtail_hooks.py:95 +msgid "AI LLM Model" +msgstr "Modelo de LLM de IA" #: reference/models.py:15 +msgid "No reference" +msgstr "Sin referencia" + +#: reference/models.py:16 +msgid "Creating reference" +msgstr "Creando referencia" + +#: reference/models.py:17 +msgid "Reference ready" +msgstr "Referencia lista" + +#: reference/models.py:22 msgid "Mixed Citation" msgstr "Cita mixta" -#: reference/models.py:30 -#, fuzzy -#| msgid "Reference" -msgid "Referência" -msgstr "Referencia" +#: reference/models.py:25 +msgid "Reference status" +msgstr "Estado de referencia" -#: reference/models.py:31 -#, fuzzy -#| msgid "Reference" -msgid "Referências" -msgstr "Referencia" +#: reference/models.py:33 +msgid "Cited Elements" +msgstr "Elementos Citados" -#: reference/models.py:38 +#: reference/models.py:46 msgid "Marked" msgstr "Marcado" -#: reference/models.py:39 +#: reference/models.py:47 msgid "Marked XML" msgstr "XML Marcado" -#: reference/models.py:48 +#: reference/models.py:56 msgid "Rating from 1 to 10" msgstr "Calificación del 1 al 10" -#: reference/wagtail_hooks.py:45 +#: reference/wagtail_hooks.py:41 msgid "Reference" msgstr "Referencia" @@ -842,10 +1301,6 @@ msgstr "Archivo DOCX" msgid "Intermediate DOCX file generated during PDF creation" msgstr "Archivo DOCX intermedio generado durante la creación del PDF" -#: xml_manager/models.py:58 xml_manager/models.py:90 -msgid "Language" -msgstr "Idioma" - #: xml_manager/models.py:59 xml_manager/models.py:91 msgid "Language code or name" msgstr "Código o nombre del idioma" @@ -881,21 +1336,37 @@ msgid "Exceptions file" msgstr "Archivo de excepciones" #: xml_manager/wagtail_hooks.py:118 -msgid "XML Manager" -msgstr "Gestor XML" +msgid "XML Processor" +msgstr "Procesador XML" + +#: menu items +msgid "DOCX Files" +msgstr "Archivos DOCX" + +#: menu items +msgid "XML Files" +msgstr "Archivos XML" + +#: menu items +msgid "Tarefas" +msgstr "Tareas" + +#: menu items +msgid "Carregar DOCX" +msgstr "Cargar DOCX" -#, fuzzy -#~| msgid "Marked" -#~ msgid "marked" -#~ msgstr "Marcado" +#: menu items +msgid "XML marcado" +msgstr "XML marcado" -#, fuzzy -#~| msgid "Marked" -#~ msgid "marked_xml" -#~ msgstr "Marcado" +#: markup_doc/wagtail_hooks.py +msgid "You must first select a collection." +msgstr "Debes seleccionar primero una colección." -#~ msgid "score" -#~ msgstr "puntaje" +#: markup_doc/wagtail_hooks.py +msgid "Wait a moment, there are no Journal elements yet." +msgstr "Espera un momento, aún no existen elementos en Journal." -#~ msgid "Ações" -#~ msgstr "Acciones" +#: markup_doc/wagtail_hooks.py +msgid "Synchronizing journals from the API, please wait a moment..." +msgstr "Sincronizando revistas desde la API, espera unos momentos..." \ No newline at end of file diff --git a/locale/pt_BR/LC_MESSAGES/django.po b/locale/pt_BR/LC_MESSAGES/django.po old mode 100644 new mode 100755 index 1f0dd3f..8e4bf5a --- a/locale/pt_BR/LC_MESSAGES/django.po +++ b/locale/pt_BR/LC_MESSAGES/django.po @@ -3,21 +3,116 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-04 14:18+0000\n" -"PO-Revision-Date: 2025-09-03 HO:MI+ZONE\n" +"POT-Creation-Date: 2025-10-24 13:56+0000\n" +"PO-Revision-Date: 2025-10-27 HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" -"Language-Team: Portuguese (Brazil) \n" +"Language-Team: Portuguese \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +#: core/choices.py:192 +msgid "Editor-Chefe" +msgstr "Editor-Chefe" + +#: core/choices.py:193 +msgid "Editor(es) Executivo" +msgstr "Editor(es) Executivo" + +#: core/choices.py:194 +msgid "Editor(es) Associados ou de Seção" +msgstr "Editor(es) Associados ou de Seção" + +#: core/choices.py:195 +msgid "Equipe Técnica" +msgstr "Equipe Técnica" + +#: core/choices.py:199 +msgid "January" +msgstr "Janeiro" + +#: core/choices.py:200 +msgid "February" +msgstr "Fevereiro" + +#: core/choices.py:201 +msgid "March" +msgstr "Março" + +#: core/choices.py:202 +msgid "April" +msgstr "Abril" + +#: core/choices.py:203 +msgid "May" +msgstr "Maio" + +#: core/choices.py:204 +msgid "June" +msgstr "Junho" + +#: core/choices.py:205 +msgid "July" +msgstr "Julho" + +#: core/choices.py:206 +msgid "August" +msgstr "Agosto" + +#: core/choices.py:207 +msgid "September" +msgstr "Setembro" + +#: core/choices.py:208 +msgid "October" +msgstr "Outubro" + +#: core/choices.py:209 +msgid "November" +msgstr "Novembro" + +#: core/choices.py:210 +msgid "December" +msgstr "Dezembro" + +#: core/choices.py:216 +msgid "by" +msgstr "por" + +#: core/choices.py:217 +msgid "by-sa" +msgstr "by-sa" + +#: core/choices.py:218 +msgid "by-nc" +msgstr "by-nc" + +#: core/choices.py:219 +msgid "by-nc-sa" +msgstr "by-nc-sa" + +#: core/choices.py:220 +msgid "by-nd" +msgstr "by-nd" + +#: core/choices.py:221 +msgid "by-nc-nd" +msgstr "by-nc-nd" + +#: core/choices.py:225 +msgid "Male" +msgstr "Masculino" + +#: core/choices.py:226 +msgid "Female" +msgstr "Feminino" + #: core/home/templates/home/welcome_page.html:6 msgid "Visit the Wagtail website" msgstr "Visite o site do Wagtail" @@ -30,16 +125,6 @@ msgstr "Ver as notas de lançamento" msgid "Welcome to your new Wagtail site!" msgstr "Bem-vindo ao seu novo site Wagtail!" -#: core/home/templates/home/welcome_page.html:28 -msgid "" -"Please feel free to join our community on Slack, or get started with one of the links " -"below." -msgstr "" -"Sinta-se à vontade para juntar-se à nossa comunidade no Slack, ou comece com um dos " -"links abaixo." - #: core/home/templates/home/welcome_page.html:35 msgid "Wagtail Documentation" msgstr "Documentação do Wagtail" @@ -58,28 +143,90 @@ msgstr "Construa seu primeiro site Wagtail" #: core/home/templates/home/welcome_page.html:49 msgid "Admin Interface" -msgstr "Interface Administrativa" +msgstr "Interface de Administração" #: core/home/templates/home/welcome_page.html:50 msgid "Create your superuser first!" msgstr "Crie seu superusuário primeiro!" -#: core/models.py:19 tracker/models.py:76 +#: core/models.py:28 tracker/models.py:76 msgid "Creation date" msgstr "Data de criação" -#: core/models.py:22 +#: core/models.py:31 msgid "Last update date" msgstr "Data da última atualização" -#: core/models.py:27 +#: core/models.py:36 msgid "Creator" msgstr "Criador" -#: core/models.py:37 +#: core/models.py:46 msgid "Updater" msgstr "Atualizador" +#: core/models.py:66 +msgid "Code" +msgstr "Código" + +#: core/models.py:68 +msgid "Sex" +msgstr "Sexo" + +#: core/models.py:133 +msgid "Language Name" +msgstr "Nome do Idioma" + +#: core/models.py:134 +msgid "Language code 2" +msgstr "Código do idioma 2" + +#: core/models.py:142 core/models.py:190 core/models.py:207 core/models.py:251 +#: core/models.py:523 markup_doc/models.py:357 xml_manager/models.py:58 +#: xml_manager/models.py:90 +msgid "Language" +msgstr "Idioma" + +#: core/models.py:143 +msgid "Languages" +msgstr "Idiomas" + +#: core/models.py:186 markup_doc/models.py:129 +msgid "Text" +msgstr "Texto" + +#: core/models.py:202 core/models.py:247 +msgid "Rich Text" +msgstr "Texto Rico" + +#: core/models.py:203 +msgid "Plain Text" +msgstr "Texto Simples" + +#: core/models.py:268 +msgid "Year" +msgstr "Ano" + +#: core/models.py:269 +msgid "Month" +msgstr "Mês" + +#: core/models.py:270 django_celery_beat/choices.py:18 +msgid "Day" +msgstr "Dia" + +#: core/models.py:301 core/models.py:382 +msgid "License" +msgstr "Licença" + +#: core/models.py:302 core/models.py:383 +msgid "Licenses" +msgstr "Licenças" + +#: core/models.py:515 +msgid "File" +msgstr "Arquivo" + #: core_settings/models.py:18 core_settings/models.py:19 msgid "Site configuration" msgstr "Configuração do site" @@ -90,7 +237,7 @@ msgstr "Configurações do site" #: core_settings/models.py:67 msgid "Admin settings" -msgstr "Configurações administrativas" +msgstr "Configurações de administração" #: django_celery_beat/admin.py:69 django_celery_beat/forms.py:55 msgid "Task (registered)" @@ -107,7 +254,7 @@ msgstr "É necessário o nome da tarefa" #: django_celery_beat/admin.py:96 django_celery_beat/forms.py:81 #: django_celery_beat/models.py:648 msgid "Only one can be set, in expires and expire_seconds" -msgstr "Apenas um pode ser definido, entre expires e expire_seconds" +msgstr "Somente um pode ser definido, entre expires e expire_seconds" #: django_celery_beat/admin.py:106 django_celery_beat/forms.py:91 #, python-format @@ -179,10 +326,6 @@ msgstr "Segundos" msgid "Microseconds" msgstr "Microssegundos" -#: django_celery_beat/choices.py:18 -msgid "Day" -msgstr "Dia" - #: django_celery_beat/choices.py:19 msgid "Hour" msgstr "Hora" @@ -201,27 +344,27 @@ msgstr "Microssegundo" #: django_celery_beat/choices.py:26 msgid "Astronomical dawn" -msgstr "Aurora astronômica" +msgstr "Alvorecer astronômico" #: django_celery_beat/choices.py:27 msgid "Civil dawn" -msgstr "Aurora civil" +msgstr "Alvorecer civil" #: django_celery_beat/choices.py:28 msgid "Nautical dawn" -msgstr "Aurora náutica" +msgstr "Alvorecer náutico" #: django_celery_beat/choices.py:29 msgid "Astronomical dusk" -msgstr "Crepúsculo astronômico" +msgstr "Anoitecer astronômico" #: django_celery_beat/choices.py:30 msgid "Civil dusk" -msgstr "Crepúsculo civil" +msgstr "Anoitecer civil" #: django_celery_beat/choices.py:31 msgid "Nautical dusk" -msgstr "Crepúsculo náutico" +msgstr "Anoitecer náutico" #: django_celery_beat/choices.py:32 msgid "Solar noon" @@ -241,7 +384,7 @@ msgstr "Evento Solar" #: django_celery_beat/models.py:71 msgid "The type of solar event when the job should run" -msgstr "O tipo de evento solar quando a tarefa deve ser executada" +msgstr "O tipo de evento solar quando o trabalho deve ser executado" #: django_celery_beat/models.py:76 msgid "Latitude" @@ -249,7 +392,7 @@ msgstr "Latitude" #: django_celery_beat/models.py:77 msgid "Run the task when the event happens at this latitude" -msgstr "Executar a tarefa quando o evento acontecer nesta latitude" +msgstr "Executar a tarefa quando o evento ocorrer nesta latitude" #: django_celery_beat/models.py:83 msgid "Longitude" @@ -257,7 +400,7 @@ msgstr "Longitude" #: django_celery_beat/models.py:84 msgid "Run the task when the event happens at this longitude" -msgstr "Executar a tarefa quando o evento acontecer nesta longitude" +msgstr "Executar a tarefa quando o evento ocorrer nesta longitude" #: django_celery_beat/models.py:91 msgid "solar event" @@ -273,17 +416,15 @@ msgstr "Número de Períodos" #: django_celery_beat/models.py:134 msgid "Number of interval periods to wait before running the task again" -msgstr "" -"Número de períodos de intervalo a aguardar antes de executar a tarefa " -"novamente" +msgstr "Número de períodos de intervalo para esperar antes de executar a tarefa novamente" #: django_celery_beat/models.py:141 msgid "Interval Period" -msgstr "Período do Intervalo" +msgstr "Período de Intervalo" #: django_celery_beat/models.py:142 msgid "The type of period between task runs (Example: days)" -msgstr "O tipo de período entre execuções da tarefa (Exemplo: dias)" +msgstr "O tipo de período entre execuções de tarefas (Exemplo: dias)" #: django_celery_beat/models.py:148 msgid "interval" @@ -293,365 +434,737 @@ msgstr "intervalo" msgid "intervals" msgstr "intervalos" -#: django_celery_beat/models.py:175 -msgid "every {}" -msgstr "a cada {}" - -#: django_celery_beat/models.py:180 -msgid "every {} {}" -msgstr "a cada {} {}" - -#: django_celery_beat/models.py:191 -msgid "Clock Time" -msgstr "Horário do Relógio" - -#: django_celery_beat/models.py:192 -msgid "Run the task at clocked time" -msgstr "Executar a tarefa no horário programado" - -#: django_celery_beat/models.py:198 django_celery_beat/models.py:199 -msgid "clocked" -msgstr "programado" - -#: django_celery_beat/models.py:239 -msgid "Minute(s)" -msgstr "Minuto(s)" - -#: django_celery_beat/models.py:240 -msgid "Cron Minutes to Run. Use \"*\" for \"all\". (Example: \"0,30\")" -msgstr "" -"Minutos do Cron para Executar. Use \"*\" para \"todos\". (Exemplo: \"0,30\")" - -#: django_celery_beat/models.py:246 -msgid "Hour(s)" -msgstr "Hora(s)" - -#: django_celery_beat/models.py:247 -msgid "Cron Hours to Run. Use \"*\" for \"all\". (Example: \"8,20\")" -msgstr "" -"Horas do Cron para Executar. Use \"*\" para \"todas\". (Exemplo: \"8,20\")" - -#: django_celery_beat/models.py:253 -msgid "Day(s) Of The Week" -msgstr "Dia(s) da Semana" +#: django_celery_beat/models.py:169 +msgid "Minute (integer from 0-59)" +msgstr "Minuto (inteiro de 0-59)" -#: django_celery_beat/models.py:255 -msgid "Cron Days Of The Week to Run. Use \"*\" for \"all\". (Example: \"0,5\")" -msgstr "" -"Dias da Semana do Cron para Executar. Use \"*\" para \"todos\". (Exemplo: " -"\"0,5\")" +#: django_celery_beat/models.py:171 +msgid "Hour (integer from 0-23)" +msgstr "Hora (inteiro de 0-23)" -#: django_celery_beat/models.py:262 -msgid "Day(s) Of The Month" -msgstr "Dia(s) do Mês" +#: django_celery_beat/models.py:173 +msgid "Day of the week (0-6, 0 is Sunday, or 'mon', 'tue', etc.)" +msgstr "Dia da semana (0-6, 0 é Domingo, ou 'mon', 'tue', etc.)" -#: django_celery_beat/models.py:264 -msgid "" -"Cron Days Of The Month to Run. Use \"*\" for \"all\". (Example: \"1,15\")" -msgstr "" -"Dias do Mês do Cron para Executar. Use \"*\" para \"todos\". (Exemplo: " -"\"1,15\")" +#: django_celery_beat/models.py:176 +msgid "Day of the month (1-31)" +msgstr "Dia do mês (1-31)" -#: django_celery_beat/models.py:271 -msgid "Month(s) Of The Year" -msgstr "Mês(es) do Ano" +#: django_celery_beat/models.py:178 +msgid "Month of the year (1-12)" +msgstr "Mês do ano (1-12)" -#: django_celery_beat/models.py:273 -msgid "" -"Cron Months Of The Year to Run. Use \"*\" for \"all\". (Example: \"0,6\")" -msgstr "" -"Meses do Ano do Cron para Executar. Use \"*\" para \"todos\". (Exemplo: " -"\"0,6\")" - -#: django_celery_beat/models.py:280 -msgid "Cron Timezone" -msgstr "Fuso Horário do Cron" +#: django_celery_beat/models.py:180 +msgid "Timezone" +msgstr "Fuso horário" -#: django_celery_beat/models.py:281 -msgid "Timezone to Run the Cron Schedule on. Default is UTC." -msgstr "Fuso horário para executar o agendamento Cron. Padrão é UTC." +#: django_celery_beat/models.py:209 +msgid "The human-readable timezone name that this schedule will follow (e.g. 'Europe/Berlin')" +msgstr "O nome legível do fuso horário que este agendamento seguirá (ex. 'America/Sao_Paulo')" -#: django_celery_beat/models.py:287 +#: django_celery_beat/models.py:233 msgid "crontab" msgstr "crontab" -#: django_celery_beat/models.py:288 +#: django_celery_beat/models.py:234 msgid "crontabs" msgstr "crontabs" -#: django_celery_beat/models.py:385 +#: django_celery_beat/models.py:254 msgid "Name" msgstr "Nome" -#: django_celery_beat/models.py:386 -msgid "Short Description For This Task" -msgstr "Descrição Curta para Esta Tarefa" - -#: django_celery_beat/models.py:392 -msgid "" -"The Name of the Celery Task that Should be Run. (Example: \"proj.tasks." -"import_contacts\")" -msgstr "" -"O Nome da Tarefa Celery que Deve ser Executada. (Exemplo: \"proj.tasks." -"import_contacts\")" - -#: django_celery_beat/models.py:404 -msgid "Interval Schedule" -msgstr "Agendamento por Intervalo" - -#: django_celery_beat/models.py:406 -msgid "" -"Interval Schedule to run the task on. Set only one schedule type, leave the " -"others null." -msgstr "" -"Agendamento por Intervalo para executar a tarefa. Defina apenas um tipo de " -"agendamento, deixe os outros nulos." +#: django_celery_beat/models.py:255 +msgid "Event" +msgstr "Evento" -#: django_celery_beat/models.py:415 -msgid "Crontab Schedule" -msgstr "Agendamento Crontab" +#: django_celery_beat/models.py:301 +msgid "Clocked Time" +msgstr "Hora Programada" -#: django_celery_beat/models.py:417 -msgid "" -"Crontab Schedule to run the task on. Set only one schedule type, leave the " -"others null." -msgstr "" -"Agendamento Crontab para executar a tarefa. Defina apenas um tipo de " -"agendamento, deixe os outros nulos." +#: django_celery_beat/models.py:308 +msgid "clocked schedule" +msgstr "agendamento programado" -#: django_celery_beat/models.py:426 -msgid "Solar Schedule" -msgstr "Agendamento Solar" +#: django_celery_beat/models.py:309 +msgid "clocked schedules" +msgstr "agendamentos programados" -#: django_celery_beat/models.py:428 -msgid "" -"Solar Schedule to run the task on. Set only one schedule type, leave the " -"others null." -msgstr "" -"Agendamento Solar para executar a tarefa. Defina apenas um tipo de " -"agendamento, deixe os outros nulos." +#: django_celery_beat/models.py:407 +msgid "seconds" +msgstr "segundos" -#: django_celery_beat/models.py:437 -msgid "Clocked Schedule" -msgstr "Agendamento por Horário" +#: django_celery_beat/models.py:412 +msgid "positional arguments" +msgstr "argumentos posicionais" -#: django_celery_beat/models.py:439 -msgid "" -"Clocked Schedule to run the task on. Set only one schedule type, leave the " -"others null." -msgstr "" -"Agendamento por Horário para executar a tarefa. Defina apenas um tipo de " -"agendamento, deixe os outros nulos." - -#: django_celery_beat/models.py:447 -msgid "Positional Arguments" -msgstr "Argumentos Posicionais" - -#: django_celery_beat/models.py:448 +#: django_celery_beat/models.py:414 msgid "JSON encoded positional arguments (Example: [\"arg1\", \"arg2\"])" -msgstr "" -"Argumentos posicionais codificados em JSON (Exemplo: [\"arg1\", \"arg2\"])" +msgstr "Argumentos posicionais codificados em JSON (Exemplo: [\"arg1\", \"arg2\"])" -#: django_celery_beat/models.py:453 -msgid "Keyword Arguments" -msgstr "Argumentos Nomeados" +#: django_celery_beat/models.py:419 +msgid "keyword arguments" +msgstr "argumentos de palavras-chave" -#: django_celery_beat/models.py:455 +#: django_celery_beat/models.py:421 msgid "JSON encoded keyword arguments (Example: {\"argument\": \"value\"})" -msgstr "" -"Argumentos nomeados codificados em JSON (Exemplo: {\"argument\": \"value\"})" - -#: django_celery_beat/models.py:464 -msgid "Queue Override" -msgstr "Substituição de Fila" - -#: django_celery_beat/models.py:466 -msgid "Queue defined in CELERY_TASK_QUEUES. Leave None for default queuing." -msgstr "Fila definida em CELERY_TASK_QUEUES. Deixe None para fila padrão." - -#: django_celery_beat/models.py:478 -msgid "Exchange" -msgstr "Exchange" +msgstr "Argumentos de palavras-chave codificados em JSON (Exemplo: {\"argument\": \"value\"})" -#: django_celery_beat/models.py:479 -msgid "Override Exchange for low-level AMQP routing" -msgstr "Substituir Exchange para roteamento AMQP de baixo nível" +#: django_celery_beat/models.py:426 +msgid "queue" +msgstr "fila" -#: django_celery_beat/models.py:486 -msgid "Routing Key" -msgstr "Chave de Roteamento" +#: django_celery_beat/models.py:430 +msgid "exchange" +msgstr "exchange" -#: django_celery_beat/models.py:487 -msgid "Override Routing Key for low-level AMQP routing" -msgstr "Substituir Chave de Roteamento para roteamento AMQP de baixo nível" +#: django_celery_beat/models.py:434 +msgid "routing key" +msgstr "chave de roteamento" -#: django_celery_beat/models.py:492 -msgid "AMQP Message Headers" -msgstr "Cabeçalhos de Mensagem AMQP" +#: django_celery_beat/models.py:438 +msgid "headers" +msgstr "cabeçalhos" -#: django_celery_beat/models.py:493 +#: django_celery_beat/models.py:440 msgid "JSON encoded message headers for the AMQP message." msgstr "Cabeçalhos de mensagem codificados em JSON para a mensagem AMQP." -#: django_celery_beat/models.py:501 -msgid "Priority" -msgstr "Prioridade" +#: django_celery_beat/models.py:444 +msgid "priority" +msgstr "prioridade" -#: django_celery_beat/models.py:503 -msgid "" -"Priority Number between 0 and 255. Supported by: RabbitMQ, Redis (priority " -"reversed, 0 is highest)." -msgstr "" -"Número de Prioridade entre 0 e 255. Suportado por: RabbitMQ, Redis " -"(prioridade invertida, 0 é a mais alta)." +#: django_celery_beat/models.py:446 +msgid "Priority Number between 0 and 255. Supported by: RabbitMQ." +msgstr "Número de prioridade entre 0 e 255. Suportado por: RabbitMQ." -#: django_celery_beat/models.py:510 -msgid "Expires Datetime" -msgstr "Data e Hora de Expiração" +#: django_celery_beat/models.py:453 +msgid "expires" +msgstr "expira" -#: django_celery_beat/models.py:512 -msgid "" -"Datetime after which the schedule will no longer trigger the task to run" -msgstr "" -"Data e hora após a qual o agendamento não irá mais disparar a execução da " -"tarefa" +#: django_celery_beat/models.py:455 +msgid "Datetime after which the schedule will no longer trigger the task to run" +msgstr "Data e hora após as quais o agendamento não acionará mais a execução da tarefa" -#: django_celery_beat/models.py:519 -msgid "Expires timedelta with seconds" -msgstr "Expira timedelta com segundos" +#: django_celery_beat/models.py:460 +msgid "expire seconds" +msgstr "segundos de expiração" -#: django_celery_beat/models.py:521 -msgid "" -"Timedelta with seconds which the schedule will no longer trigger the task to " -"run" -msgstr "" -"Timedelta com segundos após o qual o agendamento não irá mais disparar a " -"execução da tarefa" +#: django_celery_beat/models.py:462 +msgid "Timedelta with seconds which the schedule will no longer trigger the task to run" +msgstr "Timedelta em segundos após o qual o agendamento não acionará mais a execução da tarefa" -#: django_celery_beat/models.py:527 -msgid "One-off Task" -msgstr "Tarefa Única" +#: django_celery_beat/models.py:467 +msgid "one-off task" +msgstr "tarefa única" -#: django_celery_beat/models.py:528 +#: django_celery_beat/models.py:469 msgid "If True, the schedule will only run the task a single time" -msgstr "Se Verdadeiro, o agendamento executará a tarefa apenas uma vez" +msgstr "Se True, o agendamento executará a tarefa apenas uma vez" -#: django_celery_beat/models.py:533 -msgid "Start Datetime" -msgstr "Data e Hora de Início" +#: django_celery_beat/models.py:473 +msgid "start datetime" +msgstr "data e hora de início" -#: django_celery_beat/models.py:535 +#: django_celery_beat/models.py:475 msgid "Datetime when the schedule should begin triggering the task to run" -msgstr "" -"Data e hora quando o agendamento deve começar a disparar a execução da tarefa" +msgstr "Data e hora em que o agendamento deve começar a acionar a execução da tarefa" -#: django_celery_beat/models.py:540 -msgid "Enabled" -msgstr "Habilitado" +#: django_celery_beat/models.py:480 +msgid "enabled" +msgstr "habilitado" -#: django_celery_beat/models.py:541 +#: django_celery_beat/models.py:482 msgid "Set to False to disable the schedule" -msgstr "Definir como Falso para desabilitar o agendamento" +msgstr "Definir como False para desabilitar o agendamento" -#: django_celery_beat/models.py:549 -msgid "Last Run Datetime" -msgstr "Data e Hora da Última Execução" +#: django_celery_beat/models.py:486 +msgid "last run at" +msgstr "última execução em" -#: django_celery_beat/models.py:551 -msgid "" -"Datetime that the schedule last triggered the task to run. Reset to None if " -"enabled is set to False." -msgstr "" -"Data e hora em que o agendamento disparou pela última vez a execução da " -"tarefa. Resetado para None se habilitado for definido como Falso." +#: django_celery_beat/models.py:488 +msgid "Datetime that the schedule last triggered the task to run. Reset to None if enabled is set to False." +msgstr "Data e hora em que o agendamento acionou pela última vez a execução da tarefa. Redefinido para None se enabled for definido como False." -#: django_celery_beat/models.py:558 -msgid "Total Run Count" -msgstr "Contagem Total de Execuções" +#: django_celery_beat/models.py:493 +msgid "total run count" +msgstr "contagem total de execuções" -#: django_celery_beat/models.py:560 +#: django_celery_beat/models.py:495 msgid "Running count of how many times the schedule has triggered the task" -msgstr "Contagem contínua de quantas vezes o agendamento disparou a tarefa" +msgstr "Contagem de quantas vezes o agendamento acionou a tarefa" -#: django_celery_beat/models.py:565 -msgid "Last Modified" -msgstr "Última Modificação" +#: django_celery_beat/models.py:499 +msgid "datetime changed" +msgstr "data e hora alterada" -#: django_celery_beat/models.py:566 +#: django_celery_beat/models.py:501 msgid "Datetime that this PeriodicTask was last modified" -msgstr "" -"Data e hora em que esta Tarefa Periódica foi modificada pela última vez" +msgstr "Data e hora em que esta PeriodicTask foi modificada pela última vez" -#: django_celery_beat/models.py:570 -msgid "Description" -msgstr "Descrição" +#: django_celery_beat/models.py:505 +msgid "description" +msgstr "descrição" -#: django_celery_beat/models.py:571 +#: django_celery_beat/models.py:507 msgid "Detailed description about the details of this Periodic Task" msgstr "Descrição detalhada sobre os detalhes desta Tarefa Periódica" -#: django_celery_beat/models.py:576 -msgid "This is the configuration area for executing asynchronous tasks." -msgstr "Esta é a área de configuração de execução de tarefas assíncronas." +#: django_celery_beat/models.py:755 +msgid "Only one schedule can be selected: Interval, Crontab, Solar, or Clocked" +msgstr "Apenas um agendamento pode ser selecionado: Intervalo, Crontab, Solar ou Programado" -#: django_celery_beat/models.py:597 -msgid "Content" -msgstr "Conteúdo" +#: django_celery_beat/models.py:759 +msgid "One of interval, crontab, solar, or clocked must be set." +msgstr "Um de intervalo, crontab, solar ou programado deve ser definido." -#: django_celery_beat/models.py:598 -msgid "Scheduler" -msgstr "Agendador" - -#: django_celery_beat/models.py:608 +#: django_celery_beat/models.py:785 msgid "periodic task" msgstr "tarefa periódica" -#: django_celery_beat/models.py:609 +#: django_celery_beat/models.py:786 msgid "periodic tasks" msgstr "tarefas periódicas" -#: django_celery_beat/templates/admin/djcelery/change_list.html:6 -msgid "Home" -msgstr "Início" +#: django_celery_beat/wagtail_hooks.py:217 +msgid "enabled,disabled" +msgstr "habilitada,desabilitada" -#: django_celery_beat/views.py:34 -#, python-brace-format -msgid "Task {0} was successfully run" -msgstr "Tarefa {0} foi executada com sucesso" +#: django_celery_beat/wagtail_hooks.py:224 +msgid "Periodic tasks" +msgstr "Tarefas periódicas" -#: django_celery_beat/wagtail_hooks.py:193 -msgid "Tasks" -msgstr "Tarefas" +#: journal/models.py:27 +msgid "Site ID" +msgstr "ID do Site" + +#: journal/models.py:29 +msgid "Short title" +msgstr "Título abreviado" + +#: journal/models.py:31 +msgid "Journal ISSN" +msgstr "ISSN da Revista" + +#: journal/models.py:33 +msgid "Online Journal ISSN" +msgstr "ISSN da Revista Online" + +#: journal/models.py:36 +msgid "ISSN SciELO" +msgstr "ISSN SciELO" + +#: journal/models.py:38 +msgid "ISSN SciELO Legacy" +msgstr "ISSN SciELO Legacy" + +#: journal/models.py:41 +msgid "Subject descriptors" +msgstr "Descritores de assunto" + +#: journal/models.py:46 +msgid "Purpose" +msgstr "Propósito" + +#: journal/models.py:49 +msgid "Sponsorship" +msgstr "Patrocínio" + +#: journal/models.py:52 +msgid "Mission" +msgstr "Missão" + +#: journal/models.py:55 +msgid "Index at" +msgstr "Indexado em" + +#: journal/models.py:58 +msgid "Availability" +msgstr "Disponibilidade" + +#: journal/models.py:61 +msgid "Summary form" +msgstr "Forma de resumo" + +#: journal/models.py:64 +msgid "Standard" +msgstr "Padrão" + +#: journal/models.py:67 +msgid "Alphabet title" +msgstr "Título alfabético" + +#: journal/models.py:69 +msgid "Print title" +msgstr "Título impresso" + +#: journal/models.py:72 +msgid "Short title (slug)" +msgstr "Título abreviado (slug)" + +#: journal/models.py:76 +#: markup_doc/models.py:40 +msgid "Title" +msgstr "Título" + +#: journal/models.py:81 +msgid "Subtitle" +msgstr "Subtítulo" + +#: journal/models.py:86 +msgid "Next title" +msgstr "Título seguinte" + +#: journal/models.py:90 +msgid "Previous title" +msgstr "Título anterior" + +#: journal/models.py:94 +msgid "Control number" +msgstr "Número de controle" + +#: journal/models.py:97 +msgid "Publisher name" +msgstr "Nome do editor" + +#: journal/models.py:99 +msgid "Publisher country" +msgstr "País do editor" + +#: journal/models.py:102 +msgid "Publisher state" +msgstr "Estado do editor" + +#: journal/models.py:105 +msgid "Publisher city" +msgstr "Cidade do editor" + +#: journal/models.py:108 +msgid "Publisher address" +msgstr "Endereço do editor" + +#: journal/models.py:111 +msgid "Publication level" +msgstr "Nível de publicação" + +#: journal/models.py:115 +msgid "Email" +msgstr "E-mail" + +#: journal/models.py:119 +msgid "URL online submission" +msgstr "URL de submissão online" + +#: journal/models.py:122 +msgid "URL home page" +msgstr "URL da página inicial" + +#: journal/models.py:146 +msgid "Journal" +msgstr "Revista" + +#: journal/models.py:147 +msgid "Journals" +msgstr "Revistas" + +#: journal/models.py:162 +msgid "Order" +msgstr "Ordem" + +#: journal/models.py:174 +msgid "Editor" +msgstr "Editor" + +#: journal/models.py:175 +msgid "Editors" +msgstr "Editores" + +#: journal/wagtail_hooks.py:57 +msgid "Journal and Editor" +msgstr "Revista e Editor" + +#: location/models.py:11 +msgid "Country Name" +msgstr "Nome do País" + +#: location/models.py:12 +msgid "ACR3" +msgstr "ACR3" + +#: location/models.py:13 +msgid "ACR2" +msgstr "ACR2" + +#: location/models.py:23 +msgid "Country" +msgstr "País" + +#: location/models.py:24 +msgid "Countries" +msgstr "Países" + +#: location/models.py:36 +msgid "State name" +msgstr "Nome do estado" + +#: location/models.py:37 +msgid "ACR 2 (state)" +msgstr "ACR 2 (estado)" + +#: location/models.py:48 +msgid "State" +msgstr "Estado" + +#: location/models.py:49 +msgid "States" +msgstr "Estados" + +#: location/models.py:61 +msgid "City name" +msgstr "Nome da cidade" + +#: location/models.py:75 +msgid "City" +msgstr "Cidade" + +#: location/models.py:76 +msgid "Cities" +msgstr "Cidades" + +#: location/wagtail_hooks.py:55 +msgid "Location" +msgstr "Localização" + +#: markup_doc/choices.py:11 +msgid "Document without content" +msgstr "Documento sem conteúdo" + +#: markup_doc/choices.py:12 +msgid "Structured document without references" +msgstr "Documento estruturado sem referências" + +#: markup_doc/choices.py:13 +msgid "Structured document" +msgstr "Documento estruturado" + +#: markup_doc/choices.py:14 +msgid "Structured document and references" +msgstr "Documento estruturado e referências" + +#: markup_doc/models.py:33 +msgid "DOI" +msgstr "DOI" + +#: markup_doc/models.py:56 +msgid "Rich Title" +msgstr "Título Rico" + +#: markup_doc/models.py:58 +msgid "Clean Title" +msgstr "Título Limpo" + +#: markup_doc/models.py:97 +msgid "Document" +msgstr "Documento" + +#: markup_doc/models.py:98 +#: markup_doc/wagtail_hooks.py:94 +msgid "Documents" +msgstr "Documentos" + +#: markup_doc/models.py:130 +msgid "Type" +msgstr "Tipo" + +#: markup_doc/models.py:137 +msgid "Paragraph" +msgstr "Parágrafo" + +#: markup_doc/models.py:138 +msgid "Paragraphs" +msgstr "Parágrafos" + +#: markup_doc/models.py:218 +msgid "Section title" +msgstr "Título da seção" + +#: markup_doc/models.py:222 +msgid "Section code" +msgstr "Código da seção" + +#: markup_doc/models.py:245 +msgid "Section" +msgstr "Seção" + +#: markup_doc/models.py:246 +msgid "Sections" +msgstr "Seções" + +#: markup_doc/models.py:279 +msgid "Figure" +msgstr "Figura" + +#: markup_doc/models.py:280 +msgid "Figures" +msgstr "Figuras" + +#: markup_doc/models.py:306 +msgid "Table" +msgstr "Tabela" + +#: markup_doc/models.py:307 +msgid "Tables" +msgstr "Tabelas" + +#: markup_doc/models.py:322 +msgid "Supplementary Material" +msgstr "Material Suplementar" + +#: markup_doc/models.py:323 +msgid "Supplementary Materials" +msgstr "Materiais Suplementares" + +#: markup_doc/models.py:336 +msgid "Document ID" +msgstr "ID do Documento" + +#: markup_doc/models.py:340 +msgid "Document ID type" +msgstr "Tipo de ID do documento" + +#: markup_doc/models.py:341 +msgid "Publisher ID" +msgstr "ID do Editor" + +#: markup_doc/models.py:342 +msgid "Pub Acronym" +msgstr "Acrônimo da Publicação" + +#: markup_doc/models.py:343 +msgid "Vol" +msgstr "Vol" + +#: markup_doc/models.py:344 +msgid "Suppl Vol" +msgstr "Supl Vol" + +#: markup_doc/models.py:345 +msgid "Num" +msgstr "Núm" + +#: markup_doc/models.py:346 +msgid "Suppl Num" +msgstr "Supl Núm" + +#: markup_doc/models.py:346 +msgid "Isid Part" +msgstr "Parte Isid" + +#: markup_doc/models.py:347 +msgid "Dateiso" +msgstr "Data ISO" + +#: markup_doc/models.py:348 +msgid "Month/Season" +msgstr "Mês/Estação" + +#: markup_doc/models.py:349 +msgid "First Page" +msgstr "Primeira Página" + +#: markup_doc/models.py:350 +msgid "@Seq" +msgstr "@Seq" + +#: markup_doc/models.py:351 +msgid "Last Page" +msgstr "Última Página" + +#: markup_doc/models.py:352 +msgid "Elocation ID" +msgstr "ID de Elocation" + +#: markup_doc/models.py:353 +msgid "Order (In TOC)" +msgstr "Ordem (No Sumário)" + +#: markup_doc/models.py:354 +msgid "Pag count" +msgstr "Contagem de Páginas" + +#: markup_doc/models.py:355 +msgid "Doc Topic" +msgstr "Tópico do Documento" + +#: markup_doc/models.py:363 +msgid "Sps version" +msgstr "Versão SPS" + +#: markup_doc/models.py:364 +msgid "Artdate" +msgstr "Data do Artigo" + +#: markup_doc/models.py:365 +msgid "Ahpdate" +msgstr "Data AHP" + +#: markup_doc/models.py:370 +msgid "Document xml" +msgstr "XML do documento" + +#: markup_doc/models.py:374 +msgid "Text XML" +msgstr "Texto XML" + +#: markup_doc/models.py:513 +msgid "Details" +msgstr "Detalhes" + +#: markup_doc/wagtail_hooks.py:117 +msgid "Documents Markup" +msgstr "Marcação de Documentos" + +#: markup_doc/wagtail_hooks.py:130 +msgid "Carregar DOCX" +msgstr "Carregar DOCX" + +#: markup_doc/wagtail_hooks.py:148 +msgid "XML marcado" +msgstr "XML marcado" + +#: markup_doc/wagtail_hooks.py:189 +msgid "Modelo de Coleções" +msgstr "Modelo de Coleções" + +#: markup_doc/wagtail_hooks.py:209 +msgid "Modelo de Revistas" +msgstr "Modelo de Revistas" + +#: markup_doc/wagtail_hooks.py:240 +msgid "DOCX Files" +msgstr "Arquivos DOCX" + +#: model_ai/models.py:21 +msgid "No model" +msgstr "Sem modelo" + +#: model_ai/models.py:22 +msgid "Downloading model" +msgstr "Baixando modelo" + +#: model_ai/models.py:23 +msgid "Model downloaded" +msgstr "Modelo baixado" + +#: model_ai/models.py:24 +msgid "Download error" +msgstr "Erro no download" + +#: model_ai/models.py:34 +msgid "Hugging Face model name" +msgstr "Nome do modelo Hugging Face" + +#: model_ai/models.py:35 +msgid "Model file" +msgstr "Arquivo do modelo" + +#: model_ai/models.py:36 +msgid "Hugging Face token" +msgstr "Token do Hugging Face" + +#: model_ai/models.py:38 +msgid "Local model status" +msgstr "Status do modelo local" + +#: model_ai/models.py:44 +msgid "URL Markapi" +msgstr "URL Markapi" + +#: model_ai/models.py:49 +msgid "API KEY Gemini" +msgstr "Chave API Gemini" + +#: model_ai/models.py:67 model_ai/models.py:71 +msgid "Only one instance of LlamaModel is allowed." +msgstr "Apenas uma instância de LlamaModel é permitida." + +#: model_ai/wagtail_hooks.py:28 model_ai/wagtail_hooks.py:63 +msgid "Model name is required." +msgstr "O nome do modelo é obrigatório." + +#: model_ai/wagtail_hooks.py:32 model_ai/wagtail_hooks.py:67 +msgid "Model file is required." +msgstr "O arquivo do modelo é obrigatório." + +#: model_ai/wagtail_hooks.py:36 model_ai/wagtail_hooks.py:71 +msgid "Hugging Face token is required." +msgstr "O token do Hugging Face é obrigatório." + +#: model_ai/wagtail_hooks.py:42 +msgid "Model created and download started." +msgstr "Modelo criado e download iniciado." + +#: model_ai/wagtail_hooks.py:46 model_ai/wagtail_hooks.py:82 +msgid "API AI URL is required." +msgstr "A URL da API AI é obrigatória." + +#: model_ai/wagtail_hooks.py:50 +msgid "Model created, use API AI." +msgstr "Modelo criado, usar API AI." + +#: model_ai/wagtail_hooks.py:77 +msgid "Model updated and download started." +msgstr "Modelo atualizado e download iniciado." + +#: model_ai/wagtail_hooks.py:79 +msgid "Model updated and already downloaded." +msgstr "Modelo atualizado e já baixado." + +#: model_ai/wagtail_hooks.py:86 +msgid "Model updated, use API AI." +msgstr "Modelo atualizado, usar API AI." + +#: model_ai/wagtail_hooks.py:95 +msgid "AI LLM Model" +msgstr "Modelo LLM de IA" #: reference/models.py:15 +msgid "No reference" +msgstr "Sem referência" + +#: reference/models.py:16 +msgid "Creating reference" +msgstr "Criando referência" + +#: reference/models.py:17 +msgid "Reference ready" +msgstr "Referência pronta" + +#: reference/models.py:22 msgid "Mixed Citation" -msgstr "Citação Mista" +msgstr "Citação mista" -#: reference/models.py:30 -#, fuzzy -#| msgid "Reference" -msgid "Referência" -msgstr "Referência" +#: reference/models.py:25 +msgid "Reference status" +msgstr "Status da referência" -#: reference/models.py:31 -#, fuzzy -#| msgid "Reference" -msgid "Referências" -msgstr "Referência" +#: reference/models.py:33 +msgid "Cited Elements" +msgstr "Elementos Citados" -#: reference/models.py:38 +#: reference/models.py:46 msgid "Marked" msgstr "Marcado" -#: reference/models.py:39 +#: reference/models.py:47 msgid "Marked XML" msgstr "XML Marcado" -#: reference/models.py:48 +#: reference/models.py:56 msgid "Rating from 1 to 10" msgstr "Classificação de 1 a 10" -#: reference/wagtail_hooks.py:45 +#: reference/wagtail_hooks.py:41 msgid "Reference" msgstr "Referência" @@ -677,7 +1190,7 @@ msgstr "Para reprocessar" #: tracker/choices.py:25 msgid "To do" -msgstr "Para fazer" +msgstr "A fazer" #: tracker/choices.py:26 msgid "Done" @@ -817,7 +1330,7 @@ msgstr "Enviado Em" #: xml_manager/models.py:27 msgid "The date and time when the file was uploaded." -msgstr "A data e hora quando o arquivo foi enviado." +msgstr "A data e hora em que o arquivo foi enviado." #: xml_manager/models.py:38 xml_manager/models.py:43 xml_manager/models.py:82 #: xml_manager/wagtail_hooks.py:56 xml_manager/wagtail_hooks.py:60 @@ -840,10 +1353,6 @@ msgstr "Arquivo DOCX" msgid "Intermediate DOCX file generated during PDF creation" msgstr "Arquivo DOCX intermediário gerado durante a criação do PDF" -#: xml_manager/models.py:58 xml_manager/models.py:90 -msgid "Language" -msgstr "Idioma" - #: xml_manager/models.py:59 xml_manager/models.py:91 msgid "Language code or name" msgstr "Código ou nome do idioma" @@ -879,21 +1388,26 @@ msgid "Exceptions file" msgstr "Arquivo de exceções" #: xml_manager/wagtail_hooks.py:118 -msgid "XML Manager" -msgstr "Gerenciador XML" +msgid "XML Processor" +msgstr "Processador XML" -#, fuzzy -#~| msgid "Marked" -#~ msgid "marked" -#~ msgstr "Marcado" -#, fuzzy -#~| msgid "Marked" -#~ msgid "marked_xml" -#~ msgstr "Marcado" +#: menu items +msgid "XML Files" +msgstr "Arquivos XML" + +#: menu items +msgid "Tarefas" +msgstr "Tarefas" + +#: markup_doc/wagtail_hooks.py +msgid "You must first select a collection." +msgstr "Você deve primeiro selecionar uma coleção." -#~ msgid "score" -#~ msgstr "pontuação" +#: markup_doc/wagtail_hooks.py +msgid "Wait a moment, there are no Journal elements yet." +msgstr "Aguarde um momento, ainda não existem elementos em Journal." -#~ msgid "Ações" -#~ msgstr "Ações" +#: markup_doc/wagtail_hooks.py +msgid "Synchronizing journals from the API, please wait a moment..." +msgstr "Sincronizando revistas da API, aguarde um momento..." \ No newline at end of file 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..6f4f37a --- /dev/null +++ b/markup_doc/wagtail_hooks.py @@ -0,0 +1,251 @@ +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 = _("Carregar DOCX") + menu_icon = "folder" + menu_order = 1 + add_to_settings_menu = False + exclude_from_explorer = False + list_per_page = 20 + list_display = ( + "title", + "get_estatus_display" # Usar estatus, não status + ) + search_fields = ("title",) + list_filter = ("estatus",) # Usar estatus, não status + + +class MarkupXMLViewSet(SnippetViewSet): + model = MarkupXML + add_view_class = ArticleDocxMarkupCreateView + edit_view_class = ArticleDocxEditView + menu_label = _("XML marcado") # Alterado de "MarkupXML" + menu_icon = "folder" + menu_order = 1 + add_to_settings_menu = False + exclude_from_explorer = False + list_display=("title", ) + list_per_page = 20 + search_fields = ("title",) + +""" +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 = _("Modelo de Coleções") # Alterado de "CollectionModel" + menu_icon = "folder" + menu_order = 1 + add_to_settings_menu = False + exclude_from_explorer = False + 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 + menu_label = _("Modelo de Revistas") # Alterado de "JournalModel" + menu_icon = "folder" + menu_order = 1 + add_to_settings_menu = False + exclude_from_explorer = False + 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 = 'docx_files' # Renomeado de 'docx_processor' + menu_label = _('DOCX Files') + menu_icon = "folder-open-inverse" + menu_order = 0 # Mudado de 1 para 0 para ficar na primeira posição + 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..36770ca --- /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 = 3 + 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..20334a6 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, + status=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 91% rename from reference/tasks.py rename to reference/data_utils.py index 51d4eff..99523e7 100644 --- a/reference/tasks.py +++ b/reference/data_utils.py @@ -1,6 +1,7 @@ +from celery import shared_task 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 @@ -22,7 +23,13 @@ def get_number_of_month(texto): return None # Si no encuentra un mes def get_xml(json_reference): - json_reference = json.loads(json_reference) + try: + json_reference = json.loads(json_reference) + except json.JSONDecodeError as e: + print(f"JSON malformado da IA: {e}") + print(f"JSON recebido: {json_reference[:500]}...") + # Retornar estrutura básica + return etree.Element("error") root = etree.Element('element-citation', attrib = { 'publication-type': json_reference['reftype'], @@ -105,10 +112,11 @@ def get_xml(json_reference): return root -#@celery_app.task() +@shared_task def get_reference(obj_id): obj_reference = Reference.objects.get(id=obj_id) - marked = mark_references(obj_reference.mixed_citation) + marked = list(mark_references(obj_reference.mixed_citation)) + for item in marked: for i in item['choices']: ElementCitation.objects.create( @@ -116,5 +124,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.status = 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..09b9928 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): @@ -20,7 +25,7 @@ def form_valid(self, form): if linea: # Evitar procesar líneas vacías new_reference = Reference.objects.create( mixed_citation=linea, - estatus=1, # Estatus predeterminado + status=1, # Estatus predeterminado creator=self.request.user, # Usuario asociado ) get_reference.delay(new_reference.id) @@ -30,17 +35,17 @@ 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") menu_icon = "folder" - menu_order = 1 + menu_order = 3 exclude_from_explorer = ( False ) 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/requirements/local.txt b/requirements/local.txt index 41e8cbf..9818781 100644 --- a/requirements/local.txt +++ b/requirements/local.txt @@ -1,4 +1,5 @@ -r base.txt +-r extra-llama.txt Werkzeug==3.0.1 # https://github.com/pallets/werkzeug ipdb==0.13.13 # https://github.com/gotcha/ipdb @@ -8,4 +9,4 @@ watchgod==0.8.2 # https://github.com/samuelcolvin/watchgod django-extensions==3.2.3 # https://github.com/django-extensions/django-extensions django-debug-toolbar # https://github.com/jazzband/django-debug-toolbar -pytest >= 7.0.7 \ No newline at end of file +pytest >= 7.0.7-r diff --git a/scielo_xml_tools.yml b/scielo_xml_tools.yml new file mode 100644 index 0000000..6a4da70 --- /dev/null +++ b/scielo_xml_tools.yml @@ -0,0 +1,80 @@ +services: + django: &django + build: + context: . + dockerfile: ./compose/local/django/Dockerfile + args: + BUILD_ENVIRONMENT: local + image: markapi_local_django + container_name: markapi_local_django + depends_on: + - redis + - postgres + - mailhog + volumes: + - .:/app:z + - ../markup_data/media:/app/core/media + env_file: + - ./.envs/.local/.django + - ./.envs/.local/.postgres + ports: + - "8009:8000" + command: /start + + mailhog: + image: mailhog/mailhog:v1.0.0 + container_name: markapi_local_mailhog + ports: + - "8029:8025" + + postgres: + build: + context: . + dockerfile: ./compose/production/postgres/Dockerfile + image: markapi_local_postgres + container_name: markapi_local_postgres + volumes: +# - ../scms_data/markapi/data_dev:/var/lib/postgresql/data:Z +# - ../scms_data/markapi/data_dev_backup:/backups:z + - ../markup_data/database/data:/var/lib/postgresql/data:Z + - ../markup_data/database/backup:/backups:z + ports: + - "5439:5432" + env_file: + - ./.envs/.local/.postgres + + redis: + image: redis:6 + container_name: markapi_local_redis + ports: + - "6399:6379" + + celeryworker: + <<: *django + image: markapi_local_celeryworker + container_name: markapi_local_celeryworker + depends_on: + - redis + - postgres + - mailhog + ports: [] + command: /start-celeryworker + + celerybeat: + <<: *django + image: markapi_local_celerybeat + container_name: markapi_local_celerybeat + depends_on: + - redis + - postgres + - mailhog + ports: [] + command: /start-celerybeat + + flower: + <<: *django + image: markapi_local_flower + container_name: markapi_local_flower + ports: + - "5559:5555" + command: /start-flower 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'}, + ), + ] diff --git a/xml_manager/wagtail_hooks.py b/xml_manager/wagtail_hooks.py index 1ba52e0..58d770a 100644 --- a/xml_manager/wagtail_hooks.py +++ b/xml_manager/wagtail_hooks.py @@ -56,9 +56,9 @@ class XMLDocumentSnippetViewSet(SnippetViewSet): verbose_name = _("XML Document") verbose_name_plural = _("XML Documents") icon = "folder-open-inverse" - menu_name = "xml_manager" + menu_name = "xml_files" menu_label = _("XML Document") - menu_order = get_menu_order("xml_manager") + menu_order = get_menu_order("xml_files") add_to_admin_menu = False list_display = ( @@ -70,6 +70,7 @@ class XMLDocumentSnippetViewSet(SnippetViewSet): ) search_fields = ("xml_file",) + list_filter = ("uploaded_at",) class XMLDocumentPDFSnippetViewSet(SnippetViewSet): @@ -77,9 +78,9 @@ class XMLDocumentPDFSnippetViewSet(SnippetViewSet): verbose_name = _("XML Document PDF") verbose_name_plural = _("XML Document PDFs") icon = "doc-full" - menu_name = "xml_manager" + menu_name = "xml_files" menu_label = _("XML Document PDF") - menu_order = get_menu_order("xml_manager") + menu_order = get_menu_order("xml_files") add_to_admin_menu = False list_display = ( @@ -90,7 +91,8 @@ class XMLDocumentPDFSnippetViewSet(SnippetViewSet): "uploaded_at" ) - search_fields = ("pdf_file",) + search_fields = ("pdf_file", "language") + list_filter = ("language", "uploaded_at") class XMLDocumentHTMLSnippetViewSet(SnippetViewSet): @@ -98,9 +100,9 @@ class XMLDocumentHTMLSnippetViewSet(SnippetViewSet): verbose_name = _("XML Document HTML") verbose_name_plural = _("XML Document HTMLs") icon = "doc-full" - menu_name = "xml_manager" + menu_name = "xml_files" menu_label = _("XML Document HTML") - menu_order = get_menu_order("xml_manager") + menu_order = get_menu_order("xml_files") add_to_admin_menu = False list_display = ( @@ -110,14 +112,16 @@ class XMLDocumentHTMLSnippetViewSet(SnippetViewSet): "uploaded_at", ) - search_fields = ("html_file",) + search_fields = ("html_file", "language") + list_filter = ("language", "uploaded_at") class XMLDocumentSnippetViewSetGroup(SnippetViewSetGroup): - menu_name = 'xml_manager' - menu_label = _("XML Manager") + menu_name = 'xml_files' + menu_label = _("XML Files") menu_icon = "folder-open-inverse" - menu_order = get_menu_order("xml_manager") + menu_order = 0 + # menu_order = get_menu_order("xml_files") items = ( XMLDocumentSnippetViewSet, XMLDocumentHTMLSnippetViewSet, @@ -131,5 +135,5 @@ class XMLDocumentSnippetViewSetGroup(SnippetViewSetGroup): @hooks.register('register_admin_urls') def register_admin_urls(): return [ - path('xml-manager/', include(urls)), - ] + path('xml-files/', include(urls)), + ] \ No newline at end of file