From f30d05acfc7ada811a5a9421de4245c5266c7144 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 6 Apr 2021 10:40:13 -0700 Subject: [PATCH 001/140] Update connector model to add new connector --- bookwyrm/connectors/settings.py | 2 +- .../migrations/0062_auto_20210406_1731.py | 22 +++++++++++++++++++ bookwyrm/models/connector.py | 10 --------- 3 files changed, 23 insertions(+), 11 deletions(-) create mode 100644 bookwyrm/migrations/0062_auto_20210406_1731.py diff --git a/bookwyrm/connectors/settings.py b/bookwyrm/connectors/settings.py index f1674cf7c..4cc98da7f 100644 --- a/bookwyrm/connectors/settings.py +++ b/bookwyrm/connectors/settings.py @@ -1,3 +1,3 @@ """ settings book data connectors """ -CONNECTORS = ["openlibrary", "self_connector", "bookwyrm_connector"] +CONNECTORS = ["openlibrary", "inventaire", "self_connector", "bookwyrm_connector"] diff --git a/bookwyrm/migrations/0062_auto_20210406_1731.py b/bookwyrm/migrations/0062_auto_20210406_1731.py new file mode 100644 index 000000000..9ff26af34 --- /dev/null +++ b/bookwyrm/migrations/0062_auto_20210406_1731.py @@ -0,0 +1,22 @@ +# Generated by Django 3.1.6 on 2021-04-06 17:31 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('bookwyrm', '0061_auto_20210402_1435'), + ] + + operations = [ + migrations.RemoveConstraint( + model_name='connector', + name='connector_file_valid', + ), + migrations.AlterField( + model_name='connector', + name='connector_file', + field=models.CharField(choices=[('openlibrary', 'Openlibrary'), ('inventaire', 'Inventaire'), ('self_connector', 'Self Connector'), ('bookwyrm_connector', 'Bookwyrm Connector')], max_length=255), + ), + ] diff --git a/bookwyrm/models/connector.py b/bookwyrm/models/connector.py index 11bdbee20..9f9af8aed 100644 --- a/bookwyrm/models/connector.py +++ b/bookwyrm/models/connector.py @@ -31,16 +31,6 @@ class Connector(BookWyrmModel): # when to reset the query count back to 0 (ie, after 1 day) query_count_expiry = models.DateTimeField(auto_now_add=True, blank=True) - class Meta: - """ check that there's code to actually use this connector """ - - constraints = [ - models.CheckConstraint( - check=models.Q(connector_file__in=ConnectorFiles), - name="connector_file_valid", - ) - ] - def __str__(self): return "{} ({})".format( self.identifier, From 295842badd51676aaeb177fea97b6efd0c59680a Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 6 Apr 2021 10:40:39 -0700 Subject: [PATCH 002/140] Adds inventaire id to book data model --- bookwyrm/activitypub/book.py | 14 ++++++++------ bookwyrm/models/book.py | 3 +++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/bookwyrm/activitypub/book.py b/bookwyrm/activitypub/book.py index 7e552b0a8..8ff1df82d 100644 --- a/bookwyrm/activitypub/book.py +++ b/bookwyrm/activitypub/book.py @@ -24,9 +24,10 @@ class Book(ActivityObject): firstPublishedDate: str = "" publishedDate: str = "" - openlibraryKey: str = "" - librarythingKey: str = "" - goodreadsKey: str = "" + openlibraryKey: str = None + inventiareId: str = None + librarythingKey: str = None + goodreadsKey: str = None cover: Image = None type: str = "Book" @@ -68,8 +69,9 @@ class Author(ActivityObject): died: str = None aliases: List[str] = field(default_factory=lambda: []) bio: str = "" - openlibraryKey: str = "" - librarythingKey: str = "" - goodreadsKey: str = "" + openlibraryKey: str = None + inventiareId: str = None + librarythingKey: str = None + goodreadsKey: str = None wikipediaLink: str = "" type: str = "Author" diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index 3204c6035..ccbec9ebe 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -19,6 +19,9 @@ class BookDataModel(ObjectMixin, BookWyrmModel): openlibrary_key = fields.CharField( max_length=255, blank=True, null=True, deduplication_field=True ) + inventaire_id = fields.CharField( + max_length=255, blank=True, null=True, deduplication_field=True + ) librarything_key = fields.CharField( max_length=255, blank=True, null=True, deduplication_field=True ) From d482c66ad4dff9152d52d257242e6d7fea178c52 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 6 Apr 2021 11:58:07 -0700 Subject: [PATCH 003/140] Adds inventaire connector stub And changes formatters to accept the key as well as value --- bookwyrm/connectors/abstract_connector.py | 2 +- bookwyrm/connectors/inventaire.py | 84 +++++++++++++++++++++++ bookwyrm/connectors/openlibrary.py | 14 ++-- 3 files changed, 92 insertions(+), 8 deletions(-) create mode 100644 bookwyrm/connectors/inventaire.py diff --git a/bookwyrm/connectors/abstract_connector.py b/bookwyrm/connectors/abstract_connector.py index 00b5c5c9e..bbbedd70a 100644 --- a/bookwyrm/connectors/abstract_connector.py +++ b/bookwyrm/connectors/abstract_connector.py @@ -296,6 +296,6 @@ class Mapping: if not value: return None try: - return self.formatter(value) + return self.formatter(value, self.remote_field) except: # pylint: disable=bare-except return None diff --git a/bookwyrm/connectors/inventaire.py b/bookwyrm/connectors/inventaire.py new file mode 100644 index 000000000..714508ab4 --- /dev/null +++ b/bookwyrm/connectors/inventaire.py @@ -0,0 +1,84 @@ +""" inventaire data connector """ +from bookwyrm import models +from .abstract_connector import AbstractConnector, SearchResult, Mapping +from .abstract_connector import get_data +from .connector_manager import ConnectorException + + +class Connector(AbstractConnector): + """ instantiate a connector for OL """ + + def __init__(self, identifier): + super().__init__(identifier) + + self.book_mappings = [ + Mapping("title", remote_field="wdt:P1476", formatter=get_claim), + Mapping("id", remote_field="id"), + Mapping("cover", remote_field="image", formatter=self.get_cover_url), + Mapping("isbn13", remote_field="wdt:P212", formatter=get_claim), + Mapping("isbn10", remote_field="wdt:P957", formatter=get_claim), + Mapping("languages", remote_field="wdt:P407", formatter=get_language), + Mapping("publishers", remote_field="wdt:P123", formatter=resolve_key), + Mapping("publishedDate", remote_field="wdt:P577", formatter=get_claim), + Mapping("pages", remote_field="wdt:P1104", formatter=get_claim), + Mapping("goodreadsKey", remote_field="wdt:P2969", formatter=get_claim), + ] + + def parse_search_data(self, data): + return data.get('results') + + def format_search_result(self, search_result): + images = search_result.get("image") + cover = "{:s}/img/entities/{:s}".format( + self.covers_url, images[0] + ) if images else None + return SearchResult( + title=search_result.get("label"), + key="{:s}{:s}".format(self.books_url, search_result.get("uri")), + cover=cover, + connector=self, + ) + + def parse_isbn_search_data(self, data): + """ boop doop """ + + def format_isbn_search_result(self, search_result): + """ beep bloop """ + + def is_work_data(self, data): + return True + + def get_edition_from_work_data(self, data): + return {} + + def get_work_from_edition_data(self, data): + # P629 + return {} + + def get_authors_from_data(self, data): + return [] + + def expand_book_data(self, book): + return + + def get_cover_url(self, cover_blob, *_): + """ format the relative cover url into an absolute one: + {"url": "/img/entities/e794783f01b9d4f897a1ea9820b96e00d346994f"} + """ + cover_id = cover_blob[0].get("url") + if not cover_id: + return None + return "%s%s" % (self.covers_url, cover_id) + + +def get_claim(data, claim_key): + """ all the metadata is in a "claims" dict with a buncha wikidata keys """ + return data.get('claims', {}).get(claim_key) + +def get_language(wikidata_key, *_): + """ who here speaks "wd:Q150" """ + return wikidata_key # TODO + +def resolve_key(wikidata_key, *_): + """ cool, it's "wd:Q3156592" now what the heck does that mean """ + return wikidata_key # TODO diff --git a/bookwyrm/connectors/openlibrary.py b/bookwyrm/connectors/openlibrary.py index 9be0266cd..34357726c 100644 --- a/bookwyrm/connectors/openlibrary.py +++ b/bookwyrm/connectors/openlibrary.py @@ -14,8 +14,8 @@ class Connector(AbstractConnector): def __init__(self, identifier): super().__init__(identifier) - get_first = lambda a: a[0] - get_remote_id = lambda a: self.base_url + a + get_first = lambda a, *args: a[0] + get_remote_id = lambda a, *args: self.base_url + a self.book_mappings = [ Mapping("title"), Mapping("id", remote_field="key", formatter=get_remote_id), @@ -95,7 +95,7 @@ class Connector(AbstractConnector): url = "%s%s" % (self.base_url, author_id) yield self.get_or_create_author(url) - def get_cover_url(self, cover_blob, size="L"): + def get_cover_url(self, cover_blob, *_, size="L"): """ ask openlibrary for the cover """ if not cover_blob: return None @@ -181,19 +181,19 @@ def ignore_edition(edition_data): return True -def get_description(description_blob): +def get_description(description_blob, *_): """ descriptions can be a string or a dict """ if isinstance(description_blob, dict): return description_blob.get("value") return description_blob -def get_openlibrary_key(key): +def get_openlibrary_key(key, *_): """ convert /books/OL27320736M into OL27320736M """ return key.split("/")[-1] -def get_languages(language_blob): +def get_languages(language_blob, *_): """ /language/eng -> English """ langs = [] for lang in language_blob: @@ -201,7 +201,7 @@ def get_languages(language_blob): return langs -def pick_default_edition(options): +def pick_default_edition(options, *_): """ favor physical copies with covers in english """ if not options: return None From fba44206ac129addcf9f0b0077c0e65b835b79a2 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 6 Apr 2021 12:17:58 -0700 Subject: [PATCH 004/140] Adds separate view and load links for book search results --- bookwyrm/activitypub/book.py | 4 ++-- bookwyrm/connectors/abstract_connector.py | 3 ++- bookwyrm/connectors/inventaire.py | 5 ++++- bookwyrm/templates/snippets/search_result_text.html | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/bookwyrm/activitypub/book.py b/bookwyrm/activitypub/book.py index 8ff1df82d..7a4279270 100644 --- a/bookwyrm/activitypub/book.py +++ b/bookwyrm/activitypub/book.py @@ -25,7 +25,7 @@ class Book(ActivityObject): publishedDate: str = "" openlibraryKey: str = None - inventiareId: str = None + inventaireId: str = None librarythingKey: str = None goodreadsKey: str = None @@ -70,7 +70,7 @@ class Author(ActivityObject): aliases: List[str] = field(default_factory=lambda: []) bio: str = "" openlibraryKey: str = None - inventiareId: str = None + inventaireId: str = None librarythingKey: str = None goodreadsKey: str = None wikipediaLink: str = "" diff --git a/bookwyrm/connectors/abstract_connector.py b/bookwyrm/connectors/abstract_connector.py index bbbedd70a..378f23f70 100644 --- a/bookwyrm/connectors/abstract_connector.py +++ b/bookwyrm/connectors/abstract_connector.py @@ -263,6 +263,7 @@ class SearchResult: title: str key: str connector: object + view_link: str = None author: str = None year: str = None cover: str = None @@ -284,7 +285,7 @@ class Mapping: """ associate a local database field with a field in an external dataset """ def __init__(self, local_field, remote_field=None, formatter=None): - noop = lambda x: x + noop = lambda x, *_: x self.local_field = local_field self.remote_field = remote_field or local_field diff --git a/bookwyrm/connectors/inventaire.py b/bookwyrm/connectors/inventaire.py index 714508ab4..748259eb4 100644 --- a/bookwyrm/connectors/inventaire.py +++ b/bookwyrm/connectors/inventaire.py @@ -11,9 +11,11 @@ class Connector(AbstractConnector): def __init__(self, identifier): super().__init__(identifier) + get_remote_id = lambda a, *args: self.base_url + a self.book_mappings = [ Mapping("title", remote_field="wdt:P1476", formatter=get_claim), - Mapping("id", remote_field="id"), + Mapping("id", remote_field="key", formatter=get_remote_id), + Mapping("inventaireId", remote_field="id"), Mapping("cover", remote_field="image", formatter=self.get_cover_url), Mapping("isbn13", remote_field="wdt:P212", formatter=get_claim), Mapping("isbn10", remote_field="wdt:P957", formatter=get_claim), @@ -35,6 +37,7 @@ class Connector(AbstractConnector): return SearchResult( title=search_result.get("label"), key="{:s}{:s}".format(self.books_url, search_result.get("uri")), + view_link="{:s}{:s}".format(self.base_url, search_result.get("uri")), cover=cover, connector=self, ) diff --git a/bookwyrm/templates/snippets/search_result_text.html b/bookwyrm/templates/snippets/search_result_text.html index 059b8e7e8..2f6ba5037 100644 --- a/bookwyrm/templates/snippets/search_result_text.html +++ b/bookwyrm/templates/snippets/search_result_text.html @@ -16,7 +16,7 @@

- {{ result.title }} + {{ result.title }} {% if result.author %} {% blocktrans with author=result.author %}by {{ author }}{% endblocktrans %}{% endif %}{% if result.year %} ({{ result.year }}) From 22ebe60c0abb2badaf0d354190eee125d5278514 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 6 Apr 2021 12:29:06 -0700 Subject: [PATCH 005/140] Use custom data extractor for inventaire connector --- bookwyrm/connectors/abstract_connector.py | 16 ++++++++++++---- bookwyrm/connectors/inventaire.py | 9 ++++++--- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/bookwyrm/connectors/abstract_connector.py b/bookwyrm/connectors/abstract_connector.py index 378f23f70..8007bb1a4 100644 --- a/bookwyrm/connectors/abstract_connector.py +++ b/bookwyrm/connectors/abstract_connector.py @@ -44,7 +44,7 @@ class AbstractMinimalConnector(ABC): if min_confidence: params["min_confidence"] = min_confidence - data = get_data( + data = self.get_search_data( "%s%s" % (self.search_url, query), params=params, ) @@ -57,7 +57,7 @@ class AbstractMinimalConnector(ABC): def isbn_search(self, query): """ isbn search """ params = {} - data = get_data( + data = self.get_search_data( "%s%s" % (self.isbn_search_url, query), params=params, ) @@ -117,7 +117,7 @@ class AbstractConnector(AbstractMinimalConnector): return existing # load the json - data = get_data(remote_id) + data = self.get_book_data(remote_id) mapped_data = dict_from_mappings(data, self.book_mappings) if self.is_work_data(data): try: @@ -150,6 +150,14 @@ class AbstractConnector(AbstractMinimalConnector): load_more_data.delay(self.connector.id, work.id) return edition + def get_book_data(self, remote_id): + """ this allows connectors to override the default behavior """ + return get_data(remote_id) + + def get_search_data(self, remote_id): + """ this allows connectors to override the default behavior """ + return get_data(remote_id) + def create_edition_from_data(self, work, edition_data): """ if we already have the work, we're ready """ mapped_data = dict_from_mappings(edition_data, self.book_mappings) @@ -176,7 +184,7 @@ class AbstractConnector(AbstractMinimalConnector): if existing: return existing - data = get_data(remote_id) + data = self.get_book_data(remote_id) mapped_data = dict_from_mappings(data, self.author_mappings) activity = activitypub.Author(**mapped_data) diff --git a/bookwyrm/connectors/inventaire.py b/bookwyrm/connectors/inventaire.py index 748259eb4..72ed82216 100644 --- a/bookwyrm/connectors/inventaire.py +++ b/bookwyrm/connectors/inventaire.py @@ -1,8 +1,6 @@ """ inventaire data connector """ -from bookwyrm import models from .abstract_connector import AbstractConnector, SearchResult, Mapping from .abstract_connector import get_data -from .connector_manager import ConnectorException class Connector(AbstractConnector): @@ -26,6 +24,11 @@ class Connector(AbstractConnector): Mapping("goodreadsKey", remote_field="wdt:P2969", formatter=get_claim), ] + def get_book_data(self, remote_id): + data = get_data(remote_id) + extracted = list(data.get("entities").values()) + return extracted[0] if extracted else {} + def parse_search_data(self, data): return data.get('results') @@ -49,7 +52,7 @@ class Connector(AbstractConnector): """ beep bloop """ def is_work_data(self, data): - return True + return data.get("type") == "work" def get_edition_from_work_data(self, data): return {} From 5149c7e8c2da5766ba16c1b033e39d3da3844a3d Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 6 Apr 2021 13:03:22 -0700 Subject: [PATCH 006/140] Expands mappings for inventaire/wikidata properties --- bookwyrm/connectors/inventaire.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/bookwyrm/connectors/inventaire.py b/bookwyrm/connectors/inventaire.py index 72ed82216..b3c49772a 100644 --- a/bookwyrm/connectors/inventaire.py +++ b/bookwyrm/connectors/inventaire.py @@ -9,11 +9,14 @@ class Connector(AbstractConnector): def __init__(self, identifier): super().__init__(identifier) - get_remote_id = lambda a, *args: self.base_url + a + get_remote_id = lambda a, *args: self.books_url + a + get_remote_id_list = lambda a, *_: [get_remote_id(v) for v in a] self.book_mappings = [ Mapping("title", remote_field="wdt:P1476", formatter=get_claim), - Mapping("id", remote_field="key", formatter=get_remote_id), - Mapping("inventaireId", remote_field="id"), + Mapping("subtitle", remote_field="wdt:P1680", formatter=get_claim), + Mapping("id", remote_field="uri", formatter=get_remote_id), + Mapping("authors", remote_field="wdt:P50", formatter=get_remote_id_list), + Mapping("inventaireId", remote_field="uri"), Mapping("cover", remote_field="image", formatter=self.get_cover_url), Mapping("isbn13", remote_field="wdt:P212", formatter=get_claim), Mapping("isbn10", remote_field="wdt:P957", formatter=get_claim), @@ -22,7 +25,14 @@ class Connector(AbstractConnector): Mapping("publishedDate", remote_field="wdt:P577", formatter=get_claim), Mapping("pages", remote_field="wdt:P1104", formatter=get_claim), Mapping("goodreadsKey", remote_field="wdt:P2969", formatter=get_claim), + Mapping("openlibraryKey", remote_field="wdt:P648", formatter=get_claim), + Mapping("subjectPlaces", remote_field="wdt:P840", formatter=resolve_key), + Mapping("subjects", remote_field="wdt:P921", formatter=resolve_key), + Mapping("librarythingKey", remote_field="wdt:P1085", formatter=get_claim), + Mapping("oclcNumber", remote_field="wdt:P5331", formatter=get_claim), + Mapping("asin", remote_field="wdt:P5749", formatter=get_claim), ] + # TODO: P136: genre, P268 bnf id, P674 characters, P950 bne def get_book_data(self, remote_id): data = get_data(remote_id) From 3158701075bf1328be9d7c5851afdf0ed1b63edf Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 6 Apr 2021 13:39:10 -0700 Subject: [PATCH 007/140] Gets editions for works --- bookwyrm/connectors/inventaire.py | 33 ++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/bookwyrm/connectors/inventaire.py b/bookwyrm/connectors/inventaire.py index b3c49772a..9987079e8 100644 --- a/bookwyrm/connectors/inventaire.py +++ b/bookwyrm/connectors/inventaire.py @@ -1,6 +1,7 @@ """ inventaire data connector """ from .abstract_connector import AbstractConnector, SearchResult, Mapping from .abstract_connector import get_data +from .connector_manager import ConnectorException class Connector(AbstractConnector): @@ -9,12 +10,11 @@ class Connector(AbstractConnector): def __init__(self, identifier): super().__init__(identifier) - get_remote_id = lambda a, *args: self.books_url + a - get_remote_id_list = lambda a, *_: [get_remote_id(v) for v in a] + get_remote_id_list = lambda a, *_: [self.get_remote_id(v) for v in a] self.book_mappings = [ Mapping("title", remote_field="wdt:P1476", formatter=get_claim), Mapping("subtitle", remote_field="wdt:P1680", formatter=get_claim), - Mapping("id", remote_field="uri", formatter=get_remote_id), + Mapping("id", remote_field="uri", formatter=self.get_remote_id), Mapping("authors", remote_field="wdt:P50", formatter=get_remote_id_list), Mapping("inventaireId", remote_field="uri"), Mapping("cover", remote_field="image", formatter=self.get_cover_url), @@ -34,6 +34,10 @@ class Connector(AbstractConnector): ] # TODO: P136: genre, P268 bnf id, P674 characters, P950 bne + def get_remote_id(self, value, *_): + """ convert an id/uri into a url """ + return '{:s}?action=by-uris&uris={:s}'.format(self.books_url, value) + def get_book_data(self, remote_id): data = get_data(remote_id) extracted = list(data.get("entities").values()) @@ -49,7 +53,9 @@ class Connector(AbstractConnector): ) if images else None return SearchResult( title=search_result.get("label"), - key="{:s}{:s}".format(self.books_url, search_result.get("uri")), + key="{:s}?action=by-uris&uris={:s}".format( + self.books_url, search_result.get("uri") + ), view_link="{:s}{:s}".format(self.base_url, search_result.get("uri")), cover=cover, connector=self, @@ -65,11 +71,24 @@ class Connector(AbstractConnector): return data.get("type") == "work" def get_edition_from_work_data(self, data): - return {} + value = data.get("uri") + url = "{:s}?action=reverse-claims&property=P629&value={:s}".format( + self.books_url, value + ) + data = get_data(url) + try: + uri = data["uris"][0] + except KeyError: + raise ConnectorException("Invalid book data") + return self.get_book_data(self.get_remote_id(uri)) def get_work_from_edition_data(self, data): - # P629 - return {} + try: + uri = data["claims"]["wdt:P629"] + except KeyError: + raise ConnectorException("Invalid book data") + return self.get_book_data(self.get_remote_id(uri)) + def get_authors_from_data(self, data): return [] From e594cd0a3619015091c654ab85de9ba85ab14a07 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 6 Apr 2021 13:53:58 -0700 Subject: [PATCH 008/140] Load simple fields from inventaire --- bookwyrm/connectors/inventaire.py | 64 +++++++++++++++++-------------- 1 file changed, 36 insertions(+), 28 deletions(-) diff --git a/bookwyrm/connectors/inventaire.py b/bookwyrm/connectors/inventaire.py index 9987079e8..1ff834bf5 100644 --- a/bookwyrm/connectors/inventaire.py +++ b/bookwyrm/connectors/inventaire.py @@ -10,47 +10,59 @@ class Connector(AbstractConnector): def __init__(self, identifier): super().__init__(identifier) + get_first = lambda a, *args: a[0] get_remote_id_list = lambda a, *_: [self.get_remote_id(v) for v in a] self.book_mappings = [ - Mapping("title", remote_field="wdt:P1476", formatter=get_claim), - Mapping("subtitle", remote_field="wdt:P1680", formatter=get_claim), + Mapping("title", remote_field="wdt:P1476", formatter=get_first), + Mapping("subtitle", remote_field="wdt:P1680", formatter=get_first), Mapping("id", remote_field="uri", formatter=self.get_remote_id), - Mapping("authors", remote_field="wdt:P50", formatter=get_remote_id_list), + # Mapping("authors", remote_field="wdt:P50", formatter=get_remote_id_list), Mapping("inventaireId", remote_field="uri"), Mapping("cover", remote_field="image", formatter=self.get_cover_url), - Mapping("isbn13", remote_field="wdt:P212", formatter=get_claim), - Mapping("isbn10", remote_field="wdt:P957", formatter=get_claim), - Mapping("languages", remote_field="wdt:P407", formatter=get_language), - Mapping("publishers", remote_field="wdt:P123", formatter=resolve_key), - Mapping("publishedDate", remote_field="wdt:P577", formatter=get_claim), - Mapping("pages", remote_field="wdt:P1104", formatter=get_claim), - Mapping("goodreadsKey", remote_field="wdt:P2969", formatter=get_claim), - Mapping("openlibraryKey", remote_field="wdt:P648", formatter=get_claim), - Mapping("subjectPlaces", remote_field="wdt:P840", formatter=resolve_key), - Mapping("subjects", remote_field="wdt:P921", formatter=resolve_key), - Mapping("librarythingKey", remote_field="wdt:P1085", formatter=get_claim), - Mapping("oclcNumber", remote_field="wdt:P5331", formatter=get_claim), - Mapping("asin", remote_field="wdt:P5749", formatter=get_claim), + Mapping("isbn13", remote_field="wdt:P212", formatter=get_first), + Mapping("isbn10", remote_field="wdt:P957", formatter=get_first), + # Mapping("languages", remote_field="wdt:P407", formatter=get_language), + # Mapping("publishers", remote_field="wdt:P123", formatter=resolve_key), + Mapping("publishedDate", remote_field="wdt:P577", formatter=get_first), + Mapping("pages", remote_field="wdt:P1104", formatter=get_first), + Mapping("goodreadsKey", remote_field="wdt:P2969", formatter=get_first), + Mapping("openlibraryKey", remote_field="wdt:P648", formatter=get_first), + # Mapping("subjectPlaces", remote_field="wdt:P840", formatter=resolve_key), + # Mapping("subjects", remote_field="wdt:P921", formatter=resolve_key), + Mapping("librarythingKey", remote_field="wdt:P1085", formatter=get_first), + Mapping("oclcNumber", remote_field="wdt:P5331", formatter=get_first), + Mapping("asin", remote_field="wdt:P5749", formatter=get_first), ] # TODO: P136: genre, P268 bnf id, P674 characters, P950 bne def get_remote_id(self, value, *_): """ convert an id/uri into a url """ - return '{:s}?action=by-uris&uris={:s}'.format(self.books_url, value) + return "{:s}?action=by-uris&uris={:s}".format(self.books_url, value) def get_book_data(self, remote_id): data = get_data(remote_id) extracted = list(data.get("entities").values()) - return extracted[0] if extracted else {} + try: + data = extracted[0] + except KeyError: + raise ConnectorException("Invalid book data") + # flatten the data so that images, uri, and claims are on the same level + return { + **data.get("claims"), + "uri": data.get("uri"), + "image": data.get("image"), + } def parse_search_data(self, data): - return data.get('results') + return data.get("results") def format_search_result(self, search_result): images = search_result.get("image") - cover = "{:s}/img/entities/{:s}".format( - self.covers_url, images[0] - ) if images else None + cover = ( + "{:s}/img/entities/{:s}".format(self.covers_url, images[0]) + if images + else None + ) return SearchResult( title=search_result.get("label"), key="{:s}?action=by-uris&uris={:s}".format( @@ -89,7 +101,6 @@ class Connector(AbstractConnector): raise ConnectorException("Invalid book data") return self.get_book_data(self.get_remote_id(uri)) - def get_authors_from_data(self, data): return [] @@ -97,7 +108,7 @@ class Connector(AbstractConnector): return def get_cover_url(self, cover_blob, *_): - """ format the relative cover url into an absolute one: + """format the relative cover url into an absolute one: {"url": "/img/entities/e794783f01b9d4f897a1ea9820b96e00d346994f"} """ cover_id = cover_blob[0].get("url") @@ -106,14 +117,11 @@ class Connector(AbstractConnector): return "%s%s" % (self.covers_url, cover_id) -def get_claim(data, claim_key): - """ all the metadata is in a "claims" dict with a buncha wikidata keys """ - return data.get('claims', {}).get(claim_key) - def get_language(wikidata_key, *_): """ who here speaks "wd:Q150" """ return wikidata_key # TODO + def resolve_key(wikidata_key, *_): """ cool, it's "wd:Q3156592" now what the heck does that mean """ return wikidata_key # TODO From bfdcf611e7966ea54d051a313115c40cf35eb40b Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 6 Apr 2021 13:54:20 -0700 Subject: [PATCH 009/140] Adds inventaire identifier to book data fields --- .../migrations/0062_auto_20210406_1731.py | 20 +++++++++---- .../migrations/0063_auto_20210406_1738.py | 28 +++++++++++++++++++ 2 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 bookwyrm/migrations/0063_auto_20210406_1738.py diff --git a/bookwyrm/migrations/0062_auto_20210406_1731.py b/bookwyrm/migrations/0062_auto_20210406_1731.py index 9ff26af34..5db176ec1 100644 --- a/bookwyrm/migrations/0062_auto_20210406_1731.py +++ b/bookwyrm/migrations/0062_auto_20210406_1731.py @@ -6,17 +6,25 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('bookwyrm', '0061_auto_20210402_1435'), + ("bookwyrm", "0061_auto_20210402_1435"), ] operations = [ migrations.RemoveConstraint( - model_name='connector', - name='connector_file_valid', + model_name="connector", + name="connector_file_valid", ), migrations.AlterField( - model_name='connector', - name='connector_file', - field=models.CharField(choices=[('openlibrary', 'Openlibrary'), ('inventaire', 'Inventaire'), ('self_connector', 'Self Connector'), ('bookwyrm_connector', 'Bookwyrm Connector')], max_length=255), + model_name="connector", + name="connector_file", + field=models.CharField( + choices=[ + ("openlibrary", "Openlibrary"), + ("inventaire", "Inventaire"), + ("self_connector", "Self Connector"), + ("bookwyrm_connector", "Bookwyrm Connector"), + ], + max_length=255, + ), ), ] diff --git a/bookwyrm/migrations/0063_auto_20210406_1738.py b/bookwyrm/migrations/0063_auto_20210406_1738.py new file mode 100644 index 000000000..c9f07b3c5 --- /dev/null +++ b/bookwyrm/migrations/0063_auto_20210406_1738.py @@ -0,0 +1,28 @@ +# Generated by Django 3.1.6 on 2021-04-06 17:38 + +import bookwyrm.models.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0062_auto_20210406_1731"), + ] + + operations = [ + migrations.AddField( + model_name="author", + name="inventaire_id", + field=bookwyrm.models.fields.CharField( + blank=True, max_length=255, null=True + ), + ), + migrations.AddField( + model_name="book", + name="inventaire_id", + field=bookwyrm.models.fields.CharField( + blank=True, max_length=255, null=True + ), + ), + ] From 82c2f2eeb1b0d8a9fa1133c2bd1c626214dfa1d0 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 6 Apr 2021 17:46:06 -0700 Subject: [PATCH 010/140] Adds more author identifier fields --- bookwyrm/connectors/abstract_connector.py | 8 +-- bookwyrm/connectors/inventaire.py | 47 ++++++++++++------ bookwyrm/connectors/openlibrary.py | 10 ++-- .../migrations/0063_auto_20210406_1738.py | 28 ----------- .../migrations/0063_auto_20210407_0045.py | 49 +++++++++++++++++++ bookwyrm/models/author.py | 9 ++++ bookwyrm/models/book.py | 3 ++ 7 files changed, 103 insertions(+), 51 deletions(-) delete mode 100644 bookwyrm/migrations/0063_auto_20210406_1738.py create mode 100644 bookwyrm/migrations/0063_auto_20210407_0045.py diff --git a/bookwyrm/connectors/abstract_connector.py b/bookwyrm/connectors/abstract_connector.py index 8007bb1a4..f66cca7f0 100644 --- a/bookwyrm/connectors/abstract_connector.py +++ b/bookwyrm/connectors/abstract_connector.py @@ -150,11 +150,11 @@ class AbstractConnector(AbstractMinimalConnector): load_more_data.delay(self.connector.id, work.id) return edition - def get_book_data(self, remote_id): + def get_book_data(self, remote_id): # pylint: disable=no-self-use """ this allows connectors to override the default behavior """ return get_data(remote_id) - def get_search_data(self, remote_id): + def get_search_data(self, remote_id): # pylint: disable=no-self-use """ this allows connectors to override the default behavior """ return get_data(remote_id) @@ -293,7 +293,7 @@ class Mapping: """ associate a local database field with a field in an external dataset """ def __init__(self, local_field, remote_field=None, formatter=None): - noop = lambda x, *_: x + noop = lambda x: x self.local_field = local_field self.remote_field = remote_field or local_field @@ -305,6 +305,6 @@ class Mapping: if not value: return None try: - return self.formatter(value, self.remote_field) + return self.formatter(value) except: # pylint: disable=bare-except return None diff --git a/bookwyrm/connectors/inventaire.py b/bookwyrm/connectors/inventaire.py index 1ff834bf5..6eff65082 100644 --- a/bookwyrm/connectors/inventaire.py +++ b/bookwyrm/connectors/inventaire.py @@ -10,32 +10,45 @@ class Connector(AbstractConnector): def __init__(self, identifier): super().__init__(identifier) - get_first = lambda a, *args: a[0] - get_remote_id_list = lambda a, *_: [self.get_remote_id(v) for v in a] + get_first = lambda a: a[0] + shared_mappings = [ + Mapping("id", remote_field="uri", formatter=self.get_remote_id), + Mapping("bnfId", remote_field="wdt:P268", formatter=get_first), + Mapping("oclcNumber", remote_field="wdt:P5331", formatter=get_first), + Mapping("openlibraryKey", remote_field="wdt:P648", formatter=get_first), + ] self.book_mappings = [ Mapping("title", remote_field="wdt:P1476", formatter=get_first), Mapping("subtitle", remote_field="wdt:P1680", formatter=get_first), - Mapping("id", remote_field="uri", formatter=self.get_remote_id), - # Mapping("authors", remote_field="wdt:P50", formatter=get_remote_id_list), Mapping("inventaireId", remote_field="uri"), Mapping("cover", remote_field="image", formatter=self.get_cover_url), Mapping("isbn13", remote_field="wdt:P212", formatter=get_first), Mapping("isbn10", remote_field="wdt:P957", formatter=get_first), + Mapping("goodreadsKey", remote_field="wdt:P2969", formatter=get_first), + Mapping("librarythingKey", remote_field="wdt:P1085", formatter=get_first), # Mapping("languages", remote_field="wdt:P407", formatter=get_language), # Mapping("publishers", remote_field="wdt:P123", formatter=resolve_key), Mapping("publishedDate", remote_field="wdt:P577", formatter=get_first), Mapping("pages", remote_field="wdt:P1104", formatter=get_first), - Mapping("goodreadsKey", remote_field="wdt:P2969", formatter=get_first), - Mapping("openlibraryKey", remote_field="wdt:P648", formatter=get_first), # Mapping("subjectPlaces", remote_field="wdt:P840", formatter=resolve_key), # Mapping("subjects", remote_field="wdt:P921", formatter=resolve_key), - Mapping("librarythingKey", remote_field="wdt:P1085", formatter=get_first), - Mapping("oclcNumber", remote_field="wdt:P5331", formatter=get_first), Mapping("asin", remote_field="wdt:P5749", formatter=get_first), - ] - # TODO: P136: genre, P268 bnf id, P674 characters, P950 bne + ] + shared_mappings + # TODO: P136: genre, P674 characters, P950 bne - def get_remote_id(self, value, *_): + self.author_mappings = [ + Mapping("id", remote_field="uri", formatter=self.get_remote_id), + Mapping("name", remote_field="label", formatter=get_language_code), + Mapping("goodreadsKey", remote_field="wdt:P2963", formatter=get_first), + Mapping("isni", remote_field="wdt:P213", formatter=get_first), + Mapping("viafId", remote_field="wdt:P214", formatter=get_first), + Mapping("gutenberg_id", remote_field="wdt:P1938", formatter=get_first), + Mapping("born", remote_field="wdt:P569", formatter=get_first), + Mapping("died", remote_field="wdt:P570", formatter=get_first), + ] + shared_mappings + + + def get_remote_id(self, value): """ convert an id/uri into a url """ return "{:s}?action=by-uris&uris={:s}".format(self.books_url, value) @@ -102,7 +115,9 @@ class Connector(AbstractConnector): return self.get_book_data(self.get_remote_id(uri)) def get_authors_from_data(self, data): - return [] + authors = data.get("wdt:P50") + for author in authors: + yield self.get_or_create_author(self.get_remote_id(author)) def expand_book_data(self, book): return @@ -117,11 +132,15 @@ class Connector(AbstractConnector): return "%s%s" % (self.covers_url, cover_id) -def get_language(wikidata_key, *_): +def get_language(wikidata_key): """ who here speaks "wd:Q150" """ return wikidata_key # TODO -def resolve_key(wikidata_key, *_): +def resolve_key(wikidata_key): """ cool, it's "wd:Q3156592" now what the heck does that mean """ return wikidata_key # TODO + +def get_language_code(options, code="en"): + """ when there are a bunch of translation but we need a single field """ + return options.get(code) diff --git a/bookwyrm/connectors/openlibrary.py b/bookwyrm/connectors/openlibrary.py index 34357726c..466bf1e50 100644 --- a/bookwyrm/connectors/openlibrary.py +++ b/bookwyrm/connectors/openlibrary.py @@ -95,7 +95,7 @@ class Connector(AbstractConnector): url = "%s%s" % (self.base_url, author_id) yield self.get_or_create_author(url) - def get_cover_url(self, cover_blob, *_, size="L"): + def get_cover_url(self, cover_blob, size="L"): """ ask openlibrary for the cover """ if not cover_blob: return None @@ -181,19 +181,19 @@ def ignore_edition(edition_data): return True -def get_description(description_blob, *_): +def get_description(description_blob): """ descriptions can be a string or a dict """ if isinstance(description_blob, dict): return description_blob.get("value") return description_blob -def get_openlibrary_key(key, *_): +def get_openlibrary_key(key): """ convert /books/OL27320736M into OL27320736M """ return key.split("/")[-1] -def get_languages(language_blob, *_): +def get_languages(language_blob): """ /language/eng -> English """ langs = [] for lang in language_blob: @@ -201,7 +201,7 @@ def get_languages(language_blob, *_): return langs -def pick_default_edition(options, *_): +def pick_default_edition(options): """ favor physical copies with covers in english """ if not options: return None diff --git a/bookwyrm/migrations/0063_auto_20210406_1738.py b/bookwyrm/migrations/0063_auto_20210406_1738.py deleted file mode 100644 index c9f07b3c5..000000000 --- a/bookwyrm/migrations/0063_auto_20210406_1738.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 3.1.6 on 2021-04-06 17:38 - -import bookwyrm.models.fields -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ("bookwyrm", "0062_auto_20210406_1731"), - ] - - operations = [ - migrations.AddField( - model_name="author", - name="inventaire_id", - field=bookwyrm.models.fields.CharField( - blank=True, max_length=255, null=True - ), - ), - migrations.AddField( - model_name="book", - name="inventaire_id", - field=bookwyrm.models.fields.CharField( - blank=True, max_length=255, null=True - ), - ), - ] diff --git a/bookwyrm/migrations/0063_auto_20210407_0045.py b/bookwyrm/migrations/0063_auto_20210407_0045.py new file mode 100644 index 000000000..2543193be --- /dev/null +++ b/bookwyrm/migrations/0063_auto_20210407_0045.py @@ -0,0 +1,49 @@ +# Generated by Django 3.1.6 on 2021-04-07 00:45 + +import bookwyrm.models.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('bookwyrm', '0062_auto_20210406_1731'), + ] + + operations = [ + migrations.AddField( + model_name='author', + name='bnf_id', + field=bookwyrm.models.fields.CharField(blank=True, max_length=255, null=True), + ), + migrations.AddField( + model_name='author', + name='gutenberg_id', + field=bookwyrm.models.fields.CharField(blank=True, max_length=255, null=True), + ), + migrations.AddField( + model_name='author', + name='inventaire_id', + field=bookwyrm.models.fields.CharField(blank=True, max_length=255, null=True), + ), + migrations.AddField( + model_name='author', + name='isni', + field=bookwyrm.models.fields.CharField(blank=True, max_length=255, null=True), + ), + migrations.AddField( + model_name='author', + name='viaf_id', + field=bookwyrm.models.fields.CharField(blank=True, max_length=255, null=True), + ), + migrations.AddField( + model_name='book', + name='bnf_id', + field=bookwyrm.models.fields.CharField(blank=True, max_length=255, null=True), + ), + migrations.AddField( + model_name='book', + name='inventaire_id', + field=bookwyrm.models.fields.CharField(blank=True, max_length=255, null=True), + ), + ] diff --git a/bookwyrm/models/author.py b/bookwyrm/models/author.py index 4c5fe6c8f..f7740b1d4 100644 --- a/bookwyrm/models/author.py +++ b/bookwyrm/models/author.py @@ -14,6 +14,15 @@ class Author(BookDataModel): wikipedia_link = fields.CharField( max_length=255, blank=True, null=True, deduplication_field=True ) + isni = fields.CharField( + max_length=255, blank=True, null=True, deduplication_field=True + ) + viaf_id = fields.CharField( + max_length=255, blank=True, null=True, deduplication_field=True + ) + gutenberg_id = fields.CharField( + max_length=255, blank=True, null=True, deduplication_field=True + ) # idk probably other keys would be useful here? born = fields.DateTimeField(blank=True, null=True) died = fields.DateTimeField(blank=True, null=True) diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index ccbec9ebe..94bbe3307 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -28,6 +28,9 @@ class BookDataModel(ObjectMixin, BookWyrmModel): goodreads_key = fields.CharField( max_length=255, blank=True, null=True, deduplication_field=True ) + bnf_id = fields.CharField( # Bibliothèque nationale de France + max_length=255, blank=True, null=True, deduplication_field=True + ) last_edited_by = models.ForeignKey("User", on_delete=models.PROTECT, null=True) From 4112862924abedb0362649b4592405b99837371c Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 6 Apr 2021 18:00:54 -0700 Subject: [PATCH 011/140] Fixes search data and new activitypub fields --- bookwyrm/activitypub/book.py | 26 +++++++++++++---------- bookwyrm/connectors/abstract_connector.py | 8 +++---- bookwyrm/connectors/inventaire.py | 7 +++--- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/bookwyrm/activitypub/book.py b/bookwyrm/activitypub/book.py index 7a4279270..17e5b6863 100644 --- a/bookwyrm/activitypub/book.py +++ b/bookwyrm/activitypub/book.py @@ -7,7 +7,17 @@ from .image import Image @dataclass(init=False) -class Book(ActivityObject): +class BookData(ActivityObject): + """ shared fields for all book data and authors""" + openlibraryKey: str = None + inventaireId: str = None + librarythingKey: str = None + goodreadsKey: str = None + bnfId: str = None + + +@dataclass(init=False) +class Book(BookData): """ serializes an edition or work, abstract """ title: str @@ -24,11 +34,6 @@ class Book(ActivityObject): firstPublishedDate: str = "" publishedDate: str = "" - openlibraryKey: str = None - inventaireId: str = None - librarythingKey: str = None - goodreadsKey: str = None - cover: Image = None type: str = "Book" @@ -61,17 +66,16 @@ class Work(Book): @dataclass(init=False) -class Author(ActivityObject): +class Author(BookData): """ author of a book """ name: str + isni: str = None + viafId: str = None + gutenbergId: str = None born: str = None died: str = None aliases: List[str] = field(default_factory=lambda: []) bio: str = "" - openlibraryKey: str = None - inventaireId: str = None - librarythingKey: str = None - goodreadsKey: str = None wikipediaLink: str = "" type: str = "Author" diff --git a/bookwyrm/connectors/abstract_connector.py b/bookwyrm/connectors/abstract_connector.py index f66cca7f0..43cd6aadf 100644 --- a/bookwyrm/connectors/abstract_connector.py +++ b/bookwyrm/connectors/abstract_connector.py @@ -68,6 +68,10 @@ class AbstractMinimalConnector(ABC): results.append(self.format_isbn_search_result(doc)) return results + def get_search_data(self, remote_id, **kwargs): # pylint: disable=no-self-use + """ this allows connectors to override the default behavior """ + return get_data(remote_id, **kwargs) + @abstractmethod def get_or_create_book(self, remote_id): """ pull up a book record by whatever means possible """ @@ -154,10 +158,6 @@ class AbstractConnector(AbstractMinimalConnector): """ this allows connectors to override the default behavior """ return get_data(remote_id) - def get_search_data(self, remote_id): # pylint: disable=no-self-use - """ this allows connectors to override the default behavior """ - return get_data(remote_id) - def create_edition_from_data(self, work, edition_data): """ if we already have the work, we're ready """ mapped_data = dict_from_mappings(edition_data, self.book_mappings) diff --git a/bookwyrm/connectors/inventaire.py b/bookwyrm/connectors/inventaire.py index 6eff65082..a16bb0fdf 100644 --- a/bookwyrm/connectors/inventaire.py +++ b/bookwyrm/connectors/inventaire.py @@ -14,7 +14,6 @@ class Connector(AbstractConnector): shared_mappings = [ Mapping("id", remote_field="uri", formatter=self.get_remote_id), Mapping("bnfId", remote_field="wdt:P268", formatter=get_first), - Mapping("oclcNumber", remote_field="wdt:P5331", formatter=get_first), Mapping("openlibraryKey", remote_field="wdt:P648", formatter=get_first), ] self.book_mappings = [ @@ -24,6 +23,7 @@ class Connector(AbstractConnector): Mapping("cover", remote_field="image", formatter=self.get_cover_url), Mapping("isbn13", remote_field="wdt:P212", formatter=get_first), Mapping("isbn10", remote_field="wdt:P957", formatter=get_first), + Mapping("oclcNumber", remote_field="wdt:P5331", formatter=get_first), Mapping("goodreadsKey", remote_field="wdt:P2969", formatter=get_first), Mapping("librarythingKey", remote_field="wdt:P1085", formatter=get_first), # Mapping("languages", remote_field="wdt:P407", formatter=get_language), @@ -38,7 +38,7 @@ class Connector(AbstractConnector): self.author_mappings = [ Mapping("id", remote_field="uri", formatter=self.get_remote_id), - Mapping("name", remote_field="label", formatter=get_language_code), + Mapping("name", remote_field="labels", formatter=get_language_code), Mapping("goodreadsKey", remote_field="wdt:P2963", formatter=get_first), Mapping("isni", remote_field="wdt:P213", formatter=get_first), Mapping("viafId", remote_field="wdt:P214", formatter=get_first), @@ -62,8 +62,7 @@ class Connector(AbstractConnector): # flatten the data so that images, uri, and claims are on the same level return { **data.get("claims"), - "uri": data.get("uri"), - "image": data.get("image"), + **{k: data.get(k) for k in ["uri", "image", "labels"]}, } def parse_search_data(self, data): From f21aca1211a10b9efc66469c4bb8bad023bf7da0 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 6 Apr 2021 18:10:42 -0700 Subject: [PATCH 012/140] Load remote keys --- bookwyrm/connectors/inventaire.py | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/bookwyrm/connectors/inventaire.py b/bookwyrm/connectors/inventaire.py index a16bb0fdf..4be0dd5c4 100644 --- a/bookwyrm/connectors/inventaire.py +++ b/bookwyrm/connectors/inventaire.py @@ -26,12 +26,14 @@ class Connector(AbstractConnector): Mapping("oclcNumber", remote_field="wdt:P5331", formatter=get_first), Mapping("goodreadsKey", remote_field="wdt:P2969", formatter=get_first), Mapping("librarythingKey", remote_field="wdt:P1085", formatter=get_first), - # Mapping("languages", remote_field="wdt:P407", formatter=get_language), - # Mapping("publishers", remote_field="wdt:P123", formatter=resolve_key), + Mapping("languages", remote_field="wdt:P407", formatter=self.resolve_keys), + Mapping("publishers", remote_field="wdt:P123", formatter=self.resolve_keys), Mapping("publishedDate", remote_field="wdt:P577", formatter=get_first), Mapping("pages", remote_field="wdt:P1104", formatter=get_first), - # Mapping("subjectPlaces", remote_field="wdt:P840", formatter=resolve_key), - # Mapping("subjects", remote_field="wdt:P921", formatter=resolve_key), + Mapping( + "subjectPlaces", remote_field="wdt:P840", formatter=self.resolve_keys + ), + Mapping("subjects", remote_field="wdt:P921", formatter=self.resolve_keys), Mapping("asin", remote_field="wdt:P5749", formatter=get_first), ] + shared_mappings # TODO: P136: genre, P674 characters, P950 bne @@ -130,15 +132,17 @@ class Connector(AbstractConnector): return None return "%s%s" % (self.covers_url, cover_id) + def resolve_keys(self, keys): + """ cool, it's "wd:Q3156592" now what the heck does that mean """ + results = [] + for uri in keys: + try: + data = self.get_book_data(self.get_remote_id(uri)) + except ConnectorException: + continue + results.append(get_language_code(data.get("labels"))) + return results -def get_language(wikidata_key): - """ who here speaks "wd:Q150" """ - return wikidata_key # TODO - - -def resolve_key(wikidata_key): - """ cool, it's "wd:Q3156592" now what the heck does that mean """ - return wikidata_key # TODO def get_language_code(options, code="en"): """ when there are a bunch of translation but we need a single field """ From ac27111f0555fbd96ec95503d5434b05be53ee32 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 6 Apr 2021 18:13:33 -0700 Subject: [PATCH 013/140] Adds inventaire to default connector list --- bookwyrm/management/commands/initdb.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/bookwyrm/management/commands/initdb.py b/bookwyrm/management/commands/initdb.py index d6101c877..45c81089e 100644 --- a/bookwyrm/management/commands/initdb.py +++ b/bookwyrm/management/commands/initdb.py @@ -94,6 +94,18 @@ def init_connectors(): priority=2, ) + Connector.objects.create( + identifier="inventaire.io", + name="Inventaire", + connector_file="inventaire", + base_url="https://inventaire.io/entity/", + books_url="https://inventaire.io/api/entities", + covers_url="https://inventaire.io", + search_url="https://inventaire.io/api/search?types=works&types=works&search=", + isbn_search_url="https://inventaire.io/api/entities?action=by-uris&uris=isbn%3A", + priority=3, + ) + Connector.objects.create( identifier="openlibrary.org", name="OpenLibrary", From fec3d63e4623f7a47526d1648cd0232f1ef6c531 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 6 Apr 2021 18:17:33 -0700 Subject: [PATCH 014/140] Python formatting --- bookwyrm/activitypub/book.py | 1 + bookwyrm/connectors/inventaire.py | 1 - .../migrations/0063_auto_20210407_0045.py | 58 ++++++++++++------- 3 files changed, 37 insertions(+), 23 deletions(-) diff --git a/bookwyrm/activitypub/book.py b/bookwyrm/activitypub/book.py index 17e5b6863..ca4d69dac 100644 --- a/bookwyrm/activitypub/book.py +++ b/bookwyrm/activitypub/book.py @@ -9,6 +9,7 @@ from .image import Image @dataclass(init=False) class BookData(ActivityObject): """ shared fields for all book data and authors""" + openlibraryKey: str = None inventaireId: str = None librarythingKey: str = None diff --git a/bookwyrm/connectors/inventaire.py b/bookwyrm/connectors/inventaire.py index 4be0dd5c4..2a4569b3e 100644 --- a/bookwyrm/connectors/inventaire.py +++ b/bookwyrm/connectors/inventaire.py @@ -49,7 +49,6 @@ class Connector(AbstractConnector): Mapping("died", remote_field="wdt:P570", formatter=get_first), ] + shared_mappings - def get_remote_id(self, value): """ convert an id/uri into a url """ return "{:s}?action=by-uris&uris={:s}".format(self.books_url, value) diff --git a/bookwyrm/migrations/0063_auto_20210407_0045.py b/bookwyrm/migrations/0063_auto_20210407_0045.py index 2543193be..cd87dd97e 100644 --- a/bookwyrm/migrations/0063_auto_20210407_0045.py +++ b/bookwyrm/migrations/0063_auto_20210407_0045.py @@ -7,43 +7,57 @@ from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('bookwyrm', '0062_auto_20210406_1731'), + ("bookwyrm", "0062_auto_20210406_1731"), ] operations = [ migrations.AddField( - model_name='author', - name='bnf_id', - field=bookwyrm.models.fields.CharField(blank=True, max_length=255, null=True), + model_name="author", + name="bnf_id", + field=bookwyrm.models.fields.CharField( + blank=True, max_length=255, null=True + ), ), migrations.AddField( - model_name='author', - name='gutenberg_id', - field=bookwyrm.models.fields.CharField(blank=True, max_length=255, null=True), + model_name="author", + name="gutenberg_id", + field=bookwyrm.models.fields.CharField( + blank=True, max_length=255, null=True + ), ), migrations.AddField( - model_name='author', - name='inventaire_id', - field=bookwyrm.models.fields.CharField(blank=True, max_length=255, null=True), + model_name="author", + name="inventaire_id", + field=bookwyrm.models.fields.CharField( + blank=True, max_length=255, null=True + ), ), migrations.AddField( - model_name='author', - name='isni', - field=bookwyrm.models.fields.CharField(blank=True, max_length=255, null=True), + model_name="author", + name="isni", + field=bookwyrm.models.fields.CharField( + blank=True, max_length=255, null=True + ), ), migrations.AddField( - model_name='author', - name='viaf_id', - field=bookwyrm.models.fields.CharField(blank=True, max_length=255, null=True), + model_name="author", + name="viaf_id", + field=bookwyrm.models.fields.CharField( + blank=True, max_length=255, null=True + ), ), migrations.AddField( - model_name='book', - name='bnf_id', - field=bookwyrm.models.fields.CharField(blank=True, max_length=255, null=True), + model_name="book", + name="bnf_id", + field=bookwyrm.models.fields.CharField( + blank=True, max_length=255, null=True + ), ), migrations.AddField( - model_name='book', - name='inventaire_id', - field=bookwyrm.models.fields.CharField(blank=True, max_length=255, null=True), + model_name="book", + name="inventaire_id", + field=bookwyrm.models.fields.CharField( + blank=True, max_length=255, null=True + ), ), ] From 29e7659b76ec094f9bb3ff8659e97cdf01346080 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 6 Apr 2021 18:34:55 -0700 Subject: [PATCH 015/140] Expand inventaire book data --- bookwyrm/connectors/inventaire.py | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/bookwyrm/connectors/inventaire.py b/bookwyrm/connectors/inventaire.py index 2a4569b3e..465268b27 100644 --- a/bookwyrm/connectors/inventaire.py +++ b/bookwyrm/connectors/inventaire.py @@ -1,4 +1,5 @@ """ inventaire data connector """ +from bookwyrm import models from .abstract_connector import AbstractConnector, SearchResult, Mapping from .abstract_connector import get_data from .connector_manager import ConnectorException @@ -95,12 +96,15 @@ class Connector(AbstractConnector): def is_work_data(self, data): return data.get("type") == "work" - def get_edition_from_work_data(self, data): - value = data.get("uri") + def load_edition_data(self, work_uri): + """ get a list of editions for a work """ url = "{:s}?action=reverse-claims&property=P629&value={:s}".format( - self.books_url, value + self.books_url, work_uri ) - data = get_data(url) + return get_data(url) + + def get_edition_from_work_data(self, data): + data = self.load_edition_data(data.get("uri")) try: uri = data["uris"][0] except KeyError: @@ -120,7 +124,20 @@ class Connector(AbstractConnector): yield self.get_or_create_author(self.get_remote_id(author)) def expand_book_data(self, book): - return + work = book + # go from the edition to the work, if necessary + if isinstance(book, models.Edition): + work = book.parent_work + + try: + edition_options = self.load_edition_data(work.inventaire_id) + except ConnectorException: + # who knows, man + return + + for edition_uri in edition_options.get("uris"): + remote_id = self.get_remote_id(edition_uri) + self.get_or_create_book(remote_id) def get_cover_url(self, cover_blob, *_): """format the relative cover url into an absolute one: From 922428cab760ba324619eb64dd2a89bfe352d15c Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 6 Apr 2021 18:51:43 -0700 Subject: [PATCH 016/140] Fixes error in reverse path --- bookwyrm/connectors/inventaire.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bookwyrm/connectors/inventaire.py b/bookwyrm/connectors/inventaire.py index 465268b27..594fe8101 100644 --- a/bookwyrm/connectors/inventaire.py +++ b/bookwyrm/connectors/inventaire.py @@ -98,7 +98,7 @@ class Connector(AbstractConnector): def load_edition_data(self, work_uri): """ get a list of editions for a work """ - url = "{:s}?action=reverse-claims&property=P629&value={:s}".format( + url = "{:s}?action=reverse-claims&property=wdt:P629&value={:s}".format( self.books_url, work_uri ) return get_data(url) @@ -119,7 +119,7 @@ class Connector(AbstractConnector): return self.get_book_data(self.get_remote_id(uri)) def get_authors_from_data(self, data): - authors = data.get("wdt:P50") + authors = data.get("wdt:P50", []) for author in authors: yield self.get_or_create_author(self.get_remote_id(author)) From 7f0b3184a1e7c2482c302d907345ac0b098a6083 Mon Sep 17 00:00:00 2001 From: Fabien Basmaison Date: Sat, 24 Apr 2021 12:48:55 +0200 Subject: [PATCH 017/140] cover: Use book-cover as component: - Avoid specifying context-dependent values in CSS for components. Those values can be defined by the context calling the component. - Use `

` with optional caption. - Reduce redundant markup. - Allow more variables to be passed to the book-cover (image path and class for the container). - Hide the book cover to screen readers. --- bookwyrm/static/css/bookwyrm.css | 26 ++++----- bookwyrm/templates/discover/large-book.html | 47 ++++++++++----- bookwyrm/templates/discover/small-book.html | 24 ++++++-- bookwyrm/templates/snippets/book_cover.html | 63 ++++++++++++++------- 4 files changed, 105 insertions(+), 55 deletions(-) diff --git a/bookwyrm/static/css/bookwyrm.css b/bookwyrm/static/css/bookwyrm.css index b4abd6907..71947aea2 100644 --- a/bookwyrm/static/css/bookwyrm.css +++ b/bookwyrm/static/css/bookwyrm.css @@ -117,14 +117,14 @@ body { } /** Book covers + * + * The book cover takes the full width of its ancestor’s layout. ******************************************************************************/ - .cover-container { - height: 250px; - width: max-content; - max-width: 250px; + position: relative; } +/* .cover-container.is-large { height: max-content; max-width: 330px; @@ -153,26 +153,25 @@ body { height: 100px; } } +*/ .book-cover { - height: 100%; - object-fit: scale-down; + display: block; + width: 100%; + + /* Usweful when stretching under-sized images. */ + image-rendering: optimizeQuality; } -.no-cover { - position: relative; - white-space: normal; -} - -.no-cover div { +.no-cover .cover_caption { position: absolute; padding: 1em; color: white; top: 0; left: 0; - text-align: center; } +/* .cover-container.is-medium .no-cover div { font-size: 0.9em; padding: 0.3em; @@ -182,6 +181,7 @@ body { font-size: 0.7em; padding: 0.1em; } +*/ /** Avatars ******************************************************************************/ diff --git a/bookwyrm/templates/discover/large-book.html b/bookwyrm/templates/discover/large-book.html index 44b91b946..303d73183 100644 --- a/bookwyrm/templates/discover/large-book.html +++ b/bookwyrm/templates/discover/large-book.html @@ -1,19 +1,36 @@ + {% load bookwyrm_tags %} {% load i18n %} + {% if book %} -
-
- {% include 'snippets/book_cover.html' with book=book size="large" %} - {% include 'snippets/stars.html' with rating=book|rating:request.user %} -
-
-

{{ book.title }}

- {% if book.authors %} -

{% trans "by" %} {% include 'snippets/authors.html' with book=book %}

- {% endif %} - {% if book|book_description %} -
{{ book|book_description|to_markdown|safe|truncatewords_html:50 }}
- {% endif %} -
-
+ {% with book=book %} +
+
+ {% include 'snippets/book_cover.html' with size="large" %} + + {% include 'snippets/stars.html' with rating=book|rating:request.user %} +
+ +
+

+ {{ book.title }} +

+ + {% if book.authors %} +

+ {% trans "by" %} + {% include 'snippets/authors.html' %} +

+ {% endif %} + + {% if book|book_description %} +
+ {{ book|book_description|to_markdown|safe|truncatewords_html:50 }} +
+ {% endif %} +
+
+ {% endwith %} {% endif %} diff --git a/bookwyrm/templates/discover/small-book.html b/bookwyrm/templates/discover/small-book.html index 6df277466..f80a2690c 100644 --- a/bookwyrm/templates/discover/small-book.html +++ b/bookwyrm/templates/discover/small-book.html @@ -1,12 +1,24 @@ + {% load bookwyrm_tags %} {% load i18n %} + {% if book %} -{% include 'snippets/book_cover.html' with book=book %} -{% include 'snippets/stars.html' with rating=book|rating:request.user %} + {% with book=book %} + {% include 'snippets/book_cover.html' with size="small" %} -

{{ book.title }}

-{% if book.authors %} -

{% trans "by" %} {% include 'snippets/authors.html' with book=book %}

-{% endif %} + {% include 'snippets/stars.html' with rating=book|rating:request.user %} +

+ {{ book.title }} +

+ + {% if book.authors %} +

+ {% trans "by" %} + {% include 'snippets/authors.html' %} +

+ {% endif %} + {% endwith %} {% endif %} diff --git a/bookwyrm/templates/snippets/book_cover.html b/bookwyrm/templates/snippets/book_cover.html index ce47819e8..f26974d2d 100644 --- a/bookwyrm/templates/snippets/book_cover.html +++ b/bookwyrm/templates/snippets/book_cover.html @@ -3,27 +3,48 @@ {% load bookwyrm_tags %} {% load i18n %} -
- {% if book.cover %} - {{ book.alt_text }} - {% else %} -
- {% trans +
+
{% endspaceless %} From 9ea91d8e7c4b4a26d27c2023948e9240106a5b77 Mon Sep 17 00:00:00 2001 From: Fabien Basmaison Date: Sat, 24 Apr 2021 12:56:38 +0200 Subject: [PATCH 018/140] cover: Search layout: Reduce padding around covers. --- bookwyrm/templates/search_results.html | 2 +- .../snippets/search_result_text.html | 47 ++++++++++--------- 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/bookwyrm/templates/search_results.html b/bookwyrm/templates/search_results.html index 4c9c23dae..cb1fae391 100644 --- a/bookwyrm/templates/search_results.html +++ b/bookwyrm/templates/search_results.html @@ -49,7 +49,7 @@
    {% for result in result_set.results %} -
  • +
  • {% include 'snippets/search_result_text.html' with result=result remote_result=True %}
  • {% endfor %} diff --git a/bookwyrm/templates/snippets/search_result_text.html b/bookwyrm/templates/snippets/search_result_text.html index 059b8e7e8..e46dbbeb1 100644 --- a/bookwyrm/templates/snippets/search_result_text.html +++ b/bookwyrm/templates/snippets/search_result_text.html @@ -1,34 +1,39 @@ {% load i18n %} -
    -
    - {% if result.cover %} - - {% else %} -
    - -
    -

    {% trans "No cover" %}

    -
    -
    - {% endif %} -
    +
    + {% include 'snippets/book_cover.html' with book=result container_class='column' img_path=false %} -
    +

    - {{ result.title }} + {{ result.title }} + {% if result.author %} - {% blocktrans with author=result.author %}by {{ author }}{% endblocktrans %}{% endif %}{% if result.year %} ({{ result.year }}) + {% blocktrans with author=result.author %}by {{ author }}{% endblocktrans %} + {% endif %} + + {% if result.year %} + ({{ result.year }}) {% endif %}

    {% if remote_result %} -
    - {% csrf_token %} - - -
    +
    + {% csrf_token %} + + + + +
    {% endif %}
    From 75a69988e412f439e85229bbd3c4faa0487bee5d Mon Sep 17 00:00:00 2001 From: Fabien Basmaison Date: Sat, 24 Apr 2021 14:24:25 +0200 Subject: [PATCH 019/140] cover: List: - Reduce Padding around covers. - Remove `content` which is applying too extensive default styles. --- bookwyrm/templates/lists/list.html | 70 ++++++++++++++++++------------ 1 file changed, 42 insertions(+), 28 deletions(-) diff --git a/bookwyrm/templates/lists/list.html b/bookwyrm/templates/lists/list.html index a9f8e5c0e..f6c6f9f54 100644 --- a/bookwyrm/templates/lists/list.html +++ b/bookwyrm/templates/lists/list.html @@ -18,18 +18,29 @@ {% else %}
      {% for item in items %} -
    1. +
    2. -
      -
      - {% include 'snippets/book_cover.html' with book=item.book size="medium" %} + {% with book=item.book %} +
      + + +
      + {% include 'snippets/book_titleby.html' %} + {% include 'snippets/stars.html' with rating=item.book|rating:request.user %} + {% include 'snippets/shelve_button/shelve_button.html' %} +
      -
      - {% include 'snippets/book_titleby.html' with book=item.book %} - {% include 'snippets/stars.html' with rating=item.book|rating:request.user %} - {% include 'snippets/shelve_button/shelve_button.html' with book=item.book %} -
      -
      + {% endwith %} +
    3. {% endfor %} diff --git a/bookwyrm/templates/import_status.html b/bookwyrm/templates/import_status.html index c2985c12a..d85bb7fb7 100644 --- a/bookwyrm/templates/import_status.html +++ b/bookwyrm/templates/import_status.html @@ -125,7 +125,7 @@ {% if item.book %} - {% include 'snippets/book_cover.html' with book=item.book size='small' %} + {% include 'snippets/book_cover.html' with book=item.book cover_class='is-small' %} {% endif %} diff --git a/bookwyrm/templates/lists/curate.html b/bookwyrm/templates/lists/curate.html index 995ba161c..fa6a8fb92 100644 --- a/bookwyrm/templates/lists/curate.html +++ b/bookwyrm/templates/lists/curate.html @@ -32,7 +32,7 @@ href="{{ book.local_path }}" aria-hidden="true" > - {% include 'snippets/book_cover.html' with size="small" %} + {% include 'snippets/book_cover.html' with cover_class='is-small' %}
      diff --git a/bookwyrm/templates/lists/list_items.html b/bookwyrm/templates/lists/list_items.html index 3e3e8bf49..ddc2fff0b 100644 --- a/bookwyrm/templates/lists/list_items.html +++ b/bookwyrm/templates/lists/list_items.html @@ -8,11 +8,19 @@ {{ list.name }} {% include 'snippets/privacy-icons.html' with item=list %} -
      - {% for book in list.listitem_set.all|slice:5 %} - {% include 'snippets/book_cover.html' with book=book.book size="small" %} - {% endfor %} -
      + + {% with list_books=list.listitem_set.all|slice:5 %} + {% if list_books %} + + {% endif %} + {% endwith %} +
      {% if list.description %} diff --git a/bookwyrm/templates/lists/lists.html b/bookwyrm/templates/lists/lists.html index c7d789d0a..a7a548110 100644 --- a/bookwyrm/templates/lists/lists.html +++ b/bookwyrm/templates/lists/lists.html @@ -28,7 +28,7 @@
      {% if lists %} -
      +
      {% include 'lists/list_items.html' with lists=lists %}
      diff --git a/bookwyrm/templates/snippets/book_cover.html b/bookwyrm/templates/snippets/book_cover.html index b1166f7f2..b994343ea 100644 --- a/bookwyrm/templates/snippets/book_cover.html +++ b/bookwyrm/templates/snippets/book_cover.html @@ -9,21 +9,20 @@ is-clipped is-flex is-align-items-center + {{ cover_class }} {% if not book.cover %} no-cover {% endif %} - - {% if size %} - is-{{ size }} - {% endif %} - - {% if container_class %} - {{ container_class }} - {% endif %} " - aria-hidden="true" + {% if aria != "show" %} + aria-hidden="true" + {% endif %} + + {% if book.alt_text %} + title="{{ book.alt_text }}" + {% endif %} > {{ book.alt_text }} - {% include 'snippets/book_cover.html' with book=result container_class='column' img_path=false %} + {% include 'snippets/book_cover.html' with book=result cover_class='column' img_path=false %}

      diff --git a/bookwyrm/templates/snippets/status/generated_status.html b/bookwyrm/templates/snippets/status/generated_status.html index cb65a6f29..0b6730370 100644 --- a/bookwyrm/templates/snippets/status/generated_status.html +++ b/bookwyrm/templates/snippets/status/generated_status.html @@ -8,7 +8,7 @@

      diff --git a/bookwyrm/templates/user/shelf.html b/bookwyrm/templates/user/shelf.html index 0732327be..d9f264ea6 100644 --- a/bookwyrm/templates/user/shelf.html +++ b/bookwyrm/templates/user/shelf.html @@ -86,7 +86,7 @@ {% for book in books %} - {% include 'snippets/book_cover.html' with book=book size="small" %} + {% include 'snippets/book_cover.html' with book=book cover_class='is-small' %} {{ book.title }} diff --git a/bookwyrm/templates/user/user.html b/bookwyrm/templates/user/user.html index a54664cef..9b0c69914 100644 --- a/bookwyrm/templates/user/user.html +++ b/bookwyrm/templates/user/user.html @@ -36,7 +36,7 @@ {% for book in shelf.books %} {% endfor %} From cf5a4ebe90573dc54af185f11469256e92f08f04 Mon Sep 17 00:00:00 2001 From: Fabien Basmaison Date: Sat, 24 Apr 2021 21:18:48 +0200 Subject: [PATCH 022/140] Fix typo: Addresses https://github.com/bookwyrm-social/bookwyrm/pull/994#discussion_r619688900. --- bookwyrm/static/css/bookwyrm.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/static/css/bookwyrm.css b/bookwyrm/static/css/bookwyrm.css index 5ef6e61a8..27f4521da 100644 --- a/bookwyrm/static/css/bookwyrm.css +++ b/bookwyrm/static/css/bookwyrm.css @@ -159,7 +159,7 @@ body { display: block; width: 100%; - /* Usweful when stretching under-sized images. */ + /* Useful when stretching under-sized images. */ image-rendering: optimizeQuality; } From 953dff90bb7c2aefda2d1a0f181f8123ddf0b3b2 Mon Sep 17 00:00:00 2001 From: Fabien Basmaison Date: Sun, 25 Apr 2021 15:37:46 +0200 Subject: [PATCH 023/140] cover: tweak styles: - `optimizeQuality` > `smooth` (CSS language evolution) - Use `auto` instead of a fixed width. - Add exceptions for heights and apply them to some previously modified templates. - Remove `is-large` exception. - Widen the content column on list curation. --- bookwyrm/static/css/bookwyrm.css | 88 ++++++++----------- bookwyrm/templates/book/book.html | 7 +- bookwyrm/templates/book/edit_book.html | 2 +- bookwyrm/templates/book/editions.html | 2 +- bookwyrm/templates/discover/large-book.html | 2 +- bookwyrm/templates/discover/small-book.html | 2 +- bookwyrm/templates/feed/feed_layout.html | 2 +- bookwyrm/templates/import_status.html | 2 +- bookwyrm/templates/lists/curate.html | 4 +- bookwyrm/templates/lists/list_items.html | 4 +- bookwyrm/templates/snippets/book_cover.html | 3 - .../snippets/status/generated_status.html | 2 +- bookwyrm/templates/user/shelf.html | 2 +- bookwyrm/templates/user/user.html | 2 +- 14 files changed, 55 insertions(+), 69 deletions(-) diff --git a/bookwyrm/static/css/bookwyrm.css b/bookwyrm/static/css/bookwyrm.css index 281bc7eda..a1e55ce90 100644 --- a/bookwyrm/static/css/bookwyrm.css +++ b/bookwyrm/static/css/bookwyrm.css @@ -98,7 +98,7 @@ body { * * \e9d9: filled star * \e9d7: empty star; - ******************************************************************************/ + * -------------------------------------------------------------------------- */ .form-rate-stars { width: max-content; @@ -125,76 +125,45 @@ body { /** Book covers * - * The book cover takes the full width of its ancestor’s layout. + * - take the full width of their ancestor’s layout. + * - take whatever height they need. + * + * When assigning a height, add the `has-height` class. ******************************************************************************/ .cover-container { position: relative; + overflow: hidden; } -.cover-container.is-small { - height: 100px; -} - -.cover-container.is-medium { - height: 150px; -} - -/* -.cover-container.is-large { - height: max-content; - max-width: 330px; -} - -.cover-container.is-large img { - max-height: 500px; - height: auto; -} - -@media only screen and (max-width: 768px) { - .cover-container { - height: 200px; - width: max-content; - } - - .cover-container.is-medium { - height: 100px; - } -} -*/ - +/* Book cover + -------------------------------------------------------------------------- */ .book-cover { display: block; - width: 100%; + width: auto; /* Useful when stretching under-sized images. */ image-rendering: optimizeQuality; + image-rendering: smooth; } +/* `height: inherit` makes sure the height computed is not approximative, + without specifying a fixed height. */ [class~="has-height"] .book-cover { - width: auto; - height: 100%; + height: inherit; + max-height: 100%; } +/* Cover caption + -------------------------------------------------------------------------- */ .no-cover .cover_caption { position: absolute; - padding: 1em; + padding: .25em; color: white; top: 0; left: 0; + font-size: 0.75em; } -/* -.cover-container.is-medium .no-cover div { - font-size: 0.9em; - padding: 0.3em; -} - -.cover-container.is-small .no-cover div { - font-size: 0.7em; - padding: 0.1em; -} -*/ - /** Avatars ******************************************************************************/ @@ -267,3 +236,24 @@ body { opacity: 0.5; cursor: not-allowed; } + +/* Dimensions + ******************************************************************************/ + +.is-h-small { + height: 100px !important; +} + +.is-h-medium { + height: 150px !important; +} + +@media only screen and (max-width: 768px) { + .is-h-small-mobile { + height: 100px !important; + } + + .is-h-medium-mobile { + height: 150px; + } +} diff --git a/bookwyrm/templates/book/book.html b/bookwyrm/templates/book/book.html index 288506735..34558f8de 100644 --- a/bookwyrm/templates/book/book.html +++ b/bookwyrm/templates/book/book.html @@ -48,10 +48,9 @@
      -
      - {% include 'snippets/book_cover.html' with book=book cover_class='is-large' %} - {% include 'snippets/rate_action.html' with user=request.user book=book %} -
      + {% include 'snippets/book_cover.html' with book=book cover_class='has-height is-h-medium-mobile' %} + {% include 'snippets/rate_action.html' with user=request.user book=book %} +
      {% include 'snippets/shelve_button/shelve_button.html' %}
      diff --git a/bookwyrm/templates/book/edit_book.html b/bookwyrm/templates/book/edit_book.html index 7f8644b4f..0cb1a9b12 100644 --- a/bookwyrm/templates/book/edit_book.html +++ b/bookwyrm/templates/book/edit_book.html @@ -170,7 +170,7 @@

      {% trans "Cover" %}

      - {% include 'snippets/book_cover.html' with book=book cover_class='is-small' %} + {% include 'snippets/book_cover.html' with book=book cover_class='is-h-small' %}
      diff --git a/bookwyrm/templates/book/editions.html b/bookwyrm/templates/book/editions.html index 4ec39218d..3eb66eae2 100644 --- a/bookwyrm/templates/book/editions.html +++ b/bookwyrm/templates/book/editions.html @@ -16,7 +16,7 @@
      diff --git a/bookwyrm/templates/discover/large-book.html b/bookwyrm/templates/discover/large-book.html index 408e20c0d..c7b39ebbe 100644 --- a/bookwyrm/templates/discover/large-book.html +++ b/bookwyrm/templates/discover/large-book.html @@ -8,7 +8,7 @@
      {% include 'snippets/book_cover.html' with cover_class='is-large' %} + >{% include 'snippets/book_cover.html' %} {% include 'snippets/stars.html' with rating=book|rating:request.user %}
      diff --git a/bookwyrm/templates/discover/small-book.html b/bookwyrm/templates/discover/small-book.html index 048e5a715..c1f5f1654 100644 --- a/bookwyrm/templates/discover/small-book.html +++ b/bookwyrm/templates/discover/small-book.html @@ -6,7 +6,7 @@ {% with book=book %} {% include 'snippets/book_cover.html' with cover_class='is-small' %} + >{% include 'snippets/book_cover.html' with cover_class='is-h-small' %} {% include 'snippets/stars.html' with rating=book|rating:request.user %} diff --git a/bookwyrm/templates/feed/feed_layout.html b/bookwyrm/templates/feed/feed_layout.html index 15e84a592..669c2aaa0 100644 --- a/bookwyrm/templates/feed/feed_layout.html +++ b/bookwyrm/templates/feed/feed_layout.html @@ -37,7 +37,7 @@ aria-label="{{ book.title }}" aria-selected="{% if active_book == book.id|stringformat:'d' %}true{% elif shelf_counter == 1 and forloop.first %}true{% else %}false{% endif %}" aria-controls="book-{{ book.id }}"> - {% include 'snippets/book_cover.html' with book=book cover_class='is-medium' %} + {% include 'snippets/book_cover.html' with book=book cover_class='is-h-medium' %} {% endfor %} diff --git a/bookwyrm/templates/import_status.html b/bookwyrm/templates/import_status.html index d85bb7fb7..05c811d23 100644 --- a/bookwyrm/templates/import_status.html +++ b/bookwyrm/templates/import_status.html @@ -125,7 +125,7 @@ {% if item.book %} - {% include 'snippets/book_cover.html' with book=item.book cover_class='is-small' %} + {% include 'snippets/book_cover.html' with book=item.book cover_class='is-h-small' %} {% endif %} diff --git a/bookwyrm/templates/lists/curate.html b/bookwyrm/templates/lists/curate.html index fa6a8fb92..529f51c30 100644 --- a/bookwyrm/templates/lists/curate.html +++ b/bookwyrm/templates/lists/curate.html @@ -32,10 +32,10 @@ href="{{ book.local_path }}" aria-hidden="true" > - {% include 'snippets/book_cover.html' with cover_class='is-small' %} + {% include 'snippets/book_cover.html' %} -
      +
      {% include 'snippets/book_titleby.html' %}
      diff --git a/bookwyrm/templates/lists/list_items.html b/bookwyrm/templates/lists/list_items.html index ddc2fff0b..db6b6d606 100644 --- a/bookwyrm/templates/lists/list_items.html +++ b/bookwyrm/templates/lists/list_items.html @@ -11,10 +11,10 @@ {% with list_books=list.listitem_set.all|slice:5 %} {% if list_books %} -
      + diff --git a/bookwyrm/templates/snippets/book_cover.html b/bookwyrm/templates/snippets/book_cover.html index b994343ea..8967ff570 100644 --- a/bookwyrm/templates/snippets/book_cover.html +++ b/bookwyrm/templates/snippets/book_cover.html @@ -6,9 +6,6 @@
      diff --git a/bookwyrm/templates/user/shelf.html b/bookwyrm/templates/user/shelf.html index d9f264ea6..39498a43c 100644 --- a/bookwyrm/templates/user/shelf.html +++ b/bookwyrm/templates/user/shelf.html @@ -86,7 +86,7 @@ {% for book in books %} - {% include 'snippets/book_cover.html' with book=book cover_class='is-small' %} + {% include 'snippets/book_cover.html' with book=book cover_class='is-h-small' %} {{ book.title }} diff --git a/bookwyrm/templates/user/user.html b/bookwyrm/templates/user/user.html index 9b0c69914..80dac2139 100644 --- a/bookwyrm/templates/user/user.html +++ b/bookwyrm/templates/user/user.html @@ -36,7 +36,7 @@ {% for book in shelf.books %} {% endfor %} From a268f339c0740b7c302eded6f3814f7b84faf4e1 Mon Sep 17 00:00:00 2001 From: Fabien Basmaison Date: Sun, 25 Apr 2021 15:45:49 +0200 Subject: [PATCH 024/140] Fix linting issues. --- bookwyrm/static/css/bookwyrm.css | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bookwyrm/static/css/bookwyrm.css b/bookwyrm/static/css/bookwyrm.css index a1e55ce90..9488f0d7c 100644 --- a/bookwyrm/static/css/bookwyrm.css +++ b/bookwyrm/static/css/bookwyrm.css @@ -136,7 +136,7 @@ body { } /* Book cover - -------------------------------------------------------------------------- */ + * -------------------------------------------------------------------------- */ .book-cover { display: block; width: auto; @@ -154,10 +154,10 @@ body { } /* Cover caption - -------------------------------------------------------------------------- */ + * -------------------------------------------------------------------------- */ .no-cover .cover_caption { position: absolute; - padding: .25em; + padding: 0.25em; color: white; top: 0; left: 0; From 26cacf502c45315c3045abc82da59dd8991b1d12 Mon Sep 17 00:00:00 2001 From: Fabien Basmaison Date: Mon, 26 Apr 2021 13:39:17 +0200 Subject: [PATCH 025/140] Rationalise behaviours of context, container and cover: - Set minimum dimensions to avoid having to pass classes all over the place. - Outline the container to show white on white covers properly. - Remove extraneous code. - Better size caption when no cover is available. - Create Alignments, Positions and Spacings sections and move some existing dimensions. - Update previous templates. --- bookwyrm/static/css/bookwyrm.css | 99 +++++++++++++++++------- bookwyrm/templates/book/book.html | 2 +- bookwyrm/templates/book/editions.html | 20 ++--- bookwyrm/templates/lists/list_items.html | 2 +- 4 files changed, 83 insertions(+), 40 deletions(-) diff --git a/bookwyrm/static/css/bookwyrm.css b/bookwyrm/static/css/bookwyrm.css index 3841aac8c..8f95cfeba 100644 --- a/bookwyrm/static/css/bookwyrm.css +++ b/bookwyrm/static/css/bookwyrm.css @@ -159,43 +159,47 @@ body { /** Book covers * - * - take the full width of their ancestor’s layout. - * - take whatever height they need. - * - * When assigning a height, add the `has-height` class. + * - The context gives the extrinsic dimensions. + * - .cover-container gives the intrinsic dimensions and position. + * - .book-cover is positioned and sized based on its container. ******************************************************************************/ + .cover-container { + display: flex; position: relative; overflow: hidden; + min-width: 80px; + min-height: 100px; + max-width: max-content; + outline: solid 1px #dbdbdb; } /* Book cover * -------------------------------------------------------------------------- */ + .book-cover { display: block; - width: auto; + max-width: 100%; + max-height: 100%; /* Useful when stretching under-sized images. */ image-rendering: optimizeQuality; image-rendering: smooth; } -/* `height: inherit` makes sure the height computed is not approximative, - without specifying a fixed height. */ -[class~="has-height"] .book-cover { - height: inherit; - max-height: 100%; -} - /* Cover caption * -------------------------------------------------------------------------- */ + .no-cover .cover_caption { position: absolute; - padding: 0.25em; - color: white; top: 0; + right: 0; + bottom: 0; left: 0; + padding: 0.25em; font-size: 0.75em; + color: white; + background-color: #002549; } /** Avatars @@ -206,16 +210,6 @@ body { display: inline; } -.is-32x32 { - min-width: 32px; - min-height: 32px; -} - -.is-96x96 { - min-width: 96px; - min-height: 96px; -} - /** Statuses: Quotes * * \e906: icon-quote-open @@ -274,6 +268,16 @@ body { /* Dimensions ******************************************************************************/ +.is-32x32 { + min-width: 32px !important; + min-height: 32px !important; +} + +.is-96x96 { + min-width: 96px !important; + min-height: 96px !important; +} + .is-h-small { height: 100px !important; } @@ -283,15 +287,54 @@ body { } @media only screen and (max-width: 768px) { - .is-h-small-mobile { - height: 100px !important; - } - .is-h-medium-mobile { height: 150px; } } +.is-min-w-none { + min-width: auto !important; +} + +/* Alignments + ******************************************************************************/ + +/* Flex item position + * + * This is for a default `flex-direction: row`. + * -------------------------------------------------------------------------- */ + +.align-r { + justify-content: flex-end; +} + +@media screen and (min-width: 769px) { + .align-r-tablet { + justify-content: flex-end; + } +} + +/* Spacings + ******************************************************************************/ + +@media screen and (max-width: 768px) { + .my-3-mobile { + margin-top: 0.75rem !important; + margin-bottom: 0.75rem !important; + } +} + +@media screen and (min-width: 769px) { + .ml-3-tablet { + margin-left: 0.75rem !important; + } + + .mx-3-tablet { + margin-right: 0.75rem !important; + margin-left: 0.75rem !important; + } +} + /* Book preview table ******************************************************************************/ diff --git a/bookwyrm/templates/book/book.html b/bookwyrm/templates/book/book.html index 8ab613216..23f7dac06 100644 --- a/bookwyrm/templates/book/book.html +++ b/bookwyrm/templates/book/book.html @@ -48,7 +48,7 @@
      - {% include 'snippets/book_cover.html' with book=book cover_class='has-height is-h-medium-mobile' %} + {% include 'snippets/book_cover.html' with book=book cover_class='is-h-medium-mobile' %} {% include 'snippets/rate_action.html' with user=request.user book=book %}
      diff --git a/bookwyrm/templates/book/editions.html b/bookwyrm/templates/book/editions.html index 3eb66eae2..009bdd663 100644 --- a/bookwyrm/templates/book/editions.html +++ b/bookwyrm/templates/book/editions.html @@ -13,32 +13,32 @@
      {% for book in editions %} -
      -
      - - {% include 'snippets/book_cover.html' with book=book cover_class='is-h-medium' %} - +
      +
      + {% include 'snippets/book_cover.html' with book=book cover_class='is-h-medium' %}
      -
      -

      + +
      +

      {{ book.title }}

      {% with book=book %} -
      +
      {% include 'book/publisher_info.html' %}
      -
      +
      {% include 'book/book_identifiers.html' %}
      {% endwith %}
      -
      + +
      {% include 'snippets/shelve_button/shelve_button.html' with book=book switch_mode=True %}
      diff --git a/bookwyrm/templates/lists/list_items.html b/bookwyrm/templates/lists/list_items.html index db6b6d606..f1a4938e0 100644 --- a/bookwyrm/templates/lists/list_items.html +++ b/bookwyrm/templates/lists/list_items.html @@ -14,7 +14,7 @@ From b089f6c86a8697d542b32df657bd3258076078d8 Mon Sep 17 00:00:00 2001 From: Fabien Basmaison Date: Mon, 26 Apr 2021 15:20:48 +0200 Subject: [PATCH 026/140] Update Bulma from v0.9.1 to v0.9.2. --- bookwyrm/static/css/vendor/bulma.min.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/static/css/vendor/bulma.min.css b/bookwyrm/static/css/vendor/bulma.min.css index a807a314c..ed54b7b30 100644 --- a/bookwyrm/static/css/vendor/bulma.min.css +++ b/bookwyrm/static/css/vendor/bulma.min.css @@ -1 +1 @@ -/*! bulma.io v0.9.1 | MIT License | github.com/jgthms/bulma */@-webkit-keyframes spinAround{from{transform:rotate(0)}to{transform:rotate(359deg)}}@keyframes spinAround{from{transform:rotate(0)}to{transform:rotate(359deg)}}.breadcrumb,.button,.delete,.file,.is-unselectable,.modal-close,.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous,.tabs{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid transparent;border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:.625em;margin-top:-.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:.625em}.block:not(:last-child),.box:not(:last-child),.breadcrumb:not(:last-child),.content:not(:last-child),.highlight:not(:last-child),.level:not(:last-child),.message:not(:last-child),.notification:not(:last-child),.pagination:not(:last-child),.progress:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.tabs:not(:last-child),.title:not(:last-child){margin-bottom:1.5rem}.delete,.modal-close{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,.2);border:none;border-radius:290486px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:0;position:relative;vertical-align:top;width:20px}.delete::after,.delete::before,.modal-close::after,.modal-close::before{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.delete::before,.modal-close::before{height:2px;width:50%}.delete::after,.modal-close::after{height:50%;width:2px}.delete:focus,.delete:hover,.modal-close:focus,.modal-close:hover{background-color:rgba(10,10,10,.3)}.delete:active,.modal-close:active{background-color:rgba(10,10,10,.4)}.is-small.delete,.is-small.modal-close{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.delete,.is-medium.modal-close{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.delete,.is-large.modal-close{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.button.is-loading::after,.control.is-loading::after,.loader,.select.is-loading::after{-webkit-animation:spinAround .5s infinite linear;animation:spinAround .5s infinite linear;border:2px solid #dbdbdb;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.image.is-16by9 .has-ratio,.image.is-16by9 img,.image.is-1by1 .has-ratio,.image.is-1by1 img,.image.is-1by2 .has-ratio,.image.is-1by2 img,.image.is-1by3 .has-ratio,.image.is-1by3 img,.image.is-2by1 .has-ratio,.image.is-2by1 img,.image.is-2by3 .has-ratio,.image.is-2by3 img,.image.is-3by1 .has-ratio,.image.is-3by1 img,.image.is-3by2 .has-ratio,.image.is-3by2 img,.image.is-3by4 .has-ratio,.image.is-3by4 img,.image.is-3by5 .has-ratio,.image.is-3by5 img,.image.is-4by3 .has-ratio,.image.is-4by3 img,.image.is-4by5 .has-ratio,.image.is-4by5 img,.image.is-5by3 .has-ratio,.image.is-5by3 img,.image.is-5by4 .has-ratio,.image.is-5by4 img,.image.is-9by16 .has-ratio,.image.is-9by16 img,.image.is-square .has-ratio,.image.is-square img,.is-overlay,.modal,.modal-background{bottom:0;left:0;position:absolute;right:0;top:0}.button,.file-cta,.file-name,.input,.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous,.select select,.textarea{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(.5em - 1px);padding-left:calc(.75em - 1px);padding-right:calc(.75em - 1px);padding-top:calc(.5em - 1px);position:relative;vertical-align:top}.button:active,.button:focus,.file-cta:active,.file-cta:focus,.file-name:active,.file-name:focus,.input:active,.input:focus,.is-active.button,.is-active.file-cta,.is-active.file-name,.is-active.input,.is-active.pagination-ellipsis,.is-active.pagination-link,.is-active.pagination-next,.is-active.pagination-previous,.is-active.textarea,.is-focused.button,.is-focused.file-cta,.is-focused.file-name,.is-focused.input,.is-focused.pagination-ellipsis,.is-focused.pagination-link,.is-focused.pagination-next,.is-focused.pagination-previous,.is-focused.textarea,.pagination-ellipsis:active,.pagination-ellipsis:focus,.pagination-link:active,.pagination-link:focus,.pagination-next:active,.pagination-next:focus,.pagination-previous:active,.pagination-previous:focus,.select select.is-active,.select select.is-focused,.select select:active,.select select:focus,.textarea:active,.textarea:focus{outline:0}.button[disabled],.file-cta[disabled],.file-name[disabled],.input[disabled],.pagination-ellipsis[disabled],.pagination-link[disabled],.pagination-next[disabled],.pagination-previous[disabled],.select fieldset[disabled] select,.select select[disabled],.textarea[disabled],fieldset[disabled] .button,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .input,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-previous,fieldset[disabled] .select select,fieldset[disabled] .textarea{cursor:not-allowed}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */blockquote,body,dd,dl,dt,fieldset,figure,h1,h2,h3,h4,h5,h6,hr,html,iframe,legend,li,ol,p,pre,textarea,ul{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,::after,::before{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}html{background-color:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:hidden;overflow-y:scroll;text-rendering:optimizeLegibility;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,optgroup,select,textarea{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:monospace}body{color:#4a4a4a;font-size:1em;font-weight:400;line-height:1.5}a{color:#3273dc;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:#f5f5f5;color:#da1039;font-size:.875em;font-weight:400;padding:.25em .5em .25em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type=checkbox],input[type=radio]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#363636;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#4a4a4a;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:inherit}table th{color:#363636}.box{background-color:#fff;border-radius:6px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);color:#4a4a4a;display:block;padding:1.25rem}a.box:focus,a.box:hover{box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px #3273dc}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,.2),0 0 0 1px #3273dc}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#363636;cursor:pointer;justify-content:center;padding-bottom:calc(.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-large,.button .icon.is-medium,.button .icon.is-small{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-.5em - 1px);margin-right:calc(-.5em - 1px)}.button.is-hovered,.button:hover{border-color:#b5b5b5;color:#363636}.button.is-focused,.button:focus{border-color:#3273dc;color:#363636}.button.is-focused:not(:active),.button:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.button.is-active,.button:active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#4a4a4a;text-decoration:underline}.button.is-text.is-focused,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text:hover{background-color:#f5f5f5;color:#363636}.button.is-text.is-active,.button.is-text:active{background-color:#e8e8e8;color:#363636}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white.is-hovered,.button.is-white:hover{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white.is-focused,.button.is-white:focus{border-color:transparent;color:#0a0a0a}.button.is-white.is-focused:not(:active),.button.is-white:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.button.is-white.is-active,.button.is-white:active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:transparent;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-hovered,.button.is-white.is-inverted:hover{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined.is-focused,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-white.is-outlined.is-loading.is-focused::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading:hover::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined.is-focused,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined:hover{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black.is-hovered,.button.is-black:hover{background-color:#040404;border-color:transparent;color:#fff}.button.is-black.is-focused,.button.is-black:focus{border-color:transparent;color:#fff}.button.is-black.is-focused:not(:active),.button.is-black:focus:not(:active){box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.button.is-black.is-active,.button.is-black:active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-hovered,.button.is-black.is-inverted:hover{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined.is-focused,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-black.is-outlined.is-loading.is-focused::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined.is-focused,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined:hover{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-hovered,.button.is-light:hover{background-color:#eee;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-focused,.button.is-light:focus{border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-focused:not(:active),.button.is-light:focus:not(:active){box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.button.is-light.is-active,.button.is-light:active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:transparent;box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,.7);color:#f5f5f5}.button.is-light.is-inverted.is-hovered,.button.is-light.is-inverted:hover{background-color:rgba(0,0,0,.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,0,0,.7);border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined.is-focused,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined:hover{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,.7)}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5!important}.button.is-light.is-outlined.is-loading.is-focused::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading:hover::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);color:rgba(0,0,0,.7)}.button.is-light.is-inverted.is-outlined.is-focused,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined:hover{background-color:rgba(0,0,0,.7);color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #f5f5f5 #f5f5f5!important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);box-shadow:none;color:rgba(0,0,0,.7)}.button.is-dark{background-color:#363636;border-color:transparent;color:#fff}.button.is-dark.is-hovered,.button.is-dark:hover{background-color:#2f2f2f;border-color:transparent;color:#fff}.button.is-dark.is-focused,.button.is-dark:focus{border-color:transparent;color:#fff}.button.is-dark.is-focused:not(:active),.button.is-dark:focus:not(:active){box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.button.is-dark.is-active,.button.is-dark:active{background-color:#292929;border-color:transparent;color:#fff}.button.is-dark[disabled],fieldset[disabled] .button.is-dark{background-color:#363636;border-color:transparent;box-shadow:none}.button.is-dark.is-inverted{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-hovered,.button.is-dark.is-inverted:hover{background-color:#f2f2f2}.button.is-dark.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-dark.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined.is-focused,.button.is-dark.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.button.is-dark.is-outlined:hover{background-color:#363636;border-color:#363636;color:#fff}.button.is-dark.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636!important}.button.is-dark.is-outlined.is-loading.is-focused::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-dark.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-dark.is-inverted.is-outlined.is-focused,.button.is-dark.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined:hover{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #363636 #363636!important}.button.is-dark.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary{background-color:#00d1b2;border-color:transparent;color:#fff}.button.is-primary.is-hovered,.button.is-primary:hover{background-color:#00c4a7;border-color:transparent;color:#fff}.button.is-primary.is-focused,.button.is-primary:focus{border-color:transparent;color:#fff}.button.is-primary.is-focused:not(:active),.button.is-primary:focus:not(:active){box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.button.is-primary.is-active,.button.is-primary:active{background-color:#00b89c;border-color:transparent;color:#fff}.button.is-primary[disabled],fieldset[disabled] .button.is-primary{background-color:#00d1b2;border-color:transparent;box-shadow:none}.button.is-primary.is-inverted{background-color:#fff;color:#00d1b2}.button.is-primary.is-inverted.is-hovered,.button.is-primary.is-inverted:hover{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],fieldset[disabled] .button.is-primary.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#00d1b2}.button.is-primary.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-primary.is-outlined{background-color:transparent;border-color:#00d1b2;color:#00d1b2}.button.is-primary.is-outlined.is-focused,.button.is-primary.is-outlined.is-hovered,.button.is-primary.is-outlined:focus,.button.is-primary.is-outlined:hover{background-color:#00d1b2;border-color:#00d1b2;color:#fff}.button.is-primary.is-outlined.is-loading::after{border-color:transparent transparent #00d1b2 #00d1b2!important}.button.is-primary.is-outlined.is-loading.is-focused::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.button.is-primary.is-outlined.is-loading:focus::after,.button.is-primary.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-primary.is-outlined[disabled],fieldset[disabled] .button.is-primary.is-outlined{background-color:transparent;border-color:#00d1b2;box-shadow:none;color:#00d1b2}.button.is-primary.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined.is-focused,.button.is-primary.is-inverted.is-outlined.is-hovered,.button.is-primary.is-inverted.is-outlined:focus,.button.is-primary.is-inverted.is-outlined:hover{background-color:#fff;color:#00d1b2}.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #00d1b2 #00d1b2!important}.button.is-primary.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary.is-light{background-color:#ebfffc;color:#00947e}.button.is-primary.is-light.is-hovered,.button.is-primary.is-light:hover{background-color:#defffa;border-color:transparent;color:#00947e}.button.is-primary.is-light.is-active,.button.is-primary.is-light:active{background-color:#d1fff8;border-color:transparent;color:#00947e}.button.is-link{background-color:#3273dc;border-color:transparent;color:#fff}.button.is-link.is-hovered,.button.is-link:hover{background-color:#276cda;border-color:transparent;color:#fff}.button.is-link.is-focused,.button.is-link:focus{border-color:transparent;color:#fff}.button.is-link.is-focused:not(:active),.button.is-link:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.button.is-link.is-active,.button.is-link:active{background-color:#2366d1;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#3273dc;border-color:transparent;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#3273dc}.button.is-link.is-inverted.is-hovered,.button.is-link.is-inverted:hover{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#3273dc}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-link.is-outlined{background-color:transparent;border-color:#3273dc;color:#3273dc}.button.is-link.is-outlined.is-focused,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined:hover{background-color:#3273dc;border-color:#3273dc;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #3273dc #3273dc!important}.button.is-link.is-outlined.is-loading.is-focused::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#3273dc;box-shadow:none;color:#3273dc}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined.is-focused,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined:hover{background-color:#fff;color:#3273dc}.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #3273dc #3273dc!important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link.is-light{background-color:#eef3fc;color:#2160c4}.button.is-link.is-light.is-hovered,.button.is-link.is-light:hover{background-color:#e3ecfa;border-color:transparent;color:#2160c4}.button.is-link.is-light.is-active,.button.is-link.is-light:active{background-color:#d8e4f8;border-color:transparent;color:#2160c4}.button.is-info{background-color:#3298dc;border-color:transparent;color:#fff}.button.is-info.is-hovered,.button.is-info:hover{background-color:#2793da;border-color:transparent;color:#fff}.button.is-info.is-focused,.button.is-info:focus{border-color:transparent;color:#fff}.button.is-info.is-focused:not(:active),.button.is-info:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,152,220,.25)}.button.is-info.is-active,.button.is-info:active{background-color:#238cd1;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#3298dc;border-color:transparent;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#3298dc}.button.is-info.is-inverted.is-hovered,.button.is-info.is-inverted:hover{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#3298dc}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-info.is-outlined{background-color:transparent;border-color:#3298dc;color:#3298dc}.button.is-info.is-outlined.is-focused,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined:hover{background-color:#3298dc;border-color:#3298dc;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #3298dc #3298dc!important}.button.is-info.is-outlined.is-loading.is-focused::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#3298dc;box-shadow:none;color:#3298dc}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined.is-focused,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined:hover{background-color:#fff;color:#3298dc}.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #3298dc #3298dc!important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info.is-light{background-color:#eef6fc;color:#1d72aa}.button.is-info.is-light.is-hovered,.button.is-info.is-light:hover{background-color:#e3f1fa;border-color:transparent;color:#1d72aa}.button.is-info.is-light.is-active,.button.is-info.is-light:active{background-color:#d8ebf8;border-color:transparent;color:#1d72aa}.button.is-success{background-color:#48c774;border-color:transparent;color:#fff}.button.is-success.is-hovered,.button.is-success:hover{background-color:#3ec46d;border-color:transparent;color:#fff}.button.is-success.is-focused,.button.is-success:focus{border-color:transparent;color:#fff}.button.is-success.is-focused:not(:active),.button.is-success:focus:not(:active){box-shadow:0 0 0 .125em rgba(72,199,116,.25)}.button.is-success.is-active,.button.is-success:active{background-color:#3abb67;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#48c774;border-color:transparent;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#48c774}.button.is-success.is-inverted.is-hovered,.button.is-success.is-inverted:hover{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#48c774}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-success.is-outlined{background-color:transparent;border-color:#48c774;color:#48c774}.button.is-success.is-outlined.is-focused,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined:hover{background-color:#48c774;border-color:#48c774;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #48c774 #48c774!important}.button.is-success.is-outlined.is-loading.is-focused::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#48c774;box-shadow:none;color:#48c774}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined.is-focused,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined:hover{background-color:#fff;color:#48c774}.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #48c774 #48c774!important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success.is-light{background-color:#effaf3;color:#257942}.button.is-success.is-light.is-hovered,.button.is-success.is-light:hover{background-color:#e6f7ec;border-color:transparent;color:#257942}.button.is-success.is-light.is-active,.button.is-success.is-light:active{background-color:#dcf4e4;border-color:transparent;color:#257942}.button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-hovered,.button.is-warning:hover{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-focused,.button.is-warning:focus{border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-focused:not(:active),.button.is-warning:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.button.is-warning.is-active,.button.is-warning:active{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:transparent;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,.7);color:#ffdd57}.button.is-warning.is-inverted.is-hovered,.button.is-warning.is-inverted:hover{background-color:rgba(0,0,0,.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined.is-focused,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined:hover{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57!important}.button.is-warning.is-outlined.is-loading.is-focused::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading:hover::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);color:rgba(0,0,0,.7)}.button.is-warning.is-inverted.is-outlined.is-focused,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined:hover{background-color:rgba(0,0,0,.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #ffdd57 #ffdd57!important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);box-shadow:none;color:rgba(0,0,0,.7)}.button.is-warning.is-light{background-color:#fffbeb;color:#947600}.button.is-warning.is-light.is-hovered,.button.is-warning.is-light:hover{background-color:#fff8de;border-color:transparent;color:#947600}.button.is-warning.is-light.is-active,.button.is-warning.is-light:active{background-color:#fff6d1;border-color:transparent;color:#947600}.button.is-danger{background-color:#f14668;border-color:transparent;color:#fff}.button.is-danger.is-hovered,.button.is-danger:hover{background-color:#f03a5f;border-color:transparent;color:#fff}.button.is-danger.is-focused,.button.is-danger:focus{border-color:transparent;color:#fff}.button.is-danger.is-focused:not(:active),.button.is-danger:focus:not(:active){box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.button.is-danger.is-active,.button.is-danger:active{background-color:#ef2e55;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#f14668;border-color:transparent;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#f14668}.button.is-danger.is-inverted.is-hovered,.button.is-danger.is-inverted:hover{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#f14668}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-danger.is-outlined{background-color:transparent;border-color:#f14668;color:#f14668}.button.is-danger.is-outlined.is-focused,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined:hover{background-color:#f14668;border-color:#f14668;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #f14668 #f14668!important}.button.is-danger.is-outlined.is-loading.is-focused::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#f14668;box-shadow:none;color:#f14668}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined.is-focused,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined:hover{background-color:#fff;color:#f14668}.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #f14668 #f14668!important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-danger.is-light{background-color:#feecf0;color:#cc0f35}.button.is-danger.is-light.is-hovered,.button.is-danger.is-light:hover{background-color:#fde0e6;border-color:transparent;color:#cc0f35}.button.is-danger.is-light.is-active,.button.is-danger.is-light:active{background-color:#fcd4dc;border-color:transparent;color:#cc0f35}.button.is-small{border-radius:2px;font-size:.75rem}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent!important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em / 2));top:calc(50% - (1em / 2));position:absolute!important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#7a7a7a;box-shadow:none;pointer-events:none}.button.is-rounded{border-radius:290486px;padding-left:calc(1em + .25em);padding-right:calc(1em + .25em)}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}.buttons:last-child{margin-bottom:-.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){border-radius:2px;font-size:.75rem}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button.is-hovered,.buttons.has-addons .button:hover{z-index:2}.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-focused,.buttons.has-addons .button.is-selected,.buttons.has-addons .button:active,.buttons.has-addons .button:focus{z-index:3}.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button.is-selected:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button:focus:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:.25rem;margin-right:.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:.25rem;margin-right:.25rem}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none!important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width:1024px){.container{max-width:960px}}@media screen and (max-width:1215px){.container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width:1407px){.container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width:1216px){.container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width:1408px){.container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}.content li+li{margin-top:.25em}.content blockquote:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content p:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child),.content ul:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#363636;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:.8em}.content h5{font-size:1.125em;margin-bottom:.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol:not([type]).is-lower-alpha{list-style-type:lower-alpha}.content ol:not([type]).is-lower-roman{list-style-type:lower-roman}.content ol:not([type]).is-upper-alpha{list-style-type:upper-alpha}.content ol:not([type]).is-upper-roman{list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:1.25em 1.5em;white-space:pre;word-wrap:normal}.content sub,.content sup{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:.5em .75em;vertical-align:top}.content table th{color:#363636}.content table th:not([align]){text-align:inherit}.content table thead td,.content table thead th{border-width:0 0 2px;color:#363636}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#363636}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small{font-size:.75rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.image{display:block;position:relative}.image img{display:block;height:auto;width:100%}.image img.is-rounded{border-radius:290486px}.image.is-fullwidth{width:100%}.image.is-16by9 .has-ratio,.image.is-16by9 img,.image.is-1by1 .has-ratio,.image.is-1by1 img,.image.is-1by2 .has-ratio,.image.is-1by2 img,.image.is-1by3 .has-ratio,.image.is-1by3 img,.image.is-2by1 .has-ratio,.image.is-2by1 img,.image.is-2by3 .has-ratio,.image.is-2by3 img,.image.is-3by1 .has-ratio,.image.is-3by1 img,.image.is-3by2 .has-ratio,.image.is-3by2 img,.image.is-3by4 .has-ratio,.image.is-3by4 img,.image.is-3by5 .has-ratio,.image.is-3by5 img,.image.is-4by3 .has-ratio,.image.is-4by3 img,.image.is-4by5 .has-ratio,.image.is-4by5 img,.image.is-5by3 .has-ratio,.image.is-5by3 img,.image.is-5by4 .has-ratio,.image.is-5by4 img,.image.is-9by16 .has-ratio,.image.is-9by16 img,.image.is-square .has-ratio,.image.is-square img{height:100%;width:100%}.image.is-1by1,.image.is-square{padding-top:100%}.image.is-5by4{padding-top:80%}.image.is-4by3{padding-top:75%}.image.is-3by2{padding-top:66.6666%}.image.is-5by3{padding-top:60%}.image.is-16by9{padding-top:56.25%}.image.is-2by1{padding-top:50%}.image.is-3by1{padding-top:33.3333%}.image.is-4by5{padding-top:125%}.image.is-3by4{padding-top:133.3333%}.image.is-2by3{padding-top:150%}.image.is-3by5{padding-top:166.6666%}.image.is-9by16{padding-top:177.7777%}.image.is-1by2{padding-top:200%}.image.is-1by3{padding-top:300%}.image.is-16x16{height:16px;width:16px}.image.is-24x24{height:24px;width:24px}.image.is-32x32{height:32px;width:32px}.image.is-48x48{height:48px;width:48px}.image.is-64x64{height:64px;width:64px}.image.is-96x96{height:96px;width:96px}.image.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:#fff}.notification pre code{background:0 0}.notification>.delete{right:.5rem;position:absolute;top:.5rem}.notification .content,.notification .subtitle,.notification .title{color:currentColor}.notification.is-white{background-color:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.notification.is-dark{background-color:#363636;color:#fff}.notification.is-primary{background-color:#00d1b2;color:#fff}.notification.is-primary.is-light{background-color:#ebfffc;color:#00947e}.notification.is-link{background-color:#3273dc;color:#fff}.notification.is-link.is-light{background-color:#eef3fc;color:#2160c4}.notification.is-info{background-color:#3298dc;color:#fff}.notification.is-info.is-light{background-color:#eef6fc;color:#1d72aa}.notification.is-success{background-color:#48c774;color:#fff}.notification.is-success.is-light{background-color:#effaf3;color:#257942}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.notification.is-warning.is-light{background-color:#fffbeb;color:#947600}.notification.is-danger{background-color:#f14668;color:#fff}.notification.is-danger.is-light{background-color:#feecf0;color:#cc0f35}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:290486px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#ededed}.progress::-webkit-progress-value{background-color:#4a4a4a}.progress::-moz-progress-bar{background-color:#4a4a4a}.progress::-ms-fill{background-color:#4a4a4a;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right,#fff 30%,#ededed 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right,#0a0a0a 30%,#ededed 30%)}.progress.is-light::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right,#f5f5f5 30%,#ededed 30%)}.progress.is-dark::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate{background-image:linear-gradient(to right,#363636 30%,#ededed 30%)}.progress.is-primary::-webkit-progress-value{background-color:#00d1b2}.progress.is-primary::-moz-progress-bar{background-color:#00d1b2}.progress.is-primary::-ms-fill{background-color:#00d1b2}.progress.is-primary:indeterminate{background-image:linear-gradient(to right,#00d1b2 30%,#ededed 30%)}.progress.is-link::-webkit-progress-value{background-color:#3273dc}.progress.is-link::-moz-progress-bar{background-color:#3273dc}.progress.is-link::-ms-fill{background-color:#3273dc}.progress.is-link:indeterminate{background-image:linear-gradient(to right,#3273dc 30%,#ededed 30%)}.progress.is-info::-webkit-progress-value{background-color:#3298dc}.progress.is-info::-moz-progress-bar{background-color:#3298dc}.progress.is-info::-ms-fill{background-color:#3298dc}.progress.is-info:indeterminate{background-image:linear-gradient(to right,#3298dc 30%,#ededed 30%)}.progress.is-success::-webkit-progress-value{background-color:#48c774}.progress.is-success::-moz-progress-bar{background-color:#48c774}.progress.is-success::-ms-fill{background-color:#48c774}.progress.is-success:indeterminate{background-image:linear-gradient(to right,#48c774 30%,#ededed 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning::-ms-fill{background-color:#ffdd57}.progress.is-warning:indeterminate{background-image:linear-gradient(to right,#ffdd57 30%,#ededed 30%)}.progress.is-danger::-webkit-progress-value{background-color:#f14668}.progress.is-danger::-moz-progress-bar{background-color:#f14668}.progress.is-danger::-ms-fill{background-color:#f14668}.progress.is-danger:indeterminate{background-image:linear-gradient(to right,#f14668 30%,#ededed 30%)}.progress:indeterminate{-webkit-animation-duration:1.5s;animation-duration:1.5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:moveIndeterminate;animation-name:moveIndeterminate;-webkit-animation-timing-function:linear;animation-timing-function:linear;background-color:#ededed;background-image:linear-gradient(to right,#4a4a4a 30%,#ededed 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress:indeterminate::-ms-fill{animation-name:none}.progress.is-small{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@-webkit-keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#363636}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:.5em .75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,.7)}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#fff}.table td.is-primary,.table th.is-primary{background-color:#00d1b2;border-color:#00d1b2;color:#fff}.table td.is-link,.table th.is-link{background-color:#3273dc;border-color:#3273dc;color:#fff}.table td.is-info,.table th.is-info{background-color:#3298dc;border-color:#3298dc;color:#fff}.table td.is-success,.table th.is-success{background-color:#48c774;border-color:#48c774;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,.7)}.table td.is-danger,.table th.is-danger{background-color:#f14668;border-color:#f14668;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#00d1b2;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table td.is-vcentered,.table th.is-vcentered{vertical-align:middle}.table th{color:#363636}.table th:not([align]){text-align:inherit}.table tr.is-selected{background-color:#00d1b2;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:transparent}.table thead td,.table thead th{border-width:0 0 2px;color:#363636}.table tfoot{background-color:transparent}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#363636}.table tbody{background-color:transparent}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:.25em .5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag{margin-bottom:.5rem}.tags .tag:not(:last-child){margin-right:.5rem}.tags:last-child{margin-bottom:-.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag{margin-right:.25rem;margin-left:.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child){margin-left:.5rem}.tags.is-right .tag:not(:last-child){margin-right:0}.tags.has-addons .tag{margin-right:0}.tags.has-addons .tag:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.tags.has-addons .tag:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.tag:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#4a4a4a;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:.75em;padding-right:.75em;white-space:nowrap}.tag:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}.tag:not(body).is-white{background-color:#fff;color:#0a0a0a}.tag:not(body).is-black{background-color:#0a0a0a;color:#fff}.tag:not(body).is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.tag:not(body).is-dark{background-color:#363636;color:#fff}.tag:not(body).is-primary{background-color:#00d1b2;color:#fff}.tag:not(body).is-primary.is-light{background-color:#ebfffc;color:#00947e}.tag:not(body).is-link{background-color:#3273dc;color:#fff}.tag:not(body).is-link.is-light{background-color:#eef3fc;color:#2160c4}.tag:not(body).is-info{background-color:#3298dc;color:#fff}.tag:not(body).is-info.is-light{background-color:#eef6fc;color:#1d72aa}.tag:not(body).is-success{background-color:#48c774;color:#fff}.tag:not(body).is-success.is-light{background-color:#effaf3;color:#257942}.tag:not(body).is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.tag:not(body).is-warning.is-light{background-color:#fffbeb;color:#947600}.tag:not(body).is-danger{background-color:#f14668;color:#fff}.tag:not(body).is-danger.is-light{background-color:#feecf0;color:#cc0f35}.tag:not(body).is-normal{font-size:.75rem}.tag:not(body).is-medium{font-size:1rem}.tag:not(body).is-large{font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}.tag:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}.tag:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}.tag:not(body).is-delete{margin-left:1px;padding:0;position:relative;width:2em}.tag:not(body).is-delete::after,.tag:not(body).is-delete::before{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag:not(body).is-delete::before{height:1px;width:50%}.tag:not(body).is-delete::after{height:50%;width:1px}.tag:not(body).is-delete:focus,.tag:not(body).is-delete:hover{background-color:#e8e8e8}.tag:not(body).is-delete:active{background-color:#dbdbdb}.tag:not(body).is-rounded{border-radius:290486px}a.tag:hover{text-decoration:underline}.subtitle,.title{word-break:break-word}.subtitle em,.subtitle span,.title em,.title span{font-weight:inherit}.subtitle sub,.title sub{font-size:.75em}.subtitle sup,.title sup{font-size:.75em}.subtitle .tag,.title .tag{vertical-align:middle}.title{color:#363636;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title+.highlight{margin-top:-.75rem}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#4a4a4a;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#363636;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.highlight{font-weight:400;max-width:100%;overflow:hidden;padding:0}.highlight pre{overflow:auto;max-width:100%}.number{align-items:center;background-color:#f5f5f5;border-radius:290486px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:.25rem .5rem;text-align:center;vertical-align:top}.input,.select select,.textarea{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#363636}.input::-moz-placeholder,.select select::-moz-placeholder,.textarea::-moz-placeholder{color:rgba(54,54,54,.3)}.input::-webkit-input-placeholder,.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder{color:rgba(54,54,54,.3)}.input:-moz-placeholder,.select select:-moz-placeholder,.textarea:-moz-placeholder{color:rgba(54,54,54,.3)}.input:-ms-input-placeholder,.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder{color:rgba(54,54,54,.3)}.input:hover,.is-hovered.input,.is-hovered.textarea,.select select.is-hovered,.select select:hover,.textarea:hover{border-color:#b5b5b5}.input:active,.input:focus,.is-active.input,.is-active.textarea,.is-focused.input,.is-focused.textarea,.select select.is-active,.select select.is-focused,.select select:active,.select select:focus,.textarea:active,.textarea:focus{border-color:#3273dc;box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.input[disabled],.select fieldset[disabled] select,.select select[disabled],.textarea[disabled],fieldset[disabled] .input,fieldset[disabled] .select select,fieldset[disabled] .textarea{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#7a7a7a}.input[disabled]::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder{color:rgba(122,122,122,.3)}.input[disabled]::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder{color:rgba(122,122,122,.3)}.input[disabled]:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder{color:rgba(122,122,122,.3)}.input[disabled]:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder{color:rgba(122,122,122,.3)}.input,.textarea{box-shadow:inset 0 .0625em .125em rgba(10,10,10,.05);max-width:100%;width:100%}.input[readonly],.textarea[readonly]{box-shadow:none}.is-white.input,.is-white.textarea{border-color:#fff}.is-white.input:active,.is-white.input:focus,.is-white.is-active.input,.is-white.is-active.textarea,.is-white.is-focused.input,.is-white.is-focused.textarea,.is-white.textarea:active,.is-white.textarea:focus{box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.is-black.input,.is-black.textarea{border-color:#0a0a0a}.is-black.input:active,.is-black.input:focus,.is-black.is-active.input,.is-black.is-active.textarea,.is-black.is-focused.input,.is-black.is-focused.textarea,.is-black.textarea:active,.is-black.textarea:focus{box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.is-light.input,.is-light.textarea{border-color:#f5f5f5}.is-light.input:active,.is-light.input:focus,.is-light.is-active.input,.is-light.is-active.textarea,.is-light.is-focused.input,.is-light.is-focused.textarea,.is-light.textarea:active,.is-light.textarea:focus{box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.is-dark.input,.is-dark.textarea{border-color:#363636}.is-dark.input:active,.is-dark.input:focus,.is-dark.is-active.input,.is-dark.is-active.textarea,.is-dark.is-focused.input,.is-dark.is-focused.textarea,.is-dark.textarea:active,.is-dark.textarea:focus{box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.is-primary.input,.is-primary.textarea{border-color:#00d1b2}.is-primary.input:active,.is-primary.input:focus,.is-primary.is-active.input,.is-primary.is-active.textarea,.is-primary.is-focused.input,.is-primary.is-focused.textarea,.is-primary.textarea:active,.is-primary.textarea:focus{box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.is-link.input,.is-link.textarea{border-color:#3273dc}.is-link.input:active,.is-link.input:focus,.is-link.is-active.input,.is-link.is-active.textarea,.is-link.is-focused.input,.is-link.is-focused.textarea,.is-link.textarea:active,.is-link.textarea:focus{box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.is-info.input,.is-info.textarea{border-color:#3298dc}.is-info.input:active,.is-info.input:focus,.is-info.is-active.input,.is-info.is-active.textarea,.is-info.is-focused.input,.is-info.is-focused.textarea,.is-info.textarea:active,.is-info.textarea:focus{box-shadow:0 0 0 .125em rgba(50,152,220,.25)}.is-success.input,.is-success.textarea{border-color:#48c774}.is-success.input:active,.is-success.input:focus,.is-success.is-active.input,.is-success.is-active.textarea,.is-success.is-focused.input,.is-success.is-focused.textarea,.is-success.textarea:active,.is-success.textarea:focus{box-shadow:0 0 0 .125em rgba(72,199,116,.25)}.is-warning.input,.is-warning.textarea{border-color:#ffdd57}.is-warning.input:active,.is-warning.input:focus,.is-warning.is-active.input,.is-warning.is-active.textarea,.is-warning.is-focused.input,.is-warning.is-focused.textarea,.is-warning.textarea:active,.is-warning.textarea:focus{box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.is-danger.input,.is-danger.textarea{border-color:#f14668}.is-danger.input:active,.is-danger.input:focus,.is-danger.is-active.input,.is-danger.is-active.textarea,.is-danger.is-focused.input,.is-danger.is-focused.textarea,.is-danger.textarea:active,.is-danger.textarea:focus{box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.is-small.input,.is-small.textarea{border-radius:2px;font-size:.75rem}.is-medium.input,.is-medium.textarea{font-size:1.25rem}.is-large.input,.is-large.textarea{font-size:1.5rem}.is-fullwidth.input,.is-fullwidth.textarea{display:block;width:100%}.is-inline.input,.is-inline.textarea{display:inline;width:auto}.input.is-rounded{border-radius:290486px;padding-left:calc(calc(.75em - 1px) + .375em);padding-right:calc(calc(.75em - 1px) + .375em)}.input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:calc(.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.checkbox,.radio{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.checkbox input,.radio input{cursor:pointer}.checkbox:hover,.radio:hover{color:#363636}.checkbox input[disabled],.checkbox[disabled],.radio input[disabled],.radio[disabled],fieldset[disabled] .checkbox,fieldset[disabled] .radio{color:#7a7a7a;cursor:not-allowed}.radio+.radio{margin-left:.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.5em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#3273dc;right:1.125em;z-index:4}.select.is-rounded select{border-radius:290486px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:0}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#363636}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select.is-hovered,.select.is-white select:hover{border-color:#f2f2f2}.select.is-white select.is-active,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select:focus{box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select.is-hovered,.select.is-black select:hover{border-color:#000}.select.is-black select.is-active,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select:focus{box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select.is-hovered,.select.is-light select:hover{border-color:#e8e8e8}.select.is-light select.is-active,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select:focus{box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.select.is-dark:not(:hover)::after{border-color:#363636}.select.is-dark select{border-color:#363636}.select.is-dark select.is-hovered,.select.is-dark select:hover{border-color:#292929}.select.is-dark select.is-active,.select.is-dark select.is-focused,.select.is-dark select:active,.select.is-dark select:focus{box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.select.is-primary:not(:hover)::after{border-color:#00d1b2}.select.is-primary select{border-color:#00d1b2}.select.is-primary select.is-hovered,.select.is-primary select:hover{border-color:#00b89c}.select.is-primary select.is-active,.select.is-primary select.is-focused,.select.is-primary select:active,.select.is-primary select:focus{box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.select.is-link:not(:hover)::after{border-color:#3273dc}.select.is-link select{border-color:#3273dc}.select.is-link select.is-hovered,.select.is-link select:hover{border-color:#2366d1}.select.is-link select.is-active,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select:focus{box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.select.is-info:not(:hover)::after{border-color:#3298dc}.select.is-info select{border-color:#3298dc}.select.is-info select.is-hovered,.select.is-info select:hover{border-color:#238cd1}.select.is-info select.is-active,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select:focus{box-shadow:0 0 0 .125em rgba(50,152,220,.25)}.select.is-success:not(:hover)::after{border-color:#48c774}.select.is-success select{border-color:#48c774}.select.is-success select.is-hovered,.select.is-success select:hover{border-color:#3abb67}.select.is-success select.is-active,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select:focus{box-shadow:0 0 0 .125em rgba(72,199,116,.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select.is-hovered,.select.is-warning select:hover{border-color:#ffd83d}.select.is-warning select.is-active,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select:focus{box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.select.is-danger:not(:hover)::after{border-color:#f14668}.select.is-danger select{border-color:#f14668}.select.is-danger select.is-hovered,.select.is-danger select:hover{border-color:#ef2e55}.select.is-danger select.is-active,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select:focus{box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.select.is-small{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#7a7a7a}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:.625em;transform:none}.select.is-loading.is-small:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white.is-hovered .file-cta,.file.is-white:hover .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white.is-focused .file-cta,.file.is-white:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(255,255,255,.25);color:#0a0a0a}.file.is-white.is-active .file-cta,.file.is-white:active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black.is-hovered .file-cta,.file.is-black:hover .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black.is-focused .file-cta,.file.is-black:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(10,10,10,.25);color:#fff}.file.is-black.is-active .file-cta,.file.is-black:active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-light.is-hovered .file-cta,.file.is-light:hover .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-light.is-focused .file-cta,.file.is-light:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(245,245,245,.25);color:rgba(0,0,0,.7)}.file.is-light.is-active .file-cta,.file.is-light:active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-dark .file-cta{background-color:#363636;border-color:transparent;color:#fff}.file.is-dark.is-hovered .file-cta,.file.is-dark:hover .file-cta{background-color:#2f2f2f;border-color:transparent;color:#fff}.file.is-dark.is-focused .file-cta,.file.is-dark:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(54,54,54,.25);color:#fff}.file.is-dark.is-active .file-cta,.file.is-dark:active .file-cta{background-color:#292929;border-color:transparent;color:#fff}.file.is-primary .file-cta{background-color:#00d1b2;border-color:transparent;color:#fff}.file.is-primary.is-hovered .file-cta,.file.is-primary:hover .file-cta{background-color:#00c4a7;border-color:transparent;color:#fff}.file.is-primary.is-focused .file-cta,.file.is-primary:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(0,209,178,.25);color:#fff}.file.is-primary.is-active .file-cta,.file.is-primary:active .file-cta{background-color:#00b89c;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#3273dc;border-color:transparent;color:#fff}.file.is-link.is-hovered .file-cta,.file.is-link:hover .file-cta{background-color:#276cda;border-color:transparent;color:#fff}.file.is-link.is-focused .file-cta,.file.is-link:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(50,115,220,.25);color:#fff}.file.is-link.is-active .file-cta,.file.is-link:active .file-cta{background-color:#2366d1;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#3298dc;border-color:transparent;color:#fff}.file.is-info.is-hovered .file-cta,.file.is-info:hover .file-cta{background-color:#2793da;border-color:transparent;color:#fff}.file.is-info.is-focused .file-cta,.file.is-info:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(50,152,220,.25);color:#fff}.file.is-info.is-active .file-cta,.file.is-info:active .file-cta{background-color:#238cd1;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#48c774;border-color:transparent;color:#fff}.file.is-success.is-hovered .file-cta,.file.is-success:hover .file-cta{background-color:#3ec46d;border-color:transparent;color:#fff}.file.is-success.is-focused .file-cta,.file.is-success:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(72,199,116,.25);color:#fff}.file.is-success.is-active .file-cta,.file.is-success:active .file-cta{background-color:#3abb67;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-warning.is-hovered .file-cta,.file.is-warning:hover .file-cta{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-warning.is-focused .file-cta,.file.is-warning:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(255,221,87,.25);color:rgba(0,0,0,.7)}.file.is-warning.is-active .file-cta,.file.is-warning:active .file-cta{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-danger .file-cta{background-color:#f14668;border-color:transparent;color:#fff}.file.is-danger.is-hovered .file-cta,.file.is-danger:hover .file-cta{background-color:#f03a5f;border-color:transparent;color:#fff}.file.is-danger.is-focused .file-cta,.file.is-danger:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(241,70,104,.25);color:#fff}.file.is-danger.is-active .file-cta,.file.is-danger:active .file-cta{background-color:#ef2e55;border-color:transparent;color:#fff}.file.is-small{font-size:.75rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#363636}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#363636}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:0;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:#f5f5f5;color:#4a4a4a}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#363636;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:.5em}.label.is-small{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark{color:#363636}.help.is-primary{color:#00d1b2}.help.is-link{color:#3273dc}.help.is-info{color:#3298dc}.help.is-success{color:#48c774}.help.is-warning{color:#ffdd57}.help.is-danger{color:#f14668}.field:not(:last-child){margin-bottom:.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]).is-hovered,.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .input:not([disabled]).is-hovered,.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]).is-hovered,.field.has-addons .control .select select:not([disabled]):hover{z-index:2}.field.has-addons .control .button:not([disabled]).is-active,.field.has-addons .control .button:not([disabled]).is-focused,.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .input:not([disabled]).is-active,.field.has-addons .control .input:not([disabled]).is-focused,.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control .select select:not([disabled]).is-active,.field.has-addons .control .select select:not([disabled]).is-focused,.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select:not([disabled]):focus{z-index:3}.field.has-addons .control .button:not([disabled]).is-active:hover,.field.has-addons .control .button:not([disabled]).is-focused:hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .input:not([disabled]).is-active:hover,.field.has-addons .control .input:not([disabled]).is-focused:hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control .select select:not([disabled]).is-active:hover,.field.has-addons .control .select select:not([disabled]).is-focused:hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select:not([disabled]):focus:hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width:769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width:768px){.field-label{margin-bottom:.5rem}}@media screen and (min-width:769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small{font-size:.75rem;padding-top:.375em}.field-label.is-normal{padding-top:.375em}.field-label.is-medium{font-size:1.25rem;padding-top:.375em}.field-label.is-large{font-size:1.5rem;padding-top:.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width:769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}.control.has-icons-left .input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#4a4a4a}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}.control.has-icons-left .input,.control.has-icons-left .select select{padding-left:2.5em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right .select select{padding-right:2.5em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute!important;right:.625em;top:.625em;z-index:4}.control.is-loading.is-small:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#3273dc;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#363636;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ol,.breadcrumb ul{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:.5em}.breadcrumb .icon:last-child{margin-left:.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;border-radius:.25rem;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);color:#4a4a4a;max-width:100%;overflow:hidden;position:relative}.card-header{background-color:transparent;align-items:stretch;box-shadow:0 .125em .25em rgba(10,10,10,.1);display:flex}.card-header-title{align-items:center;color:#363636;display:flex;flex-grow:1;font-weight:700;padding:.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{align-items:center;cursor:pointer;display:flex;justify-content:center;padding:.75rem 1rem}.card-image{display:block;position:relative}.card-content{background-color:transparent;padding:1.5rem}.card-footer{background-color:transparent;border-top:1px solid #ededed;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-right:1px solid #ededed}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#4a4a4a;display:block;font-size:.875rem;line-height:1.5;padding:.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#3273dc;color:#fff}.dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width:769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .subtitle,.level-item .title{margin-bottom:0}@media screen and (max-width:768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width:769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width:768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width:769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width:769px),print{.level-right{display:flex}}.media{align-items:flex-start;display:flex;text-align:inherit}.media .content:not(:last-child){margin-bottom:.75rem}.media .media{border-top:1px solid rgba(219,219,219,.5);display:flex;padding-top:.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:.5rem}.media .media .media{padding-top:.5rem}.media .media .media+.media{margin-top:.5rem}.media+.media{border-top:1px solid rgba(219,219,219,.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width:768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#4a4a4a;display:block;padding:.5em .75em}.menu-list a:hover{background-color:#f5f5f5;color:#363636}.menu-list a.is-active{background-color:#3273dc;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#7a7a7a;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.message.is-light .message-body{border-color:#f5f5f5}.message.is-dark{background-color:#fafafa}.message.is-dark .message-header{background-color:#363636;color:#fff}.message.is-dark .message-body{border-color:#363636}.message.is-primary{background-color:#ebfffc}.message.is-primary .message-header{background-color:#00d1b2;color:#fff}.message.is-primary .message-body{border-color:#00d1b2;color:#00947e}.message.is-link{background-color:#eef3fc}.message.is-link .message-header{background-color:#3273dc;color:#fff}.message.is-link .message-body{border-color:#3273dc;color:#2160c4}.message.is-info{background-color:#eef6fc}.message.is-info .message-header{background-color:#3298dc;color:#fff}.message.is-info .message-body{border-color:#3298dc;color:#1d72aa}.message.is-success{background-color:#effaf3}.message.is-success .message-header{background-color:#48c774;color:#fff}.message.is-success .message-body{border-color:#48c774;color:#257942}.message.is-warning{background-color:#fffbeb}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#947600}.message.is-danger{background-color:#feecf0}.message.is-danger .message-header{background-color:#f14668;color:#fff}.message.is-danger .message-body{border-color:#f14668;color:#cc0f35}.message-header{align-items:center;background-color:#4a4a4a;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#4a4a4a;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:transparent}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,.86)}.modal-card,.modal-content{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width:769px){.modal-card,.modal-content{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:0 0;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-foot,.modal-card-head{align-items:center;background-color:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#363636;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link,.navbar.is-white .navbar-brand>.navbar-item{color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width:1024px){.navbar.is-white .navbar-end .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-start>.navbar-item{color:#0a0a0a}.navbar.is-white .navbar-end .navbar-link.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-end .navbar-link::after,.navbar.is-white .navbar-start .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand .navbar-link,.navbar.is-black .navbar-brand>.navbar-item{color:#fff}.navbar.is-black .navbar-brand .navbar-link.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-black .navbar-end .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-start>.navbar-item{color:#fff}.navbar.is-black .navbar-end .navbar-link.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover{background-color:#000;color:#fff}.navbar.is-black .navbar-end .navbar-link::after,.navbar.is-black .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link,.navbar.is-light .navbar-brand>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,.7)}@media screen and (min-width:1024px){.navbar.is-light .navbar-end .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-start>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-light .navbar-end .navbar-link.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-end .navbar-link::after,.navbar.is-light .navbar-start .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,.7)}}.navbar.is-dark{background-color:#363636;color:#fff}.navbar.is-dark .navbar-brand .navbar-link,.navbar.is-dark .navbar-brand>.navbar-item{color:#fff}.navbar.is-dark .navbar-brand .navbar-link.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover{background-color:#292929;color:#fff}.navbar.is-dark .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-dark .navbar-end .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.navbar.is-dark .navbar-start>.navbar-item{color:#fff}.navbar.is-dark .navbar-end .navbar-link.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover{background-color:#292929;color:#fff}.navbar.is-dark .navbar-end .navbar-link::after,.navbar.is-dark .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link{background-color:#292929;color:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#fff}}.navbar.is-primary{background-color:#00d1b2;color:#fff}.navbar.is-primary .navbar-brand .navbar-link,.navbar.is-primary .navbar-brand>.navbar-item{color:#fff}.navbar.is-primary .navbar-brand .navbar-link.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-primary .navbar-end .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.navbar.is-primary .navbar-start>.navbar-item{color:#fff}.navbar.is-primary .navbar-end .navbar-link.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-end .navbar-link::after,.navbar.is-primary .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active{background-color:#00d1b2;color:#fff}}.navbar.is-link{background-color:#3273dc;color:#fff}.navbar.is-link .navbar-brand .navbar-link,.navbar.is-link .navbar-brand>.navbar-item{color:#fff}.navbar.is-link .navbar-brand .navbar-link.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-link .navbar-end .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-start>.navbar-item{color:#fff}.navbar.is-link .navbar-end .navbar-link.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-end .navbar-link::after,.navbar.is-link .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#3273dc;color:#fff}}.navbar.is-info{background-color:#3298dc;color:#fff}.navbar.is-info .navbar-brand .navbar-link,.navbar.is-info .navbar-brand>.navbar-item{color:#fff}.navbar.is-info .navbar-brand .navbar-link.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover{background-color:#238cd1;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-info .navbar-end .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-start>.navbar-item{color:#fff}.navbar.is-info .navbar-end .navbar-link.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover{background-color:#238cd1;color:#fff}.navbar.is-info .navbar-end .navbar-link::after,.navbar.is-info .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link{background-color:#238cd1;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#3298dc;color:#fff}}.navbar.is-success{background-color:#48c774;color:#fff}.navbar.is-success .navbar-brand .navbar-link,.navbar.is-success .navbar-brand>.navbar-item{color:#fff}.navbar.is-success .navbar-brand .navbar-link.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover{background-color:#3abb67;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-success .navbar-end .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-start>.navbar-item{color:#fff}.navbar.is-success .navbar-end .navbar-link.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover{background-color:#3abb67;color:#fff}.navbar.is-success .navbar-end .navbar-link::after,.navbar.is-success .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link{background-color:#3abb67;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#48c774;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link,.navbar.is-warning .navbar-brand>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,.7)}@media screen and (min-width:1024px){.navbar.is-warning .navbar-end .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-start>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-end .navbar-link.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-end .navbar-link::after,.navbar.is-warning .navbar-start .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,.7)}}.navbar.is-danger{background-color:#f14668;color:#fff}.navbar.is-danger .navbar-brand .navbar-link,.navbar.is-danger .navbar-brand>.navbar-item{color:#fff}.navbar.is-danger .navbar-brand .navbar-link.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-danger .navbar-end .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-start>.navbar-item{color:#fff}.navbar.is-danger .navbar-end .navbar-link.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-end .navbar-link::after,.navbar.is-danger .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#f14668;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}body.has-navbar-fixed-top,html.has-navbar-fixed-top{padding-top:3.25rem}body.has-navbar-fixed-bottom,html.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#4a4a4a;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color,opacity,transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#4a4a4a;display:block;line-height:1.5;padding:.5rem .75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-.25rem;margin-right:-.25rem}.navbar-link,a.navbar-item{cursor:pointer}.navbar-link.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,a.navbar-item.is-active,a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover{background-color:#fafafa;color:#3273dc}.navbar-item{flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:transparent;border-bottom-color:#3273dc}.navbar-item.is-tab.is-active{background-color:transparent;border-bottom-color:#3273dc;border-bottom-style:solid;border-bottom-width:3px;color:#3273dc;padding-bottom:calc(.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#3273dc;margin-top:-.375em;right:1.125em}.navbar-dropdown{font-size:.875rem;padding-bottom:.5rem;padding-top:.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:.5rem 0}@media screen and (max-width:1023px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,.1);padding:.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}body.has-navbar-fixed-top-touch,html.has-navbar-fixed-top-touch{padding-top:3.25rem}body.has-navbar-fixed-bottom-touch,html.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width:1024px){.navbar,.navbar-end,.navbar-menu,.navbar-start{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-end,.navbar.is-spaced .navbar-start{align-items:center}.navbar.is-spaced .navbar-link,.navbar.is-spaced a.navbar-item{border-radius:4px}.navbar.is-transparent .navbar-link.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover{background-color:transparent!important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent!important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#3273dc}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(.25em,-.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,.1);display:none;font-size:.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#3273dc}.navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-dropdown{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity,transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.container>.navbar .navbar-brand,.navbar>.container .navbar-brand{margin-left:-.75rem}.container>.navbar .navbar-menu,.navbar>.container .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,.1)}.navbar.is-fixed-top-desktop{top:0}body.has-navbar-fixed-top-desktop,html.has-navbar-fixed-top-desktop{padding-top:3.25rem}body.has-navbar-fixed-bottom-desktop,html.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}body.has-spaced-navbar-fixed-top,html.has-spaced-navbar-fixed-top{padding-top:5.25rem}body.has-spaced-navbar-fixed-bottom,html.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}.navbar-link.is-active,a.navbar-item.is-active{color:#0a0a0a}.navbar-link.is-active:not(:focus):not(:hover),a.navbar-item.is-active:not(:focus):not(:hover){background-color:transparent}.navbar-item.has-dropdown.is-active .navbar-link,.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-next,.pagination.is-rounded .pagination-previous{padding-left:1em;padding-right:1em;border-radius:290486px}.pagination.is-rounded .pagination-link{border-radius:290486px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-link,.pagination-next,.pagination-previous{border-color:#dbdbdb;color:#363636;min-width:2.5em}.pagination-link:hover,.pagination-next:hover,.pagination-previous:hover{border-color:#b5b5b5;color:#363636}.pagination-link:focus,.pagination-next:focus,.pagination-previous:focus{border-color:#3273dc}.pagination-link:active,.pagination-next:active,.pagination-previous:active{box-shadow:inset 0 1px 2px rgba(10,10,10,.2)}.pagination-link[disabled],.pagination-next[disabled],.pagination-previous[disabled]{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#7a7a7a;opacity:.5}.pagination-next,.pagination-previous{padding-left:.75em;padding-right:.75em;white-space:nowrap}.pagination-link.is-current{background-color:#3273dc;border-color:#3273dc;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}@media screen and (max-width:768px){.pagination{flex-wrap:wrap}.pagination-next,.pagination-previous{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width:769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{border-radius:6px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}.panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}.panel.is-white .panel-block.is-active .panel-icon{color:#fff}.panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}.panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}.panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}.panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}.panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}.panel.is-dark .panel-heading{background-color:#363636;color:#fff}.panel.is-dark .panel-tabs a.is-active{border-bottom-color:#363636}.panel.is-dark .panel-block.is-active .panel-icon{color:#363636}.panel.is-primary .panel-heading{background-color:#00d1b2;color:#fff}.panel.is-primary .panel-tabs a.is-active{border-bottom-color:#00d1b2}.panel.is-primary .panel-block.is-active .panel-icon{color:#00d1b2}.panel.is-link .panel-heading{background-color:#3273dc;color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:#3273dc}.panel.is-link .panel-block.is-active .panel-icon{color:#3273dc}.panel.is-info .panel-heading{background-color:#3298dc;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#3298dc}.panel.is-info .panel-block.is-active .panel-icon{color:#3298dc}.panel.is-success .panel-heading{background-color:#48c774;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#48c774}.panel.is-success .panel-block.is-active .panel-icon{color:#48c774}.panel.is-warning .panel-heading{background-color:#ffdd57;color:rgba(0,0,0,.7)}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ffdd57}.panel.is-warning .panel-block.is-active .panel-icon{color:#ffdd57}.panel.is-danger .panel-heading{background-color:#f14668;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#f14668}.panel.is-danger .panel-block.is-active .panel-icon{color:#f14668}.panel-block:not(:last-child),.panel-tabs:not(:last-child){border-bottom:1px solid #ededed}.panel-heading{background-color:#ededed;border-radius:6px 6px 0 0;color:#363636;font-size:1.25em;font-weight:700;line-height:1.25;padding:.75em 1em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#4a4a4a}.panel-list a:hover{color:#3273dc}.panel-block{align-items:center;color:#363636;display:flex;justify-content:flex-start;padding:.5em .75em}.panel-block input[type=checkbox]{margin-right:.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#3273dc;color:#363636}.panel-block.is-active .panel-icon{color:#3273dc}.panel-block:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#7a7a7a;margin-right:.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#4a4a4a;display:flex;justify-content:center;margin-bottom:-1px;padding:.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#363636;color:#363636}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#3273dc;color:#3273dc}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:.75em;padding-right:.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:.75em}.tabs .icon:first-child{margin-right:.5em}.tabs .icon:last-child{margin-left:.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:transparent!important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.tabs.is-toggle li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.tabs.is-toggle li.is-active a{background-color:#3273dc;border-color:#3273dc;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:290486px;border-top-left-radius:290486px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:290486px;border-top-right-radius:290486px;padding-right:1.25em}.tabs.is-small{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0}.columns.is-mobile>.column.is-1{flex:none;width:8.33333%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333%}.columns.is-mobile>.column.is-2{flex:none;width:16.66667%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66667%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333%}.columns.is-mobile>.column.is-5{flex:none;width:41.66667%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66667%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333%}.columns.is-mobile>.column.is-8{flex:none;width:66.66667%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66667%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333%}.columns.is-mobile>.column.is-11{flex:none;width:91.66667%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66667%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width:768px){.column.is-narrow-mobile{flex:none}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0}.column.is-1-mobile{flex:none;width:8.33333%}.column.is-offset-1-mobile{margin-left:8.33333%}.column.is-2-mobile{flex:none;width:16.66667%}.column.is-offset-2-mobile{margin-left:16.66667%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333%}.column.is-offset-4-mobile{margin-left:33.33333%}.column.is-5-mobile{flex:none;width:41.66667%}.column.is-offset-5-mobile{margin-left:41.66667%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333%}.column.is-offset-7-mobile{margin-left:58.33333%}.column.is-8-mobile{flex:none;width:66.66667%}.column.is-offset-8-mobile{margin-left:66.66667%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333%}.column.is-offset-10-mobile{margin-left:83.33333%}.column.is-11-mobile{flex:none;width:91.66667%}.column.is-offset-11-mobile{margin-left:91.66667%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width:769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66667%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66667%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66667%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66667%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66667%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66667%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66667%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66667%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width:1023px){.column.is-narrow-touch{flex:none}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0}.column.is-1-touch{flex:none;width:8.33333%}.column.is-offset-1-touch{margin-left:8.33333%}.column.is-2-touch{flex:none;width:16.66667%}.column.is-offset-2-touch{margin-left:16.66667%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333%}.column.is-offset-4-touch{margin-left:33.33333%}.column.is-5-touch{flex:none;width:41.66667%}.column.is-offset-5-touch{margin-left:41.66667%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333%}.column.is-offset-7-touch{margin-left:58.33333%}.column.is-8-touch{flex:none;width:66.66667%}.column.is-offset-8-touch{margin-left:66.66667%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333%}.column.is-offset-10-touch{margin-left:83.33333%}.column.is-11-touch{flex:none;width:91.66667%}.column.is-offset-11-touch{margin-left:91.66667%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width:1024px){.column.is-narrow-desktop{flex:none}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0}.column.is-1-desktop{flex:none;width:8.33333%}.column.is-offset-1-desktop{margin-left:8.33333%}.column.is-2-desktop{flex:none;width:16.66667%}.column.is-offset-2-desktop{margin-left:16.66667%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333%}.column.is-offset-4-desktop{margin-left:33.33333%}.column.is-5-desktop{flex:none;width:41.66667%}.column.is-offset-5-desktop{margin-left:41.66667%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333%}.column.is-offset-7-desktop{margin-left:58.33333%}.column.is-8-desktop{flex:none;width:66.66667%}.column.is-offset-8-desktop{margin-left:66.66667%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333%}.column.is-offset-10-desktop{margin-left:83.33333%}.column.is-11-desktop{flex:none;width:91.66667%}.column.is-offset-11-desktop{margin-left:91.66667%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width:1216px){.column.is-narrow-widescreen{flex:none}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0}.column.is-1-widescreen{flex:none;width:8.33333%}.column.is-offset-1-widescreen{margin-left:8.33333%}.column.is-2-widescreen{flex:none;width:16.66667%}.column.is-offset-2-widescreen{margin-left:16.66667%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333%}.column.is-offset-4-widescreen{margin-left:33.33333%}.column.is-5-widescreen{flex:none;width:41.66667%}.column.is-offset-5-widescreen{margin-left:41.66667%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333%}.column.is-offset-7-widescreen{margin-left:58.33333%}.column.is-8-widescreen{flex:none;width:66.66667%}.column.is-offset-8-widescreen{margin-left:66.66667%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333%}.column.is-offset-10-widescreen{margin-left:83.33333%}.column.is-11-widescreen{flex:none;width:91.66667%}.column.is-offset-11-widescreen{margin-left:91.66667%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width:1408px){.column.is-narrow-fullhd{flex:none}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0}.column.is-1-fullhd{flex:none;width:8.33333%}.column.is-offset-1-fullhd{margin-left:8.33333%}.column.is-2-fullhd{flex:none;width:16.66667%}.column.is-offset-2-fullhd{margin-left:16.66667%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333%}.column.is-offset-4-fullhd{margin-left:33.33333%}.column.is-5-fullhd{flex:none;width:41.66667%}.column.is-offset-5-fullhd{margin-left:41.66667%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333%}.column.is-offset-7-fullhd{margin-left:58.33333%}.column.is-8-fullhd{flex:none;width:66.66667%}.column.is-offset-8-fullhd{margin-left:66.66667%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333%}.column.is-offset-10-fullhd{margin-left:83.33333%}.column.is-11-fullhd{flex:none;width:91.66667%}.column.is-offset-11-fullhd{margin-left:91.66667%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0!important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width:769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width:1024px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap:0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable .column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap:0rem}@media screen and (max-width:768px){.columns.is-variable.is-0-mobile{--columnGap:0rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-0-tablet{--columnGap:0rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-0-tablet-only{--columnGap:0rem}}@media screen and (max-width:1023px){.columns.is-variable.is-0-touch{--columnGap:0rem}}@media screen and (min-width:1024px){.columns.is-variable.is-0-desktop{--columnGap:0rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-0-desktop-only{--columnGap:0rem}}@media screen and (min-width:1216px){.columns.is-variable.is-0-widescreen{--columnGap:0rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-0-widescreen-only{--columnGap:0rem}}@media screen and (min-width:1408px){.columns.is-variable.is-0-fullhd{--columnGap:0rem}}.columns.is-variable.is-1{--columnGap:0.25rem}@media screen and (max-width:768px){.columns.is-variable.is-1-mobile{--columnGap:0.25rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-1-tablet{--columnGap:0.25rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-1-tablet-only{--columnGap:0.25rem}}@media screen and (max-width:1023px){.columns.is-variable.is-1-touch{--columnGap:0.25rem}}@media screen and (min-width:1024px){.columns.is-variable.is-1-desktop{--columnGap:0.25rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-1-desktop-only{--columnGap:0.25rem}}@media screen and (min-width:1216px){.columns.is-variable.is-1-widescreen{--columnGap:0.25rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-1-widescreen-only{--columnGap:0.25rem}}@media screen and (min-width:1408px){.columns.is-variable.is-1-fullhd{--columnGap:0.25rem}}.columns.is-variable.is-2{--columnGap:0.5rem}@media screen and (max-width:768px){.columns.is-variable.is-2-mobile{--columnGap:0.5rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-2-tablet{--columnGap:0.5rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-2-tablet-only{--columnGap:0.5rem}}@media screen and (max-width:1023px){.columns.is-variable.is-2-touch{--columnGap:0.5rem}}@media screen and (min-width:1024px){.columns.is-variable.is-2-desktop{--columnGap:0.5rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-2-desktop-only{--columnGap:0.5rem}}@media screen and (min-width:1216px){.columns.is-variable.is-2-widescreen{--columnGap:0.5rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-2-widescreen-only{--columnGap:0.5rem}}@media screen and (min-width:1408px){.columns.is-variable.is-2-fullhd{--columnGap:0.5rem}}.columns.is-variable.is-3{--columnGap:0.75rem}@media screen and (max-width:768px){.columns.is-variable.is-3-mobile{--columnGap:0.75rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-3-tablet{--columnGap:0.75rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-3-tablet-only{--columnGap:0.75rem}}@media screen and (max-width:1023px){.columns.is-variable.is-3-touch{--columnGap:0.75rem}}@media screen and (min-width:1024px){.columns.is-variable.is-3-desktop{--columnGap:0.75rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-3-desktop-only{--columnGap:0.75rem}}@media screen and (min-width:1216px){.columns.is-variable.is-3-widescreen{--columnGap:0.75rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-3-widescreen-only{--columnGap:0.75rem}}@media screen and (min-width:1408px){.columns.is-variable.is-3-fullhd{--columnGap:0.75rem}}.columns.is-variable.is-4{--columnGap:1rem}@media screen and (max-width:768px){.columns.is-variable.is-4-mobile{--columnGap:1rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-4-tablet{--columnGap:1rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-4-tablet-only{--columnGap:1rem}}@media screen and (max-width:1023px){.columns.is-variable.is-4-touch{--columnGap:1rem}}@media screen and (min-width:1024px){.columns.is-variable.is-4-desktop{--columnGap:1rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-4-desktop-only{--columnGap:1rem}}@media screen and (min-width:1216px){.columns.is-variable.is-4-widescreen{--columnGap:1rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-4-widescreen-only{--columnGap:1rem}}@media screen and (min-width:1408px){.columns.is-variable.is-4-fullhd{--columnGap:1rem}}.columns.is-variable.is-5{--columnGap:1.25rem}@media screen and (max-width:768px){.columns.is-variable.is-5-mobile{--columnGap:1.25rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-5-tablet{--columnGap:1.25rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-5-tablet-only{--columnGap:1.25rem}}@media screen and (max-width:1023px){.columns.is-variable.is-5-touch{--columnGap:1.25rem}}@media screen and (min-width:1024px){.columns.is-variable.is-5-desktop{--columnGap:1.25rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-5-desktop-only{--columnGap:1.25rem}}@media screen and (min-width:1216px){.columns.is-variable.is-5-widescreen{--columnGap:1.25rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-5-widescreen-only{--columnGap:1.25rem}}@media screen and (min-width:1408px){.columns.is-variable.is-5-fullhd{--columnGap:1.25rem}}.columns.is-variable.is-6{--columnGap:1.5rem}@media screen and (max-width:768px){.columns.is-variable.is-6-mobile{--columnGap:1.5rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-6-tablet{--columnGap:1.5rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-6-tablet-only{--columnGap:1.5rem}}@media screen and (max-width:1023px){.columns.is-variable.is-6-touch{--columnGap:1.5rem}}@media screen and (min-width:1024px){.columns.is-variable.is-6-desktop{--columnGap:1.5rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-6-desktop-only{--columnGap:1.5rem}}@media screen and (min-width:1216px){.columns.is-variable.is-6-widescreen{--columnGap:1.5rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-6-widescreen-only{--columnGap:1.5rem}}@media screen and (min-width:1408px){.columns.is-variable.is-6-fullhd{--columnGap:1.5rem}}.columns.is-variable.is-7{--columnGap:1.75rem}@media screen and (max-width:768px){.columns.is-variable.is-7-mobile{--columnGap:1.75rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-7-tablet{--columnGap:1.75rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-7-tablet-only{--columnGap:1.75rem}}@media screen and (max-width:1023px){.columns.is-variable.is-7-touch{--columnGap:1.75rem}}@media screen and (min-width:1024px){.columns.is-variable.is-7-desktop{--columnGap:1.75rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-7-desktop-only{--columnGap:1.75rem}}@media screen and (min-width:1216px){.columns.is-variable.is-7-widescreen{--columnGap:1.75rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-7-widescreen-only{--columnGap:1.75rem}}@media screen and (min-width:1408px){.columns.is-variable.is-7-fullhd{--columnGap:1.75rem}}.columns.is-variable.is-8{--columnGap:2rem}@media screen and (max-width:768px){.columns.is-variable.is-8-mobile{--columnGap:2rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-8-tablet{--columnGap:2rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-8-tablet-only{--columnGap:2rem}}@media screen and (max-width:1023px){.columns.is-variable.is-8-touch{--columnGap:2rem}}@media screen and (min-width:1024px){.columns.is-variable.is-8-desktop{--columnGap:2rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-8-desktop-only{--columnGap:2rem}}@media screen and (min-width:1216px){.columns.is-variable.is-8-widescreen{--columnGap:2rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-8-widescreen-only{--columnGap:2rem}}@media screen and (min-width:1408px){.columns.is-variable.is-8-fullhd{--columnGap:2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:-webkit-min-content;min-height:-moz-min-content;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0!important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem!important}@media screen and (min-width:769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333%}.tile.is-2{flex:none;width:16.66667%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333%}.tile.is-5{flex:none;width:41.66667%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333%}.tile.is-8{flex:none;width:66.66667%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333%}.tile.is-11{flex:none;width:91.66667%}.tile.is-12{flex:none;width:100%}}.has-text-white{color:#fff!important}a.has-text-white:focus,a.has-text-white:hover{color:#e6e6e6!important}.has-background-white{background-color:#fff!important}.has-text-black{color:#0a0a0a!important}a.has-text-black:focus,a.has-text-black:hover{color:#000!important}.has-background-black{background-color:#0a0a0a!important}.has-text-light{color:#f5f5f5!important}a.has-text-light:focus,a.has-text-light:hover{color:#dbdbdb!important}.has-background-light{background-color:#f5f5f5!important}.has-text-dark{color:#363636!important}a.has-text-dark:focus,a.has-text-dark:hover{color:#1c1c1c!important}.has-background-dark{background-color:#363636!important}.has-text-primary{color:#00d1b2!important}a.has-text-primary:focus,a.has-text-primary:hover{color:#009e86!important}.has-background-primary{background-color:#00d1b2!important}.has-text-primary-light{color:#ebfffc!important}a.has-text-primary-light:focus,a.has-text-primary-light:hover{color:#b8fff4!important}.has-background-primary-light{background-color:#ebfffc!important}.has-text-primary-dark{color:#00947e!important}a.has-text-primary-dark:focus,a.has-text-primary-dark:hover{color:#00c7a9!important}.has-background-primary-dark{background-color:#00947e!important}.has-text-link{color:#3273dc!important}a.has-text-link:focus,a.has-text-link:hover{color:#205bbc!important}.has-background-link{background-color:#3273dc!important}.has-text-link-light{color:#eef3fc!important}a.has-text-link-light:focus,a.has-text-link-light:hover{color:#c2d5f5!important}.has-background-link-light{background-color:#eef3fc!important}.has-text-link-dark{color:#2160c4!important}a.has-text-link-dark:focus,a.has-text-link-dark:hover{color:#3b79de!important}.has-background-link-dark{background-color:#2160c4!important}.has-text-info{color:#3298dc!important}a.has-text-info:focus,a.has-text-info:hover{color:#207dbc!important}.has-background-info{background-color:#3298dc!important}.has-text-info-light{color:#eef6fc!important}a.has-text-info-light:focus,a.has-text-info-light:hover{color:#c2e0f5!important}.has-background-info-light{background-color:#eef6fc!important}.has-text-info-dark{color:#1d72aa!important}a.has-text-info-dark:focus,a.has-text-info-dark:hover{color:#248fd6!important}.has-background-info-dark{background-color:#1d72aa!important}.has-text-success{color:#48c774!important}a.has-text-success:focus,a.has-text-success:hover{color:#34a85c!important}.has-background-success{background-color:#48c774!important}.has-text-success-light{color:#effaf3!important}a.has-text-success-light:focus,a.has-text-success-light:hover{color:#c8eed6!important}.has-background-success-light{background-color:#effaf3!important}.has-text-success-dark{color:#257942!important}a.has-text-success-dark:focus,a.has-text-success-dark:hover{color:#31a058!important}.has-background-success-dark{background-color:#257942!important}.has-text-warning{color:#ffdd57!important}a.has-text-warning:focus,a.has-text-warning:hover{color:#ffd324!important}.has-background-warning{background-color:#ffdd57!important}.has-text-warning-light{color:#fffbeb!important}a.has-text-warning-light:focus,a.has-text-warning-light:hover{color:#fff1b8!important}.has-background-warning-light{background-color:#fffbeb!important}.has-text-warning-dark{color:#947600!important}a.has-text-warning-dark:focus,a.has-text-warning-dark:hover{color:#c79f00!important}.has-background-warning-dark{background-color:#947600!important}.has-text-danger{color:#f14668!important}a.has-text-danger:focus,a.has-text-danger:hover{color:#ee1742!important}.has-background-danger{background-color:#f14668!important}.has-text-danger-light{color:#feecf0!important}a.has-text-danger-light:focus,a.has-text-danger-light:hover{color:#fabdc9!important}.has-background-danger-light{background-color:#feecf0!important}.has-text-danger-dark{color:#cc0f35!important}a.has-text-danger-dark:focus,a.has-text-danger-dark:hover{color:#ee2049!important}.has-background-danger-dark{background-color:#cc0f35!important}.has-text-black-bis{color:#121212!important}.has-background-black-bis{background-color:#121212!important}.has-text-black-ter{color:#242424!important}.has-background-black-ter{background-color:#242424!important}.has-text-grey-darker{color:#363636!important}.has-background-grey-darker{background-color:#363636!important}.has-text-grey-dark{color:#4a4a4a!important}.has-background-grey-dark{background-color:#4a4a4a!important}.has-text-grey{color:#7a7a7a!important}.has-background-grey{background-color:#7a7a7a!important}.has-text-grey-light{color:#b5b5b5!important}.has-background-grey-light{background-color:#b5b5b5!important}.has-text-grey-lighter{color:#dbdbdb!important}.has-background-grey-lighter{background-color:#dbdbdb!important}.has-text-white-ter{color:#f5f5f5!important}.has-background-white-ter{background-color:#f5f5f5!important}.has-text-white-bis{color:#fafafa!important}.has-background-white-bis{background-color:#fafafa!important}.is-flex-direction-row{flex-direction:row!important}.is-flex-direction-row-reverse{flex-direction:row-reverse!important}.is-flex-direction-column{flex-direction:column!important}.is-flex-direction-column-reverse{flex-direction:column-reverse!important}.is-flex-wrap-nowrap{flex-wrap:nowrap!important}.is-flex-wrap-wrap{flex-wrap:wrap!important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse!important}.is-justify-content-flex-start{justify-content:flex-start!important}.is-justify-content-flex-end{justify-content:flex-end!important}.is-justify-content-center{justify-content:center!important}.is-justify-content-space-between{justify-content:space-between!important}.is-justify-content-space-around{justify-content:space-around!important}.is-justify-content-space-evenly{justify-content:space-evenly!important}.is-justify-content-start{justify-content:start!important}.is-justify-content-end{justify-content:end!important}.is-justify-content-left{justify-content:left!important}.is-justify-content-right{justify-content:right!important}.is-align-content-flex-start{align-content:flex-start!important}.is-align-content-flex-end{align-content:flex-end!important}.is-align-content-center{align-content:center!important}.is-align-content-space-between{align-content:space-between!important}.is-align-content-space-around{align-content:space-around!important}.is-align-content-space-evenly{align-content:space-evenly!important}.is-align-content-stretch{align-content:stretch!important}.is-align-content-start{align-content:start!important}.is-align-content-end{align-content:end!important}.is-align-content-baseline{align-content:baseline!important}.is-align-items-stretch{align-items:stretch!important}.is-align-items-flex-start{align-items:flex-start!important}.is-align-items-flex-end{align-items:flex-end!important}.is-align-items-center{align-items:center!important}.is-align-items-baseline{align-items:baseline!important}.is-align-items-start{align-items:start!important}.is-align-items-end{align-items:end!important}.is-align-items-self-start{align-items:self-start!important}.is-align-items-self-end{align-items:self-end!important}.is-align-self-auto{align-self:auto!important}.is-align-self-flex-start{align-self:flex-start!important}.is-align-self-flex-end{align-self:flex-end!important}.is-align-self-center{align-self:center!important}.is-align-self-baseline{align-self:baseline!important}.is-align-self-stretch{align-self:stretch!important}.is-flex-grow-0{flex-grow:0!important}.is-flex-grow-1{flex-grow:1!important}.is-flex-grow-2{flex-grow:2!important}.is-flex-grow-3{flex-grow:3!important}.is-flex-grow-4{flex-grow:4!important}.is-flex-grow-5{flex-grow:5!important}.is-flex-shrink-0{flex-shrink:0!important}.is-flex-shrink-1{flex-shrink:1!important}.is-flex-shrink-2{flex-shrink:2!important}.is-flex-shrink-3{flex-shrink:3!important}.is-flex-shrink-4{flex-shrink:4!important}.is-flex-shrink-5{flex-shrink:5!important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left!important}.is-pulled-right{float:right!important}.is-radiusless{border-radius:0!important}.is-shadowless{box-shadow:none!important}.is-clickable{cursor:pointer!important}.is-clipped{overflow:hidden!important}.is-relative{position:relative!important}.is-marginless{margin:0!important}.is-paddingless{padding:0!important}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.m-1{margin:.25rem!important}.mt-1{margin-top:.25rem!important}.mr-1{margin-right:.25rem!important}.mb-1{margin-bottom:.25rem!important}.ml-1{margin-left:.25rem!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-2{margin:.5rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-3{margin:.75rem!important}.mt-3{margin-top:.75rem!important}.mr-3{margin-right:.75rem!important}.mb-3{margin-bottom:.75rem!important}.ml-3{margin-left:.75rem!important}.mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.m-4{margin:1rem!important}.mt-4{margin-top:1rem!important}.mr-4{margin-right:1rem!important}.mb-4{margin-bottom:1rem!important}.ml-4{margin-left:1rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.m-5{margin:1.5rem!important}.mt-5{margin-top:1.5rem!important}.mr-5{margin-right:1.5rem!important}.mb-5{margin-bottom:1.5rem!important}.ml-5{margin-left:1.5rem!important}.mx-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.my-5{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-6{margin:3rem!important}.mt-6{margin-top:3rem!important}.mr-6{margin-right:3rem!important}.mb-6{margin-bottom:3rem!important}.ml-6{margin-left:3rem!important}.mx-6{margin-left:3rem!important;margin-right:3rem!important}.my-6{margin-top:3rem!important;margin-bottom:3rem!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.p-1{padding:.25rem!important}.pt-1{padding-top:.25rem!important}.pr-1{padding-right:.25rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-2{padding:.5rem!important}.pt-2{padding-top:.5rem!important}.pr-2{padding-right:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pl-2{padding-left:.5rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-3{padding:.75rem!important}.pt-3{padding-top:.75rem!important}.pr-3{padding-right:.75rem!important}.pb-3{padding-bottom:.75rem!important}.pl-3{padding-left:.75rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.p-4{padding:1rem!important}.pt-4{padding-top:1rem!important}.pr-4{padding-right:1rem!important}.pb-4{padding-bottom:1rem!important}.pl-4{padding-left:1rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.p-5{padding:1.5rem!important}.pt-5{padding-top:1.5rem!important}.pr-5{padding-right:1.5rem!important}.pb-5{padding-bottom:1.5rem!important}.pl-5{padding-left:1.5rem!important}.px-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-5{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-6{padding:3rem!important}.pt-6{padding-top:3rem!important}.pr-6{padding-right:3rem!important}.pb-6{padding-bottom:3rem!important}.pl-6{padding-left:3rem!important}.px-6{padding-left:3rem!important;padding-right:3rem!important}.py-6{padding-top:3rem!important;padding-bottom:3rem!important}.is-size-1{font-size:3rem!important}.is-size-2{font-size:2.5rem!important}.is-size-3{font-size:2rem!important}.is-size-4{font-size:1.5rem!important}.is-size-5{font-size:1.25rem!important}.is-size-6{font-size:1rem!important}.is-size-7{font-size:.75rem!important}@media screen and (max-width:768px){.is-size-1-mobile{font-size:3rem!important}.is-size-2-mobile{font-size:2.5rem!important}.is-size-3-mobile{font-size:2rem!important}.is-size-4-mobile{font-size:1.5rem!important}.is-size-5-mobile{font-size:1.25rem!important}.is-size-6-mobile{font-size:1rem!important}.is-size-7-mobile{font-size:.75rem!important}}@media screen and (min-width:769px),print{.is-size-1-tablet{font-size:3rem!important}.is-size-2-tablet{font-size:2.5rem!important}.is-size-3-tablet{font-size:2rem!important}.is-size-4-tablet{font-size:1.5rem!important}.is-size-5-tablet{font-size:1.25rem!important}.is-size-6-tablet{font-size:1rem!important}.is-size-7-tablet{font-size:.75rem!important}}@media screen and (max-width:1023px){.is-size-1-touch{font-size:3rem!important}.is-size-2-touch{font-size:2.5rem!important}.is-size-3-touch{font-size:2rem!important}.is-size-4-touch{font-size:1.5rem!important}.is-size-5-touch{font-size:1.25rem!important}.is-size-6-touch{font-size:1rem!important}.is-size-7-touch{font-size:.75rem!important}}@media screen and (min-width:1024px){.is-size-1-desktop{font-size:3rem!important}.is-size-2-desktop{font-size:2.5rem!important}.is-size-3-desktop{font-size:2rem!important}.is-size-4-desktop{font-size:1.5rem!important}.is-size-5-desktop{font-size:1.25rem!important}.is-size-6-desktop{font-size:1rem!important}.is-size-7-desktop{font-size:.75rem!important}}@media screen and (min-width:1216px){.is-size-1-widescreen{font-size:3rem!important}.is-size-2-widescreen{font-size:2.5rem!important}.is-size-3-widescreen{font-size:2rem!important}.is-size-4-widescreen{font-size:1.5rem!important}.is-size-5-widescreen{font-size:1.25rem!important}.is-size-6-widescreen{font-size:1rem!important}.is-size-7-widescreen{font-size:.75rem!important}}@media screen and (min-width:1408px){.is-size-1-fullhd{font-size:3rem!important}.is-size-2-fullhd{font-size:2.5rem!important}.is-size-3-fullhd{font-size:2rem!important}.is-size-4-fullhd{font-size:1.5rem!important}.is-size-5-fullhd{font-size:1.25rem!important}.is-size-6-fullhd{font-size:1rem!important}.is-size-7-fullhd{font-size:.75rem!important}}.has-text-centered{text-align:center!important}.has-text-justified{text-align:justify!important}.has-text-left{text-align:left!important}.has-text-right{text-align:right!important}@media screen and (max-width:768px){.has-text-centered-mobile{text-align:center!important}}@media screen and (min-width:769px),print{.has-text-centered-tablet{text-align:center!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-centered-tablet-only{text-align:center!important}}@media screen and (max-width:1023px){.has-text-centered-touch{text-align:center!important}}@media screen and (min-width:1024px){.has-text-centered-desktop{text-align:center!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-centered-desktop-only{text-align:center!important}}@media screen and (min-width:1216px){.has-text-centered-widescreen{text-align:center!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-centered-widescreen-only{text-align:center!important}}@media screen and (min-width:1408px){.has-text-centered-fullhd{text-align:center!important}}@media screen and (max-width:768px){.has-text-justified-mobile{text-align:justify!important}}@media screen and (min-width:769px),print{.has-text-justified-tablet{text-align:justify!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-justified-tablet-only{text-align:justify!important}}@media screen and (max-width:1023px){.has-text-justified-touch{text-align:justify!important}}@media screen and (min-width:1024px){.has-text-justified-desktop{text-align:justify!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-justified-desktop-only{text-align:justify!important}}@media screen and (min-width:1216px){.has-text-justified-widescreen{text-align:justify!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-justified-widescreen-only{text-align:justify!important}}@media screen and (min-width:1408px){.has-text-justified-fullhd{text-align:justify!important}}@media screen and (max-width:768px){.has-text-left-mobile{text-align:left!important}}@media screen and (min-width:769px),print{.has-text-left-tablet{text-align:left!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-left-tablet-only{text-align:left!important}}@media screen and (max-width:1023px){.has-text-left-touch{text-align:left!important}}@media screen and (min-width:1024px){.has-text-left-desktop{text-align:left!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-left-desktop-only{text-align:left!important}}@media screen and (min-width:1216px){.has-text-left-widescreen{text-align:left!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-left-widescreen-only{text-align:left!important}}@media screen and (min-width:1408px){.has-text-left-fullhd{text-align:left!important}}@media screen and (max-width:768px){.has-text-right-mobile{text-align:right!important}}@media screen and (min-width:769px),print{.has-text-right-tablet{text-align:right!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-right-tablet-only{text-align:right!important}}@media screen and (max-width:1023px){.has-text-right-touch{text-align:right!important}}@media screen and (min-width:1024px){.has-text-right-desktop{text-align:right!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-right-desktop-only{text-align:right!important}}@media screen and (min-width:1216px){.has-text-right-widescreen{text-align:right!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-right-widescreen-only{text-align:right!important}}@media screen and (min-width:1408px){.has-text-right-fullhd{text-align:right!important}}.is-capitalized{text-transform:capitalize!important}.is-lowercase{text-transform:lowercase!important}.is-uppercase{text-transform:uppercase!important}.is-italic{font-style:italic!important}.has-text-weight-light{font-weight:300!important}.has-text-weight-normal{font-weight:400!important}.has-text-weight-medium{font-weight:500!important}.has-text-weight-semibold{font-weight:600!important}.has-text-weight-bold{font-weight:700!important}.is-family-primary{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-secondary{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-sans-serif{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-monospace{font-family:monospace!important}.is-family-code{font-family:monospace!important}.is-block{display:block!important}@media screen and (max-width:768px){.is-block-mobile{display:block!important}}@media screen and (min-width:769px),print{.is-block-tablet{display:block!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-block-tablet-only{display:block!important}}@media screen and (max-width:1023px){.is-block-touch{display:block!important}}@media screen and (min-width:1024px){.is-block-desktop{display:block!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-block-desktop-only{display:block!important}}@media screen and (min-width:1216px){.is-block-widescreen{display:block!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-block-widescreen-only{display:block!important}}@media screen and (min-width:1408px){.is-block-fullhd{display:block!important}}.is-flex{display:flex!important}@media screen and (max-width:768px){.is-flex-mobile{display:flex!important}}@media screen and (min-width:769px),print{.is-flex-tablet{display:flex!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-flex-tablet-only{display:flex!important}}@media screen and (max-width:1023px){.is-flex-touch{display:flex!important}}@media screen and (min-width:1024px){.is-flex-desktop{display:flex!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-flex-desktop-only{display:flex!important}}@media screen and (min-width:1216px){.is-flex-widescreen{display:flex!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-flex-widescreen-only{display:flex!important}}@media screen and (min-width:1408px){.is-flex-fullhd{display:flex!important}}.is-inline{display:inline!important}@media screen and (max-width:768px){.is-inline-mobile{display:inline!important}}@media screen and (min-width:769px),print{.is-inline-tablet{display:inline!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-tablet-only{display:inline!important}}@media screen and (max-width:1023px){.is-inline-touch{display:inline!important}}@media screen and (min-width:1024px){.is-inline-desktop{display:inline!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-desktop-only{display:inline!important}}@media screen and (min-width:1216px){.is-inline-widescreen{display:inline!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-widescreen-only{display:inline!important}}@media screen and (min-width:1408px){.is-inline-fullhd{display:inline!important}}.is-inline-block{display:inline-block!important}@media screen and (max-width:768px){.is-inline-block-mobile{display:inline-block!important}}@media screen and (min-width:769px),print{.is-inline-block-tablet{display:inline-block!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-block-tablet-only{display:inline-block!important}}@media screen and (max-width:1023px){.is-inline-block-touch{display:inline-block!important}}@media screen and (min-width:1024px){.is-inline-block-desktop{display:inline-block!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-block-desktop-only{display:inline-block!important}}@media screen and (min-width:1216px){.is-inline-block-widescreen{display:inline-block!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-block-widescreen-only{display:inline-block!important}}@media screen and (min-width:1408px){.is-inline-block-fullhd{display:inline-block!important}}.is-inline-flex{display:inline-flex!important}@media screen and (max-width:768px){.is-inline-flex-mobile{display:inline-flex!important}}@media screen and (min-width:769px),print{.is-inline-flex-tablet{display:inline-flex!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-flex-tablet-only{display:inline-flex!important}}@media screen and (max-width:1023px){.is-inline-flex-touch{display:inline-flex!important}}@media screen and (min-width:1024px){.is-inline-flex-desktop{display:inline-flex!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-flex-desktop-only{display:inline-flex!important}}@media screen and (min-width:1216px){.is-inline-flex-widescreen{display:inline-flex!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-flex-widescreen-only{display:inline-flex!important}}@media screen and (min-width:1408px){.is-inline-flex-fullhd{display:inline-flex!important}}.is-hidden{display:none!important}.is-sr-only{border:none!important;clip:rect(0,0,0,0)!important;height:.01em!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:.01em!important}@media screen and (max-width:768px){.is-hidden-mobile{display:none!important}}@media screen and (min-width:769px),print{.is-hidden-tablet{display:none!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-hidden-tablet-only{display:none!important}}@media screen and (max-width:1023px){.is-hidden-touch{display:none!important}}@media screen and (min-width:1024px){.is-hidden-desktop{display:none!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-hidden-desktop-only{display:none!important}}@media screen and (min-width:1216px){.is-hidden-widescreen{display:none!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-hidden-widescreen-only{display:none!important}}@media screen and (min-width:1408px){.is-hidden-fullhd{display:none!important}}.is-invisible{visibility:hidden!important}@media screen and (max-width:768px){.is-invisible-mobile{visibility:hidden!important}}@media screen and (min-width:769px),print{.is-invisible-tablet{visibility:hidden!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-invisible-tablet-only{visibility:hidden!important}}@media screen and (max-width:1023px){.is-invisible-touch{visibility:hidden!important}}@media screen and (min-width:1024px){.is-invisible-desktop{visibility:hidden!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-invisible-desktop-only{visibility:hidden!important}}@media screen and (min-width:1216px){.is-invisible-widescreen{visibility:hidden!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-invisible-widescreen-only{visibility:hidden!important}}@media screen and (min-width:1408px){.is-invisible-fullhd{visibility:hidden!important}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:0 0}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width:1023px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,.7)}.hero.is-white .navbar-link.is-active,.hero.is-white .navbar-link:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg,#e6e6e6 0,#fff 71%,#fff 100%)}@media screen and (max-width:768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg,#e6e6e6 0,#fff 71%,#fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,.7)}.hero.is-black .navbar-link.is-active,.hero.is-black .navbar-link:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black a.navbar-item:hover{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg,#000 0,#0a0a0a 71%,#181616 100%)}@media screen and (max-width:768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg,#000 0,#0a0a0a 71%,#181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:rgba(0,0,0,.7)}.hero.is-light .subtitle{color:rgba(0,0,0,.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,.7)}@media screen and (max-width:1023px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(0,0,0,.7)}.hero.is-light .navbar-link.is-active,.hero.is-light .navbar-link:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.hero.is-light .tabs a{color:rgba(0,0,0,.7);opacity:.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,.7)}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,.7);border-color:rgba(0,0,0,.7);color:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg,#dfd8d9 0,#f5f5f5 71%,#fff 100%)}@media screen and (max-width:768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg,#dfd8d9 0,#f5f5f5 71%,#fff 100%)}}.hero.is-dark{background-color:#363636;color:#fff}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong{color:inherit}.hero.is-dark .title{color:#fff}.hero.is-dark .subtitle{color:rgba(255,255,255,.9)}.hero.is-dark .subtitle a:not(.button),.hero.is-dark .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-dark .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.hero.is-dark .navbar-link{color:rgba(255,255,255,.7)}.hero.is-dark .navbar-link.is-active,.hero.is-dark .navbar-link:hover,.hero.is-dark a.navbar-item.is-active,.hero.is-dark a.navbar-item:hover{background-color:#292929;color:#fff}.hero.is-dark .tabs a{color:#fff;opacity:.9}.hero.is-dark .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a{opacity:1}.hero.is-dark .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a{color:#fff}.hero.is-dark .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363636}.hero.is-dark.is-bold{background-image:linear-gradient(141deg,#1f191a 0,#363636 71%,#46403f 100%)}@media screen and (max-width:768px){.hero.is-dark.is-bold .navbar-menu{background-image:linear-gradient(141deg,#1f191a 0,#363636 71%,#46403f 100%)}}.hero.is-primary{background-color:#00d1b2;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong{color:inherit}.hero.is-primary .title{color:#fff}.hero.is-primary .subtitle{color:rgba(255,255,255,.9)}.hero.is-primary .subtitle a:not(.button),.hero.is-primary .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-primary .navbar-menu{background-color:#00d1b2}}.hero.is-primary .navbar-item,.hero.is-primary .navbar-link{color:rgba(255,255,255,.7)}.hero.is-primary .navbar-link.is-active,.hero.is-primary .navbar-link:hover,.hero.is-primary a.navbar-item.is-active,.hero.is-primary a.navbar-item:hover{background-color:#00b89c;color:#fff}.hero.is-primary .tabs a{color:#fff;opacity:.9}.hero.is-primary .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a{opacity:1}.hero.is-primary .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#00d1b2}.hero.is-primary.is-bold{background-image:linear-gradient(141deg,#009e6c 0,#00d1b2 71%,#00e7eb 100%)}@media screen and (max-width:768px){.hero.is-primary.is-bold .navbar-menu{background-image:linear-gradient(141deg,#009e6c 0,#00d1b2 71%,#00e7eb 100%)}}.hero.is-link{background-color:#3273dc;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-link .navbar-menu{background-color:#3273dc}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,.7)}.hero.is-link .navbar-link.is-active,.hero.is-link .navbar-link:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link a.navbar-item:hover{background-color:#2366d1;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#3273dc}.hero.is-link.is-bold{background-image:linear-gradient(141deg,#1577c6 0,#3273dc 71%,#4366e5 100%)}@media screen and (max-width:768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg,#1577c6 0,#3273dc 71%,#4366e5 100%)}}.hero.is-info{background-color:#3298dc;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-info .navbar-menu{background-color:#3298dc}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,.7)}.hero.is-info .navbar-link.is-active,.hero.is-info .navbar-link:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info a.navbar-item:hover{background-color:#238cd1;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#3298dc}.hero.is-info.is-bold{background-image:linear-gradient(141deg,#159dc6 0,#3298dc 71%,#4389e5 100%)}@media screen and (max-width:768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg,#159dc6 0,#3298dc 71%,#4389e5 100%)}}.hero.is-success{background-color:#48c774;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-success .navbar-menu{background-color:#48c774}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,.7)}.hero.is-success .navbar-link.is-active,.hero.is-success .navbar-link:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success a.navbar-item:hover{background-color:#3abb67;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#48c774}.hero.is-success.is-bold{background-image:linear-gradient(141deg,#29b342 0,#48c774 71%,#56d296 100%)}@media screen and (max-width:768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg,#29b342 0,#48c774 71%,#56d296 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,.7)}@media screen and (max-width:1023px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,.7)}.hero.is-warning .navbar-link.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,.7);opacity:.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,.7);border-color:rgba(0,0,0,.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg,#ffaf24 0,#ffdd57 71%,#fffa70 100%)}@media screen and (max-width:768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg,#ffaf24 0,#ffdd57 71%,#fffa70 100%)}}.hero.is-danger{background-color:#f14668;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-danger .navbar-menu{background-color:#f14668}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,.7)}.hero.is-danger .navbar-link.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger a.navbar-item:hover{background-color:#ef2e55;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#f14668}.hero.is-danger.is-bold{background-image:linear-gradient(141deg,#fa0a62 0,#f14668 71%,#f7595f 100%)}@media screen and (max-width:768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg,#fa0a62 0,#f14668 71%,#f7595f 100%)}}.hero.is-small .hero-body{padding:1.5rem}@media screen and (min-width:769px),print{.hero.is-medium .hero-body{padding:9rem 1.5rem}}@media screen and (min-width:769px),print{.hero.is-large .hero-body{padding:18rem 1.5rem}}.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body,.hero.is-halfheight .hero-body{align-items:center;display:flex}.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container,.hero.is-halfheight .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%,-50%,0)}.hero-video.is-transparent{opacity:.3}@media screen and (max-width:768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width:768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:.75rem}}@media screen and (min-width:769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-foot,.hero-head{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}.section{padding:3rem 1.5rem}@media screen and (min-width:1024px){.section.is-medium{padding:9rem 1.5rem}.section.is-large{padding:18rem 1.5rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem} \ No newline at end of file +/*! bulma.io v0.9.2 | MIT License | github.com/jgthms/bulma */.button,.file-cta,.file-name,.input,.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous,.select select,.textarea{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(.5em - 1px);padding-left:calc(.75em - 1px);padding-right:calc(.75em - 1px);padding-top:calc(.5em - 1px);position:relative;vertical-align:top}.button:active,.button:focus,.file-cta:active,.file-cta:focus,.file-name:active,.file-name:focus,.input:active,.input:focus,.is-active.button,.is-active.file-cta,.is-active.file-name,.is-active.input,.is-active.pagination-ellipsis,.is-active.pagination-link,.is-active.pagination-next,.is-active.pagination-previous,.is-active.textarea,.is-focused.button,.is-focused.file-cta,.is-focused.file-name,.is-focused.input,.is-focused.pagination-ellipsis,.is-focused.pagination-link,.is-focused.pagination-next,.is-focused.pagination-previous,.is-focused.textarea,.pagination-ellipsis:active,.pagination-ellipsis:focus,.pagination-link:active,.pagination-link:focus,.pagination-next:active,.pagination-next:focus,.pagination-previous:active,.pagination-previous:focus,.select select.is-active,.select select.is-focused,.select select:active,.select select:focus,.textarea:active,.textarea:focus{outline:0}.button[disabled],.file-cta[disabled],.file-name[disabled],.input[disabled],.pagination-ellipsis[disabled],.pagination-link[disabled],.pagination-next[disabled],.pagination-previous[disabled],.select fieldset[disabled] select,.select select[disabled],.textarea[disabled],fieldset[disabled] .button,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .input,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-previous,fieldset[disabled] .select select,fieldset[disabled] .textarea{cursor:not-allowed}.breadcrumb,.button,.file,.is-unselectable,.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous,.tabs{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid transparent;border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:.625em;margin-top:-.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:.625em}.block:not(:last-child),.box:not(:last-child),.breadcrumb:not(:last-child),.content:not(:last-child),.highlight:not(:last-child),.level:not(:last-child),.message:not(:last-child),.notification:not(:last-child),.pagination:not(:last-child),.progress:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.tabs:not(:last-child),.title:not(:last-child){margin-bottom:1.5rem}.delete,.modal-close{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,.2);border:none;border-radius:290486px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:0;position:relative;vertical-align:top;width:20px}.delete::after,.delete::before,.modal-close::after,.modal-close::before{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.delete::before,.modal-close::before{height:2px;width:50%}.delete::after,.modal-close::after{height:50%;width:2px}.delete:focus,.delete:hover,.modal-close:focus,.modal-close:hover{background-color:rgba(10,10,10,.3)}.delete:active,.modal-close:active{background-color:rgba(10,10,10,.4)}.is-small.delete,.is-small.modal-close{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.delete,.is-medium.modal-close{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.delete,.is-large.modal-close{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.button.is-loading::after,.control.is-loading::after,.loader,.select.is-loading::after{-webkit-animation:spinAround .5s infinite linear;animation:spinAround .5s infinite linear;border:2px solid #dbdbdb;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.image.is-16by9 .has-ratio,.image.is-16by9 img,.image.is-1by1 .has-ratio,.image.is-1by1 img,.image.is-1by2 .has-ratio,.image.is-1by2 img,.image.is-1by3 .has-ratio,.image.is-1by3 img,.image.is-2by1 .has-ratio,.image.is-2by1 img,.image.is-2by3 .has-ratio,.image.is-2by3 img,.image.is-3by1 .has-ratio,.image.is-3by1 img,.image.is-3by2 .has-ratio,.image.is-3by2 img,.image.is-3by4 .has-ratio,.image.is-3by4 img,.image.is-3by5 .has-ratio,.image.is-3by5 img,.image.is-4by3 .has-ratio,.image.is-4by3 img,.image.is-4by5 .has-ratio,.image.is-4by5 img,.image.is-5by3 .has-ratio,.image.is-5by3 img,.image.is-5by4 .has-ratio,.image.is-5by4 img,.image.is-9by16 .has-ratio,.image.is-9by16 img,.image.is-square .has-ratio,.image.is-square img,.is-overlay,.modal,.modal-background{bottom:0;left:0;position:absolute;right:0;top:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */blockquote,body,dd,dl,dt,fieldset,figure,h1,h2,h3,h4,h5,h6,hr,html,iframe,legend,li,ol,p,pre,textarea,ul{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,::after,::before{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}html{background-color:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:hidden;overflow-y:scroll;text-rendering:optimizeLegibility;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,optgroup,select,textarea{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:monospace}body{color:#4a4a4a;font-size:1em;font-weight:400;line-height:1.5}a{color:#3273dc;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:#f5f5f5;color:#da1039;font-size:.875em;font-weight:400;padding:.25em .5em .25em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type=checkbox],input[type=radio]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#363636;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#4a4a4a;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:inherit}table th{color:#363636}@-webkit-keyframes spinAround{from{transform:rotate(0)}to{transform:rotate(359deg)}}@keyframes spinAround{from{transform:rotate(0)}to{transform:rotate(359deg)}}.box{background-color:#fff;border-radius:6px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);color:#4a4a4a;display:block;padding:1.25rem}a.box:focus,a.box:hover{box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px #3273dc}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,.2),0 0 0 1px #3273dc}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#363636;cursor:pointer;justify-content:center;padding-bottom:calc(.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-large,.button .icon.is-medium,.button .icon.is-small{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-.5em - 1px);margin-right:calc(-.5em - 1px)}.button.is-hovered,.button:hover{border-color:#b5b5b5;color:#363636}.button.is-focused,.button:focus{border-color:#3273dc;color:#363636}.button.is-focused:not(:active),.button:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.button.is-active,.button:active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#4a4a4a;text-decoration:underline}.button.is-text.is-focused,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text:hover{background-color:#f5f5f5;color:#363636}.button.is-text.is-active,.button.is-text:active{background-color:#e8e8e8;color:#363636}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-ghost{background:0 0;border-color:transparent;color:#3273dc;text-decoration:none}.button.is-ghost.is-hovered,.button.is-ghost:hover{color:#3273dc;text-decoration:underline}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white.is-hovered,.button.is-white:hover{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white.is-focused,.button.is-white:focus{border-color:transparent;color:#0a0a0a}.button.is-white.is-focused:not(:active),.button.is-white:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.button.is-white.is-active,.button.is-white:active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:transparent;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-hovered,.button.is-white.is-inverted:hover{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined.is-focused,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-white.is-outlined.is-loading.is-focused::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading:hover::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined.is-focused,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined:hover{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black.is-hovered,.button.is-black:hover{background-color:#040404;border-color:transparent;color:#fff}.button.is-black.is-focused,.button.is-black:focus{border-color:transparent;color:#fff}.button.is-black.is-focused:not(:active),.button.is-black:focus:not(:active){box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.button.is-black.is-active,.button.is-black:active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-hovered,.button.is-black.is-inverted:hover{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined.is-focused,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-black.is-outlined.is-loading.is-focused::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined.is-focused,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined:hover{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-hovered,.button.is-light:hover{background-color:#eee;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-focused,.button.is-light:focus{border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-focused:not(:active),.button.is-light:focus:not(:active){box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.button.is-light.is-active,.button.is-light:active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:transparent;box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,.7);color:#f5f5f5}.button.is-light.is-inverted.is-hovered,.button.is-light.is-inverted:hover{background-color:rgba(0,0,0,.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,0,0,.7);border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined.is-focused,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined:hover{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,.7)}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5!important}.button.is-light.is-outlined.is-loading.is-focused::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading:hover::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);color:rgba(0,0,0,.7)}.button.is-light.is-inverted.is-outlined.is-focused,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined:hover{background-color:rgba(0,0,0,.7);color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #f5f5f5 #f5f5f5!important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);box-shadow:none;color:rgba(0,0,0,.7)}.button.is-dark{background-color:#363636;border-color:transparent;color:#fff}.button.is-dark.is-hovered,.button.is-dark:hover{background-color:#2f2f2f;border-color:transparent;color:#fff}.button.is-dark.is-focused,.button.is-dark:focus{border-color:transparent;color:#fff}.button.is-dark.is-focused:not(:active),.button.is-dark:focus:not(:active){box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.button.is-dark.is-active,.button.is-dark:active{background-color:#292929;border-color:transparent;color:#fff}.button.is-dark[disabled],fieldset[disabled] .button.is-dark{background-color:#363636;border-color:transparent;box-shadow:none}.button.is-dark.is-inverted{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-hovered,.button.is-dark.is-inverted:hover{background-color:#f2f2f2}.button.is-dark.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-dark.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined.is-focused,.button.is-dark.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.button.is-dark.is-outlined:hover{background-color:#363636;border-color:#363636;color:#fff}.button.is-dark.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636!important}.button.is-dark.is-outlined.is-loading.is-focused::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-dark.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-dark.is-inverted.is-outlined.is-focused,.button.is-dark.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined:hover{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #363636 #363636!important}.button.is-dark.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary{background-color:#00d1b2;border-color:transparent;color:#fff}.button.is-primary.is-hovered,.button.is-primary:hover{background-color:#00c4a7;border-color:transparent;color:#fff}.button.is-primary.is-focused,.button.is-primary:focus{border-color:transparent;color:#fff}.button.is-primary.is-focused:not(:active),.button.is-primary:focus:not(:active){box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.button.is-primary.is-active,.button.is-primary:active{background-color:#00b89c;border-color:transparent;color:#fff}.button.is-primary[disabled],fieldset[disabled] .button.is-primary{background-color:#00d1b2;border-color:transparent;box-shadow:none}.button.is-primary.is-inverted{background-color:#fff;color:#00d1b2}.button.is-primary.is-inverted.is-hovered,.button.is-primary.is-inverted:hover{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],fieldset[disabled] .button.is-primary.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#00d1b2}.button.is-primary.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-primary.is-outlined{background-color:transparent;border-color:#00d1b2;color:#00d1b2}.button.is-primary.is-outlined.is-focused,.button.is-primary.is-outlined.is-hovered,.button.is-primary.is-outlined:focus,.button.is-primary.is-outlined:hover{background-color:#00d1b2;border-color:#00d1b2;color:#fff}.button.is-primary.is-outlined.is-loading::after{border-color:transparent transparent #00d1b2 #00d1b2!important}.button.is-primary.is-outlined.is-loading.is-focused::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.button.is-primary.is-outlined.is-loading:focus::after,.button.is-primary.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-primary.is-outlined[disabled],fieldset[disabled] .button.is-primary.is-outlined{background-color:transparent;border-color:#00d1b2;box-shadow:none;color:#00d1b2}.button.is-primary.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined.is-focused,.button.is-primary.is-inverted.is-outlined.is-hovered,.button.is-primary.is-inverted.is-outlined:focus,.button.is-primary.is-inverted.is-outlined:hover{background-color:#fff;color:#00d1b2}.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #00d1b2 #00d1b2!important}.button.is-primary.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary.is-light{background-color:#ebfffc;color:#00947e}.button.is-primary.is-light.is-hovered,.button.is-primary.is-light:hover{background-color:#defffa;border-color:transparent;color:#00947e}.button.is-primary.is-light.is-active,.button.is-primary.is-light:active{background-color:#d1fff8;border-color:transparent;color:#00947e}.button.is-link{background-color:#3273dc;border-color:transparent;color:#fff}.button.is-link.is-hovered,.button.is-link:hover{background-color:#276cda;border-color:transparent;color:#fff}.button.is-link.is-focused,.button.is-link:focus{border-color:transparent;color:#fff}.button.is-link.is-focused:not(:active),.button.is-link:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.button.is-link.is-active,.button.is-link:active{background-color:#2366d1;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#3273dc;border-color:transparent;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#3273dc}.button.is-link.is-inverted.is-hovered,.button.is-link.is-inverted:hover{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#3273dc}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-link.is-outlined{background-color:transparent;border-color:#3273dc;color:#3273dc}.button.is-link.is-outlined.is-focused,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined:hover{background-color:#3273dc;border-color:#3273dc;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #3273dc #3273dc!important}.button.is-link.is-outlined.is-loading.is-focused::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#3273dc;box-shadow:none;color:#3273dc}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined.is-focused,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined:hover{background-color:#fff;color:#3273dc}.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #3273dc #3273dc!important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link.is-light{background-color:#eef3fc;color:#2160c4}.button.is-link.is-light.is-hovered,.button.is-link.is-light:hover{background-color:#e3ecfa;border-color:transparent;color:#2160c4}.button.is-link.is-light.is-active,.button.is-link.is-light:active{background-color:#d8e4f8;border-color:transparent;color:#2160c4}.button.is-info{background-color:#3298dc;border-color:transparent;color:#fff}.button.is-info.is-hovered,.button.is-info:hover{background-color:#2793da;border-color:transparent;color:#fff}.button.is-info.is-focused,.button.is-info:focus{border-color:transparent;color:#fff}.button.is-info.is-focused:not(:active),.button.is-info:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,152,220,.25)}.button.is-info.is-active,.button.is-info:active{background-color:#238cd1;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#3298dc;border-color:transparent;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#3298dc}.button.is-info.is-inverted.is-hovered,.button.is-info.is-inverted:hover{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#3298dc}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-info.is-outlined{background-color:transparent;border-color:#3298dc;color:#3298dc}.button.is-info.is-outlined.is-focused,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined:hover{background-color:#3298dc;border-color:#3298dc;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #3298dc #3298dc!important}.button.is-info.is-outlined.is-loading.is-focused::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#3298dc;box-shadow:none;color:#3298dc}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined.is-focused,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined:hover{background-color:#fff;color:#3298dc}.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #3298dc #3298dc!important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info.is-light{background-color:#eef6fc;color:#1d72aa}.button.is-info.is-light.is-hovered,.button.is-info.is-light:hover{background-color:#e3f1fa;border-color:transparent;color:#1d72aa}.button.is-info.is-light.is-active,.button.is-info.is-light:active{background-color:#d8ebf8;border-color:transparent;color:#1d72aa}.button.is-success{background-color:#48c774;border-color:transparent;color:#fff}.button.is-success.is-hovered,.button.is-success:hover{background-color:#3ec46d;border-color:transparent;color:#fff}.button.is-success.is-focused,.button.is-success:focus{border-color:transparent;color:#fff}.button.is-success.is-focused:not(:active),.button.is-success:focus:not(:active){box-shadow:0 0 0 .125em rgba(72,199,116,.25)}.button.is-success.is-active,.button.is-success:active{background-color:#3abb67;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#48c774;border-color:transparent;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#48c774}.button.is-success.is-inverted.is-hovered,.button.is-success.is-inverted:hover{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#48c774}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-success.is-outlined{background-color:transparent;border-color:#48c774;color:#48c774}.button.is-success.is-outlined.is-focused,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined:hover{background-color:#48c774;border-color:#48c774;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #48c774 #48c774!important}.button.is-success.is-outlined.is-loading.is-focused::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#48c774;box-shadow:none;color:#48c774}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined.is-focused,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined:hover{background-color:#fff;color:#48c774}.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #48c774 #48c774!important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success.is-light{background-color:#effaf3;color:#257942}.button.is-success.is-light.is-hovered,.button.is-success.is-light:hover{background-color:#e6f7ec;border-color:transparent;color:#257942}.button.is-success.is-light.is-active,.button.is-success.is-light:active{background-color:#dcf4e4;border-color:transparent;color:#257942}.button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-hovered,.button.is-warning:hover{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-focused,.button.is-warning:focus{border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-focused:not(:active),.button.is-warning:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.button.is-warning.is-active,.button.is-warning:active{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:transparent;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,.7);color:#ffdd57}.button.is-warning.is-inverted.is-hovered,.button.is-warning.is-inverted:hover{background-color:rgba(0,0,0,.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined.is-focused,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined:hover{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57!important}.button.is-warning.is-outlined.is-loading.is-focused::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading:hover::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);color:rgba(0,0,0,.7)}.button.is-warning.is-inverted.is-outlined.is-focused,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined:hover{background-color:rgba(0,0,0,.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #ffdd57 #ffdd57!important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);box-shadow:none;color:rgba(0,0,0,.7)}.button.is-warning.is-light{background-color:#fffbeb;color:#947600}.button.is-warning.is-light.is-hovered,.button.is-warning.is-light:hover{background-color:#fff8de;border-color:transparent;color:#947600}.button.is-warning.is-light.is-active,.button.is-warning.is-light:active{background-color:#fff6d1;border-color:transparent;color:#947600}.button.is-danger{background-color:#f14668;border-color:transparent;color:#fff}.button.is-danger.is-hovered,.button.is-danger:hover{background-color:#f03a5f;border-color:transparent;color:#fff}.button.is-danger.is-focused,.button.is-danger:focus{border-color:transparent;color:#fff}.button.is-danger.is-focused:not(:active),.button.is-danger:focus:not(:active){box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.button.is-danger.is-active,.button.is-danger:active{background-color:#ef2e55;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#f14668;border-color:transparent;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#f14668}.button.is-danger.is-inverted.is-hovered,.button.is-danger.is-inverted:hover{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#f14668}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-danger.is-outlined{background-color:transparent;border-color:#f14668;color:#f14668}.button.is-danger.is-outlined.is-focused,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined:hover{background-color:#f14668;border-color:#f14668;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #f14668 #f14668!important}.button.is-danger.is-outlined.is-loading.is-focused::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#f14668;box-shadow:none;color:#f14668}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined.is-focused,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined:hover{background-color:#fff;color:#f14668}.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #f14668 #f14668!important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-danger.is-light{background-color:#feecf0;color:#cc0f35}.button.is-danger.is-light.is-hovered,.button.is-danger.is-light:hover{background-color:#fde0e6;border-color:transparent;color:#cc0f35}.button.is-danger.is-light.is-active,.button.is-danger.is-light:active{background-color:#fcd4dc;border-color:transparent;color:#cc0f35}.button.is-small{font-size:.75rem}.button.is-small:not(.is-rounded){border-radius:2px}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent!important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em / 2));top:calc(50% - (1em / 2));position:absolute!important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#7a7a7a;box-shadow:none;pointer-events:none}.button.is-rounded{border-radius:290486px;padding-left:calc(1em + .25em);padding-right:calc(1em + .25em)}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}.buttons:last-child{margin-bottom:-.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:2px}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button.is-hovered,.buttons.has-addons .button:hover{z-index:2}.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-focused,.buttons.has-addons .button.is-selected,.buttons.has-addons .button:active,.buttons.has-addons .button:focus{z-index:3}.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button.is-selected:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button:focus:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:.25rem;margin-right:.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:.25rem;margin-right:.25rem}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none!important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width:1024px){.container{max-width:960px}}@media screen and (max-width:1215px){.container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width:1407px){.container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width:1216px){.container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width:1408px){.container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}.content li+li{margin-top:.25em}.content blockquote:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content p:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child),.content ul:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#363636;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:.8em}.content h5{font-size:1.125em;margin-bottom:.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol:not([type]).is-lower-alpha{list-style-type:lower-alpha}.content ol:not([type]).is-lower-roman{list-style-type:lower-roman}.content ol:not([type]).is-upper-alpha{list-style-type:upper-alpha}.content ol:not([type]).is-upper-roman{list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:1.25em 1.5em;white-space:pre;word-wrap:normal}.content sub,.content sup{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:.5em .75em;vertical-align:top}.content table th{color:#363636}.content table th:not([align]){text-align:inherit}.content table thead td,.content table thead th{border-width:0 0 2px;color:#363636}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#363636}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small{font-size:.75rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}.icon-text .icon{flex-grow:0;flex-shrink:0}.icon-text .icon:not(:last-child){margin-right:.25em}.icon-text .icon:not(:first-child){margin-left:.25em}div.icon-text{display:flex}.image{display:block;position:relative}.image img{display:block;height:auto;width:100%}.image img.is-rounded{border-radius:290486px}.image.is-fullwidth{width:100%}.image.is-16by9 .has-ratio,.image.is-16by9 img,.image.is-1by1 .has-ratio,.image.is-1by1 img,.image.is-1by2 .has-ratio,.image.is-1by2 img,.image.is-1by3 .has-ratio,.image.is-1by3 img,.image.is-2by1 .has-ratio,.image.is-2by1 img,.image.is-2by3 .has-ratio,.image.is-2by3 img,.image.is-3by1 .has-ratio,.image.is-3by1 img,.image.is-3by2 .has-ratio,.image.is-3by2 img,.image.is-3by4 .has-ratio,.image.is-3by4 img,.image.is-3by5 .has-ratio,.image.is-3by5 img,.image.is-4by3 .has-ratio,.image.is-4by3 img,.image.is-4by5 .has-ratio,.image.is-4by5 img,.image.is-5by3 .has-ratio,.image.is-5by3 img,.image.is-5by4 .has-ratio,.image.is-5by4 img,.image.is-9by16 .has-ratio,.image.is-9by16 img,.image.is-square .has-ratio,.image.is-square img{height:100%;width:100%}.image.is-1by1,.image.is-square{padding-top:100%}.image.is-5by4{padding-top:80%}.image.is-4by3{padding-top:75%}.image.is-3by2{padding-top:66.6666%}.image.is-5by3{padding-top:60%}.image.is-16by9{padding-top:56.25%}.image.is-2by1{padding-top:50%}.image.is-3by1{padding-top:33.3333%}.image.is-4by5{padding-top:125%}.image.is-3by4{padding-top:133.3333%}.image.is-2by3{padding-top:150%}.image.is-3by5{padding-top:166.6666%}.image.is-9by16{padding-top:177.7777%}.image.is-1by2{padding-top:200%}.image.is-1by3{padding-top:300%}.image.is-16x16{height:16px;width:16px}.image.is-24x24{height:24px;width:24px}.image.is-32x32{height:32px;width:32px}.image.is-48x48{height:48px;width:48px}.image.is-64x64{height:64px;width:64px}.image.is-96x96{height:96px;width:96px}.image.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:#fff}.notification pre code{background:0 0}.notification>.delete{right:.5rem;position:absolute;top:.5rem}.notification .content,.notification .subtitle,.notification .title{color:currentColor}.notification.is-white{background-color:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.notification.is-dark{background-color:#363636;color:#fff}.notification.is-primary{background-color:#00d1b2;color:#fff}.notification.is-primary.is-light{background-color:#ebfffc;color:#00947e}.notification.is-link{background-color:#3273dc;color:#fff}.notification.is-link.is-light{background-color:#eef3fc;color:#2160c4}.notification.is-info{background-color:#3298dc;color:#fff}.notification.is-info.is-light{background-color:#eef6fc;color:#1d72aa}.notification.is-success{background-color:#48c774;color:#fff}.notification.is-success.is-light{background-color:#effaf3;color:#257942}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.notification.is-warning.is-light{background-color:#fffbeb;color:#947600}.notification.is-danger{background-color:#f14668;color:#fff}.notification.is-danger.is-light{background-color:#feecf0;color:#cc0f35}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:290486px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#ededed}.progress::-webkit-progress-value{background-color:#4a4a4a}.progress::-moz-progress-bar{background-color:#4a4a4a}.progress::-ms-fill{background-color:#4a4a4a;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right,#fff 30%,#ededed 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right,#0a0a0a 30%,#ededed 30%)}.progress.is-light::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right,#f5f5f5 30%,#ededed 30%)}.progress.is-dark::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate{background-image:linear-gradient(to right,#363636 30%,#ededed 30%)}.progress.is-primary::-webkit-progress-value{background-color:#00d1b2}.progress.is-primary::-moz-progress-bar{background-color:#00d1b2}.progress.is-primary::-ms-fill{background-color:#00d1b2}.progress.is-primary:indeterminate{background-image:linear-gradient(to right,#00d1b2 30%,#ededed 30%)}.progress.is-link::-webkit-progress-value{background-color:#3273dc}.progress.is-link::-moz-progress-bar{background-color:#3273dc}.progress.is-link::-ms-fill{background-color:#3273dc}.progress.is-link:indeterminate{background-image:linear-gradient(to right,#3273dc 30%,#ededed 30%)}.progress.is-info::-webkit-progress-value{background-color:#3298dc}.progress.is-info::-moz-progress-bar{background-color:#3298dc}.progress.is-info::-ms-fill{background-color:#3298dc}.progress.is-info:indeterminate{background-image:linear-gradient(to right,#3298dc 30%,#ededed 30%)}.progress.is-success::-webkit-progress-value{background-color:#48c774}.progress.is-success::-moz-progress-bar{background-color:#48c774}.progress.is-success::-ms-fill{background-color:#48c774}.progress.is-success:indeterminate{background-image:linear-gradient(to right,#48c774 30%,#ededed 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning::-ms-fill{background-color:#ffdd57}.progress.is-warning:indeterminate{background-image:linear-gradient(to right,#ffdd57 30%,#ededed 30%)}.progress.is-danger::-webkit-progress-value{background-color:#f14668}.progress.is-danger::-moz-progress-bar{background-color:#f14668}.progress.is-danger::-ms-fill{background-color:#f14668}.progress.is-danger:indeterminate{background-image:linear-gradient(to right,#f14668 30%,#ededed 30%)}.progress:indeterminate{-webkit-animation-duration:1.5s;animation-duration:1.5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:moveIndeterminate;animation-name:moveIndeterminate;-webkit-animation-timing-function:linear;animation-timing-function:linear;background-color:#ededed;background-image:linear-gradient(to right,#4a4a4a 30%,#ededed 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress:indeterminate::-ms-fill{animation-name:none}.progress.is-small{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@-webkit-keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#363636}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:.5em .75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,.7)}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#fff}.table td.is-primary,.table th.is-primary{background-color:#00d1b2;border-color:#00d1b2;color:#fff}.table td.is-link,.table th.is-link{background-color:#3273dc;border-color:#3273dc;color:#fff}.table td.is-info,.table th.is-info{background-color:#3298dc;border-color:#3298dc;color:#fff}.table td.is-success,.table th.is-success{background-color:#48c774;border-color:#48c774;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,.7)}.table td.is-danger,.table th.is-danger{background-color:#f14668;border-color:#f14668;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#00d1b2;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table td.is-vcentered,.table th.is-vcentered{vertical-align:middle}.table th{color:#363636}.table th:not([align]){text-align:inherit}.table tr.is-selected{background-color:#00d1b2;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:transparent}.table thead td,.table thead th{border-width:0 0 2px;color:#363636}.table tfoot{background-color:transparent}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#363636}.table tbody{background-color:transparent}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:.25em .5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag{margin-bottom:.5rem}.tags .tag:not(:last-child){margin-right:.5rem}.tags:last-child{margin-bottom:-.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag{margin-right:.25rem;margin-left:.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child){margin-left:.5rem}.tags.is-right .tag:not(:last-child){margin-right:0}.tags.has-addons .tag{margin-right:0}.tags.has-addons .tag:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.tags.has-addons .tag:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.tag:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#4a4a4a;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:.75em;padding-right:.75em;white-space:nowrap}.tag:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}.tag:not(body).is-white{background-color:#fff;color:#0a0a0a}.tag:not(body).is-black{background-color:#0a0a0a;color:#fff}.tag:not(body).is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.tag:not(body).is-dark{background-color:#363636;color:#fff}.tag:not(body).is-primary{background-color:#00d1b2;color:#fff}.tag:not(body).is-primary.is-light{background-color:#ebfffc;color:#00947e}.tag:not(body).is-link{background-color:#3273dc;color:#fff}.tag:not(body).is-link.is-light{background-color:#eef3fc;color:#2160c4}.tag:not(body).is-info{background-color:#3298dc;color:#fff}.tag:not(body).is-info.is-light{background-color:#eef6fc;color:#1d72aa}.tag:not(body).is-success{background-color:#48c774;color:#fff}.tag:not(body).is-success.is-light{background-color:#effaf3;color:#257942}.tag:not(body).is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.tag:not(body).is-warning.is-light{background-color:#fffbeb;color:#947600}.tag:not(body).is-danger{background-color:#f14668;color:#fff}.tag:not(body).is-danger.is-light{background-color:#feecf0;color:#cc0f35}.tag:not(body).is-normal{font-size:.75rem}.tag:not(body).is-medium{font-size:1rem}.tag:not(body).is-large{font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}.tag:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}.tag:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}.tag:not(body).is-delete{margin-left:1px;padding:0;position:relative;width:2em}.tag:not(body).is-delete::after,.tag:not(body).is-delete::before{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag:not(body).is-delete::before{height:1px;width:50%}.tag:not(body).is-delete::after{height:50%;width:1px}.tag:not(body).is-delete:focus,.tag:not(body).is-delete:hover{background-color:#e8e8e8}.tag:not(body).is-delete:active{background-color:#dbdbdb}.tag:not(body).is-rounded{border-radius:290486px}a.tag:hover{text-decoration:underline}.subtitle,.title{word-break:break-word}.subtitle em,.subtitle span,.title em,.title span{font-weight:inherit}.subtitle sub,.title sub{font-size:.75em}.subtitle sup,.title sup{font-size:.75em}.subtitle .tag,.title .tag{vertical-align:middle}.title{color:#363636;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title+.highlight{margin-top:-.75rem}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#4a4a4a;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#363636;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.highlight{font-weight:400;max-width:100%;overflow:hidden;padding:0}.highlight pre{overflow:auto;max-width:100%}.number{align-items:center;background-color:#f5f5f5;border-radius:290486px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:.25rem .5rem;text-align:center;vertical-align:top}.input,.select select,.textarea{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#363636}.input::-moz-placeholder,.select select::-moz-placeholder,.textarea::-moz-placeholder{color:rgba(54,54,54,.3)}.input::-webkit-input-placeholder,.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder{color:rgba(54,54,54,.3)}.input:-moz-placeholder,.select select:-moz-placeholder,.textarea:-moz-placeholder{color:rgba(54,54,54,.3)}.input:-ms-input-placeholder,.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder{color:rgba(54,54,54,.3)}.input:hover,.is-hovered.input,.is-hovered.textarea,.select select.is-hovered,.select select:hover,.textarea:hover{border-color:#b5b5b5}.input:active,.input:focus,.is-active.input,.is-active.textarea,.is-focused.input,.is-focused.textarea,.select select.is-active,.select select.is-focused,.select select:active,.select select:focus,.textarea:active,.textarea:focus{border-color:#3273dc;box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.input[disabled],.select fieldset[disabled] select,.select select[disabled],.textarea[disabled],fieldset[disabled] .input,fieldset[disabled] .select select,fieldset[disabled] .textarea{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#7a7a7a}.input[disabled]::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder{color:rgba(122,122,122,.3)}.input[disabled]::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder{color:rgba(122,122,122,.3)}.input[disabled]:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder{color:rgba(122,122,122,.3)}.input[disabled]:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder{color:rgba(122,122,122,.3)}.input,.textarea{box-shadow:inset 0 .0625em .125em rgba(10,10,10,.05);max-width:100%;width:100%}.input[readonly],.textarea[readonly]{box-shadow:none}.is-white.input,.is-white.textarea{border-color:#fff}.is-white.input:active,.is-white.input:focus,.is-white.is-active.input,.is-white.is-active.textarea,.is-white.is-focused.input,.is-white.is-focused.textarea,.is-white.textarea:active,.is-white.textarea:focus{box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.is-black.input,.is-black.textarea{border-color:#0a0a0a}.is-black.input:active,.is-black.input:focus,.is-black.is-active.input,.is-black.is-active.textarea,.is-black.is-focused.input,.is-black.is-focused.textarea,.is-black.textarea:active,.is-black.textarea:focus{box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.is-light.input,.is-light.textarea{border-color:#f5f5f5}.is-light.input:active,.is-light.input:focus,.is-light.is-active.input,.is-light.is-active.textarea,.is-light.is-focused.input,.is-light.is-focused.textarea,.is-light.textarea:active,.is-light.textarea:focus{box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.is-dark.input,.is-dark.textarea{border-color:#363636}.is-dark.input:active,.is-dark.input:focus,.is-dark.is-active.input,.is-dark.is-active.textarea,.is-dark.is-focused.input,.is-dark.is-focused.textarea,.is-dark.textarea:active,.is-dark.textarea:focus{box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.is-primary.input,.is-primary.textarea{border-color:#00d1b2}.is-primary.input:active,.is-primary.input:focus,.is-primary.is-active.input,.is-primary.is-active.textarea,.is-primary.is-focused.input,.is-primary.is-focused.textarea,.is-primary.textarea:active,.is-primary.textarea:focus{box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.is-link.input,.is-link.textarea{border-color:#3273dc}.is-link.input:active,.is-link.input:focus,.is-link.is-active.input,.is-link.is-active.textarea,.is-link.is-focused.input,.is-link.is-focused.textarea,.is-link.textarea:active,.is-link.textarea:focus{box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.is-info.input,.is-info.textarea{border-color:#3298dc}.is-info.input:active,.is-info.input:focus,.is-info.is-active.input,.is-info.is-active.textarea,.is-info.is-focused.input,.is-info.is-focused.textarea,.is-info.textarea:active,.is-info.textarea:focus{box-shadow:0 0 0 .125em rgba(50,152,220,.25)}.is-success.input,.is-success.textarea{border-color:#48c774}.is-success.input:active,.is-success.input:focus,.is-success.is-active.input,.is-success.is-active.textarea,.is-success.is-focused.input,.is-success.is-focused.textarea,.is-success.textarea:active,.is-success.textarea:focus{box-shadow:0 0 0 .125em rgba(72,199,116,.25)}.is-warning.input,.is-warning.textarea{border-color:#ffdd57}.is-warning.input:active,.is-warning.input:focus,.is-warning.is-active.input,.is-warning.is-active.textarea,.is-warning.is-focused.input,.is-warning.is-focused.textarea,.is-warning.textarea:active,.is-warning.textarea:focus{box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.is-danger.input,.is-danger.textarea{border-color:#f14668}.is-danger.input:active,.is-danger.input:focus,.is-danger.is-active.input,.is-danger.is-active.textarea,.is-danger.is-focused.input,.is-danger.is-focused.textarea,.is-danger.textarea:active,.is-danger.textarea:focus{box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.is-small.input,.is-small.textarea{border-radius:2px;font-size:.75rem}.is-medium.input,.is-medium.textarea{font-size:1.25rem}.is-large.input,.is-large.textarea{font-size:1.5rem}.is-fullwidth.input,.is-fullwidth.textarea{display:block;width:100%}.is-inline.input,.is-inline.textarea{display:inline;width:auto}.input.is-rounded{border-radius:290486px;padding-left:calc(calc(.75em - 1px) + .375em);padding-right:calc(calc(.75em - 1px) + .375em)}.input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:calc(.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.checkbox,.radio{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.checkbox input,.radio input{cursor:pointer}.checkbox:hover,.radio:hover{color:#363636}.checkbox input[disabled],.checkbox[disabled],.radio input[disabled],.radio[disabled],fieldset[disabled] .checkbox,fieldset[disabled] .radio{color:#7a7a7a;cursor:not-allowed}.radio+.radio{margin-left:.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.5em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#3273dc;right:1.125em;z-index:4}.select.is-rounded select{border-radius:290486px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:0}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#363636}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select.is-hovered,.select.is-white select:hover{border-color:#f2f2f2}.select.is-white select.is-active,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select:focus{box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select.is-hovered,.select.is-black select:hover{border-color:#000}.select.is-black select.is-active,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select:focus{box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select.is-hovered,.select.is-light select:hover{border-color:#e8e8e8}.select.is-light select.is-active,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select:focus{box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.select.is-dark:not(:hover)::after{border-color:#363636}.select.is-dark select{border-color:#363636}.select.is-dark select.is-hovered,.select.is-dark select:hover{border-color:#292929}.select.is-dark select.is-active,.select.is-dark select.is-focused,.select.is-dark select:active,.select.is-dark select:focus{box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.select.is-primary:not(:hover)::after{border-color:#00d1b2}.select.is-primary select{border-color:#00d1b2}.select.is-primary select.is-hovered,.select.is-primary select:hover{border-color:#00b89c}.select.is-primary select.is-active,.select.is-primary select.is-focused,.select.is-primary select:active,.select.is-primary select:focus{box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.select.is-link:not(:hover)::after{border-color:#3273dc}.select.is-link select{border-color:#3273dc}.select.is-link select.is-hovered,.select.is-link select:hover{border-color:#2366d1}.select.is-link select.is-active,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select:focus{box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.select.is-info:not(:hover)::after{border-color:#3298dc}.select.is-info select{border-color:#3298dc}.select.is-info select.is-hovered,.select.is-info select:hover{border-color:#238cd1}.select.is-info select.is-active,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select:focus{box-shadow:0 0 0 .125em rgba(50,152,220,.25)}.select.is-success:not(:hover)::after{border-color:#48c774}.select.is-success select{border-color:#48c774}.select.is-success select.is-hovered,.select.is-success select:hover{border-color:#3abb67}.select.is-success select.is-active,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select:focus{box-shadow:0 0 0 .125em rgba(72,199,116,.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select.is-hovered,.select.is-warning select:hover{border-color:#ffd83d}.select.is-warning select.is-active,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select:focus{box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.select.is-danger:not(:hover)::after{border-color:#f14668}.select.is-danger select{border-color:#f14668}.select.is-danger select.is-hovered,.select.is-danger select:hover{border-color:#ef2e55}.select.is-danger select.is-active,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select:focus{box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.select.is-small{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#7a7a7a}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:.625em;transform:none}.select.is-loading.is-small:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white.is-hovered .file-cta,.file.is-white:hover .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white.is-focused .file-cta,.file.is-white:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(255,255,255,.25);color:#0a0a0a}.file.is-white.is-active .file-cta,.file.is-white:active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black.is-hovered .file-cta,.file.is-black:hover .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black.is-focused .file-cta,.file.is-black:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(10,10,10,.25);color:#fff}.file.is-black.is-active .file-cta,.file.is-black:active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-light.is-hovered .file-cta,.file.is-light:hover .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-light.is-focused .file-cta,.file.is-light:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(245,245,245,.25);color:rgba(0,0,0,.7)}.file.is-light.is-active .file-cta,.file.is-light:active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-dark .file-cta{background-color:#363636;border-color:transparent;color:#fff}.file.is-dark.is-hovered .file-cta,.file.is-dark:hover .file-cta{background-color:#2f2f2f;border-color:transparent;color:#fff}.file.is-dark.is-focused .file-cta,.file.is-dark:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(54,54,54,.25);color:#fff}.file.is-dark.is-active .file-cta,.file.is-dark:active .file-cta{background-color:#292929;border-color:transparent;color:#fff}.file.is-primary .file-cta{background-color:#00d1b2;border-color:transparent;color:#fff}.file.is-primary.is-hovered .file-cta,.file.is-primary:hover .file-cta{background-color:#00c4a7;border-color:transparent;color:#fff}.file.is-primary.is-focused .file-cta,.file.is-primary:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(0,209,178,.25);color:#fff}.file.is-primary.is-active .file-cta,.file.is-primary:active .file-cta{background-color:#00b89c;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#3273dc;border-color:transparent;color:#fff}.file.is-link.is-hovered .file-cta,.file.is-link:hover .file-cta{background-color:#276cda;border-color:transparent;color:#fff}.file.is-link.is-focused .file-cta,.file.is-link:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(50,115,220,.25);color:#fff}.file.is-link.is-active .file-cta,.file.is-link:active .file-cta{background-color:#2366d1;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#3298dc;border-color:transparent;color:#fff}.file.is-info.is-hovered .file-cta,.file.is-info:hover .file-cta{background-color:#2793da;border-color:transparent;color:#fff}.file.is-info.is-focused .file-cta,.file.is-info:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(50,152,220,.25);color:#fff}.file.is-info.is-active .file-cta,.file.is-info:active .file-cta{background-color:#238cd1;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#48c774;border-color:transparent;color:#fff}.file.is-success.is-hovered .file-cta,.file.is-success:hover .file-cta{background-color:#3ec46d;border-color:transparent;color:#fff}.file.is-success.is-focused .file-cta,.file.is-success:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(72,199,116,.25);color:#fff}.file.is-success.is-active .file-cta,.file.is-success:active .file-cta{background-color:#3abb67;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-warning.is-hovered .file-cta,.file.is-warning:hover .file-cta{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-warning.is-focused .file-cta,.file.is-warning:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(255,221,87,.25);color:rgba(0,0,0,.7)}.file.is-warning.is-active .file-cta,.file.is-warning:active .file-cta{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-danger .file-cta{background-color:#f14668;border-color:transparent;color:#fff}.file.is-danger.is-hovered .file-cta,.file.is-danger:hover .file-cta{background-color:#f03a5f;border-color:transparent;color:#fff}.file.is-danger.is-focused .file-cta,.file.is-danger:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(241,70,104,.25);color:#fff}.file.is-danger.is-active .file-cta,.file.is-danger:active .file-cta{background-color:#ef2e55;border-color:transparent;color:#fff}.file.is-small{font-size:.75rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#363636}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#363636}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:0;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:#f5f5f5;color:#4a4a4a}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#363636;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:.5em}.label.is-small{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark{color:#363636}.help.is-primary{color:#00d1b2}.help.is-link{color:#3273dc}.help.is-info{color:#3298dc}.help.is-success{color:#48c774}.help.is-warning{color:#ffdd57}.help.is-danger{color:#f14668}.field:not(:last-child){margin-bottom:.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]).is-hovered,.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .input:not([disabled]).is-hovered,.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]).is-hovered,.field.has-addons .control .select select:not([disabled]):hover{z-index:2}.field.has-addons .control .button:not([disabled]).is-active,.field.has-addons .control .button:not([disabled]).is-focused,.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .input:not([disabled]).is-active,.field.has-addons .control .input:not([disabled]).is-focused,.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control .select select:not([disabled]).is-active,.field.has-addons .control .select select:not([disabled]).is-focused,.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select:not([disabled]):focus{z-index:3}.field.has-addons .control .button:not([disabled]).is-active:hover,.field.has-addons .control .button:not([disabled]).is-focused:hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .input:not([disabled]).is-active:hover,.field.has-addons .control .input:not([disabled]).is-focused:hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control .select select:not([disabled]).is-active:hover,.field.has-addons .control .select select:not([disabled]).is-focused:hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select:not([disabled]):focus:hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width:769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width:768px){.field-label{margin-bottom:.5rem}}@media screen and (min-width:769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small{font-size:.75rem;padding-top:.375em}.field-label.is-normal{padding-top:.375em}.field-label.is-medium{font-size:1.25rem;padding-top:.375em}.field-label.is-large{font-size:1.5rem;padding-top:.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width:769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}.control.has-icons-left .input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#4a4a4a}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}.control.has-icons-left .input,.control.has-icons-left .select select{padding-left:2.5em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right .select select{padding-right:2.5em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute!important;right:.625em;top:.625em;z-index:4}.control.is-loading.is-small:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#3273dc;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#363636;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ol,.breadcrumb ul{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:.5em}.breadcrumb .icon:last-child{margin-left:.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;border-radius:.25rem;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);color:#4a4a4a;max-width:100%;position:relative}.card-content:first-child,.card-footer:first-child,.card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-content:last-child,.card-footer:last-child,.card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-header{background-color:transparent;align-items:stretch;box-shadow:0 .125em .25em rgba(10,10,10,.1);display:flex}.card-header-title{align-items:center;color:#363636;display:flex;flex-grow:1;font-weight:700;padding:.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{align-items:center;cursor:pointer;display:flex;justify-content:center;padding:.75rem 1rem}.card-image{display:block;position:relative}.card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-content{background-color:transparent;padding:1.5rem}.card-footer{background-color:transparent;border-top:1px solid #ededed;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-right:1px solid #ededed}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#4a4a4a;display:block;font-size:.875rem;line-height:1.5;padding:.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#3273dc;color:#fff}.dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width:769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .subtitle,.level-item .title{margin-bottom:0}@media screen and (max-width:768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width:769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width:768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width:769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width:769px),print{.level-right{display:flex}}.media{align-items:flex-start;display:flex;text-align:inherit}.media .content:not(:last-child){margin-bottom:.75rem}.media .media{border-top:1px solid rgba(219,219,219,.5);display:flex;padding-top:.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:.5rem}.media .media .media{padding-top:.5rem}.media .media .media+.media{margin-top:.5rem}.media+.media{border-top:1px solid rgba(219,219,219,.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width:768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#4a4a4a;display:block;padding:.5em .75em}.menu-list a:hover{background-color:#f5f5f5;color:#363636}.menu-list a.is-active{background-color:#3273dc;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#7a7a7a;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.message.is-light .message-body{border-color:#f5f5f5}.message.is-dark{background-color:#fafafa}.message.is-dark .message-header{background-color:#363636;color:#fff}.message.is-dark .message-body{border-color:#363636}.message.is-primary{background-color:#ebfffc}.message.is-primary .message-header{background-color:#00d1b2;color:#fff}.message.is-primary .message-body{border-color:#00d1b2;color:#00947e}.message.is-link{background-color:#eef3fc}.message.is-link .message-header{background-color:#3273dc;color:#fff}.message.is-link .message-body{border-color:#3273dc;color:#2160c4}.message.is-info{background-color:#eef6fc}.message.is-info .message-header{background-color:#3298dc;color:#fff}.message.is-info .message-body{border-color:#3298dc;color:#1d72aa}.message.is-success{background-color:#effaf3}.message.is-success .message-header{background-color:#48c774;color:#fff}.message.is-success .message-body{border-color:#48c774;color:#257942}.message.is-warning{background-color:#fffbeb}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#947600}.message.is-danger{background-color:#feecf0}.message.is-danger .message-header{background-color:#f14668;color:#fff}.message.is-danger .message-body{border-color:#f14668;color:#cc0f35}.message-header{align-items:center;background-color:#4a4a4a;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#4a4a4a;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:transparent}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,.86)}.modal-card,.modal-content{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width:769px){.modal-card,.modal-content{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:0 0;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-foot,.modal-card-head{align-items:center;background-color:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#363636;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link,.navbar.is-white .navbar-brand>.navbar-item{color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width:1024px){.navbar.is-white .navbar-end .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-start>.navbar-item{color:#0a0a0a}.navbar.is-white .navbar-end .navbar-link.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-end .navbar-link::after,.navbar.is-white .navbar-start .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand .navbar-link,.navbar.is-black .navbar-brand>.navbar-item{color:#fff}.navbar.is-black .navbar-brand .navbar-link.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-black .navbar-end .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-start>.navbar-item{color:#fff}.navbar.is-black .navbar-end .navbar-link.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover{background-color:#000;color:#fff}.navbar.is-black .navbar-end .navbar-link::after,.navbar.is-black .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link,.navbar.is-light .navbar-brand>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,.7)}@media screen and (min-width:1024px){.navbar.is-light .navbar-end .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-start>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-light .navbar-end .navbar-link.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-end .navbar-link::after,.navbar.is-light .navbar-start .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,.7)}}.navbar.is-dark{background-color:#363636;color:#fff}.navbar.is-dark .navbar-brand .navbar-link,.navbar.is-dark .navbar-brand>.navbar-item{color:#fff}.navbar.is-dark .navbar-brand .navbar-link.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover{background-color:#292929;color:#fff}.navbar.is-dark .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-dark .navbar-end .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.navbar.is-dark .navbar-start>.navbar-item{color:#fff}.navbar.is-dark .navbar-end .navbar-link.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover{background-color:#292929;color:#fff}.navbar.is-dark .navbar-end .navbar-link::after,.navbar.is-dark .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link{background-color:#292929;color:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#fff}}.navbar.is-primary{background-color:#00d1b2;color:#fff}.navbar.is-primary .navbar-brand .navbar-link,.navbar.is-primary .navbar-brand>.navbar-item{color:#fff}.navbar.is-primary .navbar-brand .navbar-link.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-primary .navbar-end .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.navbar.is-primary .navbar-start>.navbar-item{color:#fff}.navbar.is-primary .navbar-end .navbar-link.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-end .navbar-link::after,.navbar.is-primary .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active{background-color:#00d1b2;color:#fff}}.navbar.is-link{background-color:#3273dc;color:#fff}.navbar.is-link .navbar-brand .navbar-link,.navbar.is-link .navbar-brand>.navbar-item{color:#fff}.navbar.is-link .navbar-brand .navbar-link.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-link .navbar-end .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-start>.navbar-item{color:#fff}.navbar.is-link .navbar-end .navbar-link.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-end .navbar-link::after,.navbar.is-link .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#3273dc;color:#fff}}.navbar.is-info{background-color:#3298dc;color:#fff}.navbar.is-info .navbar-brand .navbar-link,.navbar.is-info .navbar-brand>.navbar-item{color:#fff}.navbar.is-info .navbar-brand .navbar-link.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover{background-color:#238cd1;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-info .navbar-end .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-start>.navbar-item{color:#fff}.navbar.is-info .navbar-end .navbar-link.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover{background-color:#238cd1;color:#fff}.navbar.is-info .navbar-end .navbar-link::after,.navbar.is-info .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link{background-color:#238cd1;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#3298dc;color:#fff}}.navbar.is-success{background-color:#48c774;color:#fff}.navbar.is-success .navbar-brand .navbar-link,.navbar.is-success .navbar-brand>.navbar-item{color:#fff}.navbar.is-success .navbar-brand .navbar-link.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover{background-color:#3abb67;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-success .navbar-end .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-start>.navbar-item{color:#fff}.navbar.is-success .navbar-end .navbar-link.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover{background-color:#3abb67;color:#fff}.navbar.is-success .navbar-end .navbar-link::after,.navbar.is-success .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link{background-color:#3abb67;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#48c774;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link,.navbar.is-warning .navbar-brand>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,.7)}@media screen and (min-width:1024px){.navbar.is-warning .navbar-end .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-start>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-end .navbar-link.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-end .navbar-link::after,.navbar.is-warning .navbar-start .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,.7)}}.navbar.is-danger{background-color:#f14668;color:#fff}.navbar.is-danger .navbar-brand .navbar-link,.navbar.is-danger .navbar-brand>.navbar-item{color:#fff}.navbar.is-danger .navbar-brand .navbar-link.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-danger .navbar-end .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-start>.navbar-item{color:#fff}.navbar.is-danger .navbar-end .navbar-link.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-end .navbar-link::after,.navbar.is-danger .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#f14668;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}body.has-navbar-fixed-top,html.has-navbar-fixed-top{padding-top:3.25rem}body.has-navbar-fixed-bottom,html.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#4a4a4a;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color,opacity,transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#4a4a4a;display:block;line-height:1.5;padding:.5rem .75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-.25rem;margin-right:-.25rem}.navbar-link,a.navbar-item{cursor:pointer}.navbar-link.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,a.navbar-item.is-active,a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover{background-color:#fafafa;color:#3273dc}.navbar-item{flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:transparent;border-bottom-color:#3273dc}.navbar-item.is-tab.is-active{background-color:transparent;border-bottom-color:#3273dc;border-bottom-style:solid;border-bottom-width:3px;color:#3273dc;padding-bottom:calc(.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#3273dc;margin-top:-.375em;right:1.125em}.navbar-dropdown{font-size:.875rem;padding-bottom:.5rem;padding-top:.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:.5rem 0}@media screen and (max-width:1023px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,.1);padding:.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}body.has-navbar-fixed-top-touch,html.has-navbar-fixed-top-touch{padding-top:3.25rem}body.has-navbar-fixed-bottom-touch,html.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width:1024px){.navbar,.navbar-end,.navbar-menu,.navbar-start{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-end,.navbar.is-spaced .navbar-start{align-items:center}.navbar.is-spaced .navbar-link,.navbar.is-spaced a.navbar-item{border-radius:4px}.navbar.is-transparent .navbar-link.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover{background-color:transparent!important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent!important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#3273dc}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(.25em,-.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,.1);display:none;font-size:.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#3273dc}.navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-dropdown{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity,transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.container>.navbar .navbar-brand,.navbar>.container .navbar-brand{margin-left:-.75rem}.container>.navbar .navbar-menu,.navbar>.container .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,.1)}.navbar.is-fixed-top-desktop{top:0}body.has-navbar-fixed-top-desktop,html.has-navbar-fixed-top-desktop{padding-top:3.25rem}body.has-navbar-fixed-bottom-desktop,html.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}body.has-spaced-navbar-fixed-top,html.has-spaced-navbar-fixed-top{padding-top:5.25rem}body.has-spaced-navbar-fixed-bottom,html.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}.navbar-link.is-active,a.navbar-item.is-active{color:#0a0a0a}.navbar-link.is-active:not(:focus):not(:hover),a.navbar-item.is-active:not(:focus):not(:hover){background-color:transparent}.navbar-item.has-dropdown.is-active .navbar-link,.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-next,.pagination.is-rounded .pagination-previous{padding-left:1em;padding-right:1em;border-radius:290486px}.pagination.is-rounded .pagination-link{border-radius:290486px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-link,.pagination-next,.pagination-previous{border-color:#dbdbdb;color:#363636;min-width:2.5em}.pagination-link:hover,.pagination-next:hover,.pagination-previous:hover{border-color:#b5b5b5;color:#363636}.pagination-link:focus,.pagination-next:focus,.pagination-previous:focus{border-color:#3273dc}.pagination-link:active,.pagination-next:active,.pagination-previous:active{box-shadow:inset 0 1px 2px rgba(10,10,10,.2)}.pagination-link[disabled],.pagination-next[disabled],.pagination-previous[disabled]{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#7a7a7a;opacity:.5}.pagination-next,.pagination-previous{padding-left:.75em;padding-right:.75em;white-space:nowrap}.pagination-link.is-current{background-color:#3273dc;border-color:#3273dc;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}.pagination-list li{list-style:none}@media screen and (max-width:768px){.pagination{flex-wrap:wrap}.pagination-next,.pagination-previous{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width:769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{border-radius:6px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}.panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}.panel.is-white .panel-block.is-active .panel-icon{color:#fff}.panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}.panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}.panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}.panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}.panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}.panel.is-dark .panel-heading{background-color:#363636;color:#fff}.panel.is-dark .panel-tabs a.is-active{border-bottom-color:#363636}.panel.is-dark .panel-block.is-active .panel-icon{color:#363636}.panel.is-primary .panel-heading{background-color:#00d1b2;color:#fff}.panel.is-primary .panel-tabs a.is-active{border-bottom-color:#00d1b2}.panel.is-primary .panel-block.is-active .panel-icon{color:#00d1b2}.panel.is-link .panel-heading{background-color:#3273dc;color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:#3273dc}.panel.is-link .panel-block.is-active .panel-icon{color:#3273dc}.panel.is-info .panel-heading{background-color:#3298dc;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#3298dc}.panel.is-info .panel-block.is-active .panel-icon{color:#3298dc}.panel.is-success .panel-heading{background-color:#48c774;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#48c774}.panel.is-success .panel-block.is-active .panel-icon{color:#48c774}.panel.is-warning .panel-heading{background-color:#ffdd57;color:rgba(0,0,0,.7)}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ffdd57}.panel.is-warning .panel-block.is-active .panel-icon{color:#ffdd57}.panel.is-danger .panel-heading{background-color:#f14668;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#f14668}.panel.is-danger .panel-block.is-active .panel-icon{color:#f14668}.panel-block:not(:last-child),.panel-tabs:not(:last-child){border-bottom:1px solid #ededed}.panel-heading{background-color:#ededed;border-radius:6px 6px 0 0;color:#363636;font-size:1.25em;font-weight:700;line-height:1.25;padding:.75em 1em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#4a4a4a}.panel-list a:hover{color:#3273dc}.panel-block{align-items:center;color:#363636;display:flex;justify-content:flex-start;padding:.5em .75em}.panel-block input[type=checkbox]{margin-right:.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#3273dc;color:#363636}.panel-block.is-active .panel-icon{color:#3273dc}.panel-block:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#7a7a7a;margin-right:.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#4a4a4a;display:flex;justify-content:center;margin-bottom:-1px;padding:.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#363636;color:#363636}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#3273dc;color:#3273dc}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:.75em;padding-right:.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:.75em}.tabs .icon:first-child{margin-right:.5em}.tabs .icon:last-child{margin-left:.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:transparent!important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.tabs.is-toggle li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.tabs.is-toggle li.is-active a{background-color:#3273dc;border-color:#3273dc;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:290486px;border-top-left-radius:290486px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:290486px;border-top-right-radius:290486px;padding-right:1.25em}.tabs.is-small{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none;width:unset}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0}.columns.is-mobile>.column.is-1{flex:none;width:8.33333%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333%}.columns.is-mobile>.column.is-2{flex:none;width:16.66667%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66667%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333%}.columns.is-mobile>.column.is-5{flex:none;width:41.66667%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66667%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333%}.columns.is-mobile>.column.is-8{flex:none;width:66.66667%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66667%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333%}.columns.is-mobile>.column.is-11{flex:none;width:91.66667%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66667%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width:768px){.column.is-narrow-mobile{flex:none;width:unset}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0}.column.is-1-mobile{flex:none;width:8.33333%}.column.is-offset-1-mobile{margin-left:8.33333%}.column.is-2-mobile{flex:none;width:16.66667%}.column.is-offset-2-mobile{margin-left:16.66667%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333%}.column.is-offset-4-mobile{margin-left:33.33333%}.column.is-5-mobile{flex:none;width:41.66667%}.column.is-offset-5-mobile{margin-left:41.66667%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333%}.column.is-offset-7-mobile{margin-left:58.33333%}.column.is-8-mobile{flex:none;width:66.66667%}.column.is-offset-8-mobile{margin-left:66.66667%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333%}.column.is-offset-10-mobile{margin-left:83.33333%}.column.is-11-mobile{flex:none;width:91.66667%}.column.is-offset-11-mobile{margin-left:91.66667%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width:769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none;width:unset}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66667%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66667%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66667%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66667%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66667%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66667%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66667%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66667%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width:1023px){.column.is-narrow-touch{flex:none;width:unset}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0}.column.is-1-touch{flex:none;width:8.33333%}.column.is-offset-1-touch{margin-left:8.33333%}.column.is-2-touch{flex:none;width:16.66667%}.column.is-offset-2-touch{margin-left:16.66667%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333%}.column.is-offset-4-touch{margin-left:33.33333%}.column.is-5-touch{flex:none;width:41.66667%}.column.is-offset-5-touch{margin-left:41.66667%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333%}.column.is-offset-7-touch{margin-left:58.33333%}.column.is-8-touch{flex:none;width:66.66667%}.column.is-offset-8-touch{margin-left:66.66667%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333%}.column.is-offset-10-touch{margin-left:83.33333%}.column.is-11-touch{flex:none;width:91.66667%}.column.is-offset-11-touch{margin-left:91.66667%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width:1024px){.column.is-narrow-desktop{flex:none;width:unset}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0}.column.is-1-desktop{flex:none;width:8.33333%}.column.is-offset-1-desktop{margin-left:8.33333%}.column.is-2-desktop{flex:none;width:16.66667%}.column.is-offset-2-desktop{margin-left:16.66667%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333%}.column.is-offset-4-desktop{margin-left:33.33333%}.column.is-5-desktop{flex:none;width:41.66667%}.column.is-offset-5-desktop{margin-left:41.66667%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333%}.column.is-offset-7-desktop{margin-left:58.33333%}.column.is-8-desktop{flex:none;width:66.66667%}.column.is-offset-8-desktop{margin-left:66.66667%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333%}.column.is-offset-10-desktop{margin-left:83.33333%}.column.is-11-desktop{flex:none;width:91.66667%}.column.is-offset-11-desktop{margin-left:91.66667%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width:1216px){.column.is-narrow-widescreen{flex:none;width:unset}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0}.column.is-1-widescreen{flex:none;width:8.33333%}.column.is-offset-1-widescreen{margin-left:8.33333%}.column.is-2-widescreen{flex:none;width:16.66667%}.column.is-offset-2-widescreen{margin-left:16.66667%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333%}.column.is-offset-4-widescreen{margin-left:33.33333%}.column.is-5-widescreen{flex:none;width:41.66667%}.column.is-offset-5-widescreen{margin-left:41.66667%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333%}.column.is-offset-7-widescreen{margin-left:58.33333%}.column.is-8-widescreen{flex:none;width:66.66667%}.column.is-offset-8-widescreen{margin-left:66.66667%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333%}.column.is-offset-10-widescreen{margin-left:83.33333%}.column.is-11-widescreen{flex:none;width:91.66667%}.column.is-offset-11-widescreen{margin-left:91.66667%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width:1408px){.column.is-narrow-fullhd{flex:none;width:unset}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0}.column.is-1-fullhd{flex:none;width:8.33333%}.column.is-offset-1-fullhd{margin-left:8.33333%}.column.is-2-fullhd{flex:none;width:16.66667%}.column.is-offset-2-fullhd{margin-left:16.66667%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333%}.column.is-offset-4-fullhd{margin-left:33.33333%}.column.is-5-fullhd{flex:none;width:41.66667%}.column.is-offset-5-fullhd{margin-left:41.66667%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333%}.column.is-offset-7-fullhd{margin-left:58.33333%}.column.is-8-fullhd{flex:none;width:66.66667%}.column.is-offset-8-fullhd{margin-left:66.66667%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333%}.column.is-offset-10-fullhd{margin-left:83.33333%}.column.is-11-fullhd{flex:none;width:91.66667%}.column.is-offset-11-fullhd{margin-left:91.66667%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0!important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width:769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width:1024px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap:0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap:0rem}@media screen and (max-width:768px){.columns.is-variable.is-0-mobile{--columnGap:0rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-0-tablet{--columnGap:0rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-0-tablet-only{--columnGap:0rem}}@media screen and (max-width:1023px){.columns.is-variable.is-0-touch{--columnGap:0rem}}@media screen and (min-width:1024px){.columns.is-variable.is-0-desktop{--columnGap:0rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-0-desktop-only{--columnGap:0rem}}@media screen and (min-width:1216px){.columns.is-variable.is-0-widescreen{--columnGap:0rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-0-widescreen-only{--columnGap:0rem}}@media screen and (min-width:1408px){.columns.is-variable.is-0-fullhd{--columnGap:0rem}}.columns.is-variable.is-1{--columnGap:0.25rem}@media screen and (max-width:768px){.columns.is-variable.is-1-mobile{--columnGap:0.25rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-1-tablet{--columnGap:0.25rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-1-tablet-only{--columnGap:0.25rem}}@media screen and (max-width:1023px){.columns.is-variable.is-1-touch{--columnGap:0.25rem}}@media screen and (min-width:1024px){.columns.is-variable.is-1-desktop{--columnGap:0.25rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-1-desktop-only{--columnGap:0.25rem}}@media screen and (min-width:1216px){.columns.is-variable.is-1-widescreen{--columnGap:0.25rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-1-widescreen-only{--columnGap:0.25rem}}@media screen and (min-width:1408px){.columns.is-variable.is-1-fullhd{--columnGap:0.25rem}}.columns.is-variable.is-2{--columnGap:0.5rem}@media screen and (max-width:768px){.columns.is-variable.is-2-mobile{--columnGap:0.5rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-2-tablet{--columnGap:0.5rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-2-tablet-only{--columnGap:0.5rem}}@media screen and (max-width:1023px){.columns.is-variable.is-2-touch{--columnGap:0.5rem}}@media screen and (min-width:1024px){.columns.is-variable.is-2-desktop{--columnGap:0.5rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-2-desktop-only{--columnGap:0.5rem}}@media screen and (min-width:1216px){.columns.is-variable.is-2-widescreen{--columnGap:0.5rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-2-widescreen-only{--columnGap:0.5rem}}@media screen and (min-width:1408px){.columns.is-variable.is-2-fullhd{--columnGap:0.5rem}}.columns.is-variable.is-3{--columnGap:0.75rem}@media screen and (max-width:768px){.columns.is-variable.is-3-mobile{--columnGap:0.75rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-3-tablet{--columnGap:0.75rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-3-tablet-only{--columnGap:0.75rem}}@media screen and (max-width:1023px){.columns.is-variable.is-3-touch{--columnGap:0.75rem}}@media screen and (min-width:1024px){.columns.is-variable.is-3-desktop{--columnGap:0.75rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-3-desktop-only{--columnGap:0.75rem}}@media screen and (min-width:1216px){.columns.is-variable.is-3-widescreen{--columnGap:0.75rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-3-widescreen-only{--columnGap:0.75rem}}@media screen and (min-width:1408px){.columns.is-variable.is-3-fullhd{--columnGap:0.75rem}}.columns.is-variable.is-4{--columnGap:1rem}@media screen and (max-width:768px){.columns.is-variable.is-4-mobile{--columnGap:1rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-4-tablet{--columnGap:1rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-4-tablet-only{--columnGap:1rem}}@media screen and (max-width:1023px){.columns.is-variable.is-4-touch{--columnGap:1rem}}@media screen and (min-width:1024px){.columns.is-variable.is-4-desktop{--columnGap:1rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-4-desktop-only{--columnGap:1rem}}@media screen and (min-width:1216px){.columns.is-variable.is-4-widescreen{--columnGap:1rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-4-widescreen-only{--columnGap:1rem}}@media screen and (min-width:1408px){.columns.is-variable.is-4-fullhd{--columnGap:1rem}}.columns.is-variable.is-5{--columnGap:1.25rem}@media screen and (max-width:768px){.columns.is-variable.is-5-mobile{--columnGap:1.25rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-5-tablet{--columnGap:1.25rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-5-tablet-only{--columnGap:1.25rem}}@media screen and (max-width:1023px){.columns.is-variable.is-5-touch{--columnGap:1.25rem}}@media screen and (min-width:1024px){.columns.is-variable.is-5-desktop{--columnGap:1.25rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-5-desktop-only{--columnGap:1.25rem}}@media screen and (min-width:1216px){.columns.is-variable.is-5-widescreen{--columnGap:1.25rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-5-widescreen-only{--columnGap:1.25rem}}@media screen and (min-width:1408px){.columns.is-variable.is-5-fullhd{--columnGap:1.25rem}}.columns.is-variable.is-6{--columnGap:1.5rem}@media screen and (max-width:768px){.columns.is-variable.is-6-mobile{--columnGap:1.5rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-6-tablet{--columnGap:1.5rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-6-tablet-only{--columnGap:1.5rem}}@media screen and (max-width:1023px){.columns.is-variable.is-6-touch{--columnGap:1.5rem}}@media screen and (min-width:1024px){.columns.is-variable.is-6-desktop{--columnGap:1.5rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-6-desktop-only{--columnGap:1.5rem}}@media screen and (min-width:1216px){.columns.is-variable.is-6-widescreen{--columnGap:1.5rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-6-widescreen-only{--columnGap:1.5rem}}@media screen and (min-width:1408px){.columns.is-variable.is-6-fullhd{--columnGap:1.5rem}}.columns.is-variable.is-7{--columnGap:1.75rem}@media screen and (max-width:768px){.columns.is-variable.is-7-mobile{--columnGap:1.75rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-7-tablet{--columnGap:1.75rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-7-tablet-only{--columnGap:1.75rem}}@media screen and (max-width:1023px){.columns.is-variable.is-7-touch{--columnGap:1.75rem}}@media screen and (min-width:1024px){.columns.is-variable.is-7-desktop{--columnGap:1.75rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-7-desktop-only{--columnGap:1.75rem}}@media screen and (min-width:1216px){.columns.is-variable.is-7-widescreen{--columnGap:1.75rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-7-widescreen-only{--columnGap:1.75rem}}@media screen and (min-width:1408px){.columns.is-variable.is-7-fullhd{--columnGap:1.75rem}}.columns.is-variable.is-8{--columnGap:2rem}@media screen and (max-width:768px){.columns.is-variable.is-8-mobile{--columnGap:2rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-8-tablet{--columnGap:2rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-8-tablet-only{--columnGap:2rem}}@media screen and (max-width:1023px){.columns.is-variable.is-8-touch{--columnGap:2rem}}@media screen and (min-width:1024px){.columns.is-variable.is-8-desktop{--columnGap:2rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-8-desktop-only{--columnGap:2rem}}@media screen and (min-width:1216px){.columns.is-variable.is-8-widescreen{--columnGap:2rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-8-widescreen-only{--columnGap:2rem}}@media screen and (min-width:1408px){.columns.is-variable.is-8-fullhd{--columnGap:2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:-webkit-min-content;min-height:-moz-min-content;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0!important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem!important}@media screen and (min-width:769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333%}.tile.is-2{flex:none;width:16.66667%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333%}.tile.is-5{flex:none;width:41.66667%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333%}.tile.is-8{flex:none;width:66.66667%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333%}.tile.is-11{flex:none;width:91.66667%}.tile.is-12{flex:none;width:100%}}.has-text-white{color:#fff!important}a.has-text-white:focus,a.has-text-white:hover{color:#e6e6e6!important}.has-background-white{background-color:#fff!important}.has-text-black{color:#0a0a0a!important}a.has-text-black:focus,a.has-text-black:hover{color:#000!important}.has-background-black{background-color:#0a0a0a!important}.has-text-light{color:#f5f5f5!important}a.has-text-light:focus,a.has-text-light:hover{color:#dbdbdb!important}.has-background-light{background-color:#f5f5f5!important}.has-text-dark{color:#363636!important}a.has-text-dark:focus,a.has-text-dark:hover{color:#1c1c1c!important}.has-background-dark{background-color:#363636!important}.has-text-primary{color:#00d1b2!important}a.has-text-primary:focus,a.has-text-primary:hover{color:#009e86!important}.has-background-primary{background-color:#00d1b2!important}.has-text-primary-light{color:#ebfffc!important}a.has-text-primary-light:focus,a.has-text-primary-light:hover{color:#b8fff4!important}.has-background-primary-light{background-color:#ebfffc!important}.has-text-primary-dark{color:#00947e!important}a.has-text-primary-dark:focus,a.has-text-primary-dark:hover{color:#00c7a9!important}.has-background-primary-dark{background-color:#00947e!important}.has-text-link{color:#3273dc!important}a.has-text-link:focus,a.has-text-link:hover{color:#205bbc!important}.has-background-link{background-color:#3273dc!important}.has-text-link-light{color:#eef3fc!important}a.has-text-link-light:focus,a.has-text-link-light:hover{color:#c2d5f5!important}.has-background-link-light{background-color:#eef3fc!important}.has-text-link-dark{color:#2160c4!important}a.has-text-link-dark:focus,a.has-text-link-dark:hover{color:#3b79de!important}.has-background-link-dark{background-color:#2160c4!important}.has-text-info{color:#3298dc!important}a.has-text-info:focus,a.has-text-info:hover{color:#207dbc!important}.has-background-info{background-color:#3298dc!important}.has-text-info-light{color:#eef6fc!important}a.has-text-info-light:focus,a.has-text-info-light:hover{color:#c2e0f5!important}.has-background-info-light{background-color:#eef6fc!important}.has-text-info-dark{color:#1d72aa!important}a.has-text-info-dark:focus,a.has-text-info-dark:hover{color:#248fd6!important}.has-background-info-dark{background-color:#1d72aa!important}.has-text-success{color:#48c774!important}a.has-text-success:focus,a.has-text-success:hover{color:#34a85c!important}.has-background-success{background-color:#48c774!important}.has-text-success-light{color:#effaf3!important}a.has-text-success-light:focus,a.has-text-success-light:hover{color:#c8eed6!important}.has-background-success-light{background-color:#effaf3!important}.has-text-success-dark{color:#257942!important}a.has-text-success-dark:focus,a.has-text-success-dark:hover{color:#31a058!important}.has-background-success-dark{background-color:#257942!important}.has-text-warning{color:#ffdd57!important}a.has-text-warning:focus,a.has-text-warning:hover{color:#ffd324!important}.has-background-warning{background-color:#ffdd57!important}.has-text-warning-light{color:#fffbeb!important}a.has-text-warning-light:focus,a.has-text-warning-light:hover{color:#fff1b8!important}.has-background-warning-light{background-color:#fffbeb!important}.has-text-warning-dark{color:#947600!important}a.has-text-warning-dark:focus,a.has-text-warning-dark:hover{color:#c79f00!important}.has-background-warning-dark{background-color:#947600!important}.has-text-danger{color:#f14668!important}a.has-text-danger:focus,a.has-text-danger:hover{color:#ee1742!important}.has-background-danger{background-color:#f14668!important}.has-text-danger-light{color:#feecf0!important}a.has-text-danger-light:focus,a.has-text-danger-light:hover{color:#fabdc9!important}.has-background-danger-light{background-color:#feecf0!important}.has-text-danger-dark{color:#cc0f35!important}a.has-text-danger-dark:focus,a.has-text-danger-dark:hover{color:#ee2049!important}.has-background-danger-dark{background-color:#cc0f35!important}.has-text-black-bis{color:#121212!important}.has-background-black-bis{background-color:#121212!important}.has-text-black-ter{color:#242424!important}.has-background-black-ter{background-color:#242424!important}.has-text-grey-darker{color:#363636!important}.has-background-grey-darker{background-color:#363636!important}.has-text-grey-dark{color:#4a4a4a!important}.has-background-grey-dark{background-color:#4a4a4a!important}.has-text-grey{color:#7a7a7a!important}.has-background-grey{background-color:#7a7a7a!important}.has-text-grey-light{color:#b5b5b5!important}.has-background-grey-light{background-color:#b5b5b5!important}.has-text-grey-lighter{color:#dbdbdb!important}.has-background-grey-lighter{background-color:#dbdbdb!important}.has-text-white-ter{color:#f5f5f5!important}.has-background-white-ter{background-color:#f5f5f5!important}.has-text-white-bis{color:#fafafa!important}.has-background-white-bis{background-color:#fafafa!important}.is-flex-direction-row{flex-direction:row!important}.is-flex-direction-row-reverse{flex-direction:row-reverse!important}.is-flex-direction-column{flex-direction:column!important}.is-flex-direction-column-reverse{flex-direction:column-reverse!important}.is-flex-wrap-nowrap{flex-wrap:nowrap!important}.is-flex-wrap-wrap{flex-wrap:wrap!important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse!important}.is-justify-content-flex-start{justify-content:flex-start!important}.is-justify-content-flex-end{justify-content:flex-end!important}.is-justify-content-center{justify-content:center!important}.is-justify-content-space-between{justify-content:space-between!important}.is-justify-content-space-around{justify-content:space-around!important}.is-justify-content-space-evenly{justify-content:space-evenly!important}.is-justify-content-start{justify-content:start!important}.is-justify-content-end{justify-content:end!important}.is-justify-content-left{justify-content:left!important}.is-justify-content-right{justify-content:right!important}.is-align-content-flex-start{align-content:flex-start!important}.is-align-content-flex-end{align-content:flex-end!important}.is-align-content-center{align-content:center!important}.is-align-content-space-between{align-content:space-between!important}.is-align-content-space-around{align-content:space-around!important}.is-align-content-space-evenly{align-content:space-evenly!important}.is-align-content-stretch{align-content:stretch!important}.is-align-content-start{align-content:start!important}.is-align-content-end{align-content:end!important}.is-align-content-baseline{align-content:baseline!important}.is-align-items-stretch{align-items:stretch!important}.is-align-items-flex-start{align-items:flex-start!important}.is-align-items-flex-end{align-items:flex-end!important}.is-align-items-center{align-items:center!important}.is-align-items-baseline{align-items:baseline!important}.is-align-items-start{align-items:start!important}.is-align-items-end{align-items:end!important}.is-align-items-self-start{align-items:self-start!important}.is-align-items-self-end{align-items:self-end!important}.is-align-self-auto{align-self:auto!important}.is-align-self-flex-start{align-self:flex-start!important}.is-align-self-flex-end{align-self:flex-end!important}.is-align-self-center{align-self:center!important}.is-align-self-baseline{align-self:baseline!important}.is-align-self-stretch{align-self:stretch!important}.is-flex-grow-0{flex-grow:0!important}.is-flex-grow-1{flex-grow:1!important}.is-flex-grow-2{flex-grow:2!important}.is-flex-grow-3{flex-grow:3!important}.is-flex-grow-4{flex-grow:4!important}.is-flex-grow-5{flex-grow:5!important}.is-flex-shrink-0{flex-shrink:0!important}.is-flex-shrink-1{flex-shrink:1!important}.is-flex-shrink-2{flex-shrink:2!important}.is-flex-shrink-3{flex-shrink:3!important}.is-flex-shrink-4{flex-shrink:4!important}.is-flex-shrink-5{flex-shrink:5!important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left!important}.is-pulled-right{float:right!important}.is-radiusless{border-radius:0!important}.is-shadowless{box-shadow:none!important}.is-clickable{cursor:pointer!important;pointer-events:all!important}.is-clipped{overflow:hidden!important}.is-relative{position:relative!important}.is-marginless{margin:0!important}.is-paddingless{padding:0!important}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.m-1{margin:.25rem!important}.mt-1{margin-top:.25rem!important}.mr-1{margin-right:.25rem!important}.mb-1{margin-bottom:.25rem!important}.ml-1{margin-left:.25rem!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-2{margin:.5rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-3{margin:.75rem!important}.mt-3{margin-top:.75rem!important}.mr-3{margin-right:.75rem!important}.mb-3{margin-bottom:.75rem!important}.ml-3{margin-left:.75rem!important}.mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.m-4{margin:1rem!important}.mt-4{margin-top:1rem!important}.mr-4{margin-right:1rem!important}.mb-4{margin-bottom:1rem!important}.ml-4{margin-left:1rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.m-5{margin:1.5rem!important}.mt-5{margin-top:1.5rem!important}.mr-5{margin-right:1.5rem!important}.mb-5{margin-bottom:1.5rem!important}.ml-5{margin-left:1.5rem!important}.mx-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.my-5{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-6{margin:3rem!important}.mt-6{margin-top:3rem!important}.mr-6{margin-right:3rem!important}.mb-6{margin-bottom:3rem!important}.ml-6{margin-left:3rem!important}.mx-6{margin-left:3rem!important;margin-right:3rem!important}.my-6{margin-top:3rem!important;margin-bottom:3rem!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.p-1{padding:.25rem!important}.pt-1{padding-top:.25rem!important}.pr-1{padding-right:.25rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-2{padding:.5rem!important}.pt-2{padding-top:.5rem!important}.pr-2{padding-right:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pl-2{padding-left:.5rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-3{padding:.75rem!important}.pt-3{padding-top:.75rem!important}.pr-3{padding-right:.75rem!important}.pb-3{padding-bottom:.75rem!important}.pl-3{padding-left:.75rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.p-4{padding:1rem!important}.pt-4{padding-top:1rem!important}.pr-4{padding-right:1rem!important}.pb-4{padding-bottom:1rem!important}.pl-4{padding-left:1rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.p-5{padding:1.5rem!important}.pt-5{padding-top:1.5rem!important}.pr-5{padding-right:1.5rem!important}.pb-5{padding-bottom:1.5rem!important}.pl-5{padding-left:1.5rem!important}.px-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-5{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-6{padding:3rem!important}.pt-6{padding-top:3rem!important}.pr-6{padding-right:3rem!important}.pb-6{padding-bottom:3rem!important}.pl-6{padding-left:3rem!important}.px-6{padding-left:3rem!important;padding-right:3rem!important}.py-6{padding-top:3rem!important;padding-bottom:3rem!important}.is-size-1{font-size:3rem!important}.is-size-2{font-size:2.5rem!important}.is-size-3{font-size:2rem!important}.is-size-4{font-size:1.5rem!important}.is-size-5{font-size:1.25rem!important}.is-size-6{font-size:1rem!important}.is-size-7{font-size:.75rem!important}@media screen and (max-width:768px){.is-size-1-mobile{font-size:3rem!important}.is-size-2-mobile{font-size:2.5rem!important}.is-size-3-mobile{font-size:2rem!important}.is-size-4-mobile{font-size:1.5rem!important}.is-size-5-mobile{font-size:1.25rem!important}.is-size-6-mobile{font-size:1rem!important}.is-size-7-mobile{font-size:.75rem!important}}@media screen and (min-width:769px),print{.is-size-1-tablet{font-size:3rem!important}.is-size-2-tablet{font-size:2.5rem!important}.is-size-3-tablet{font-size:2rem!important}.is-size-4-tablet{font-size:1.5rem!important}.is-size-5-tablet{font-size:1.25rem!important}.is-size-6-tablet{font-size:1rem!important}.is-size-7-tablet{font-size:.75rem!important}}@media screen and (max-width:1023px){.is-size-1-touch{font-size:3rem!important}.is-size-2-touch{font-size:2.5rem!important}.is-size-3-touch{font-size:2rem!important}.is-size-4-touch{font-size:1.5rem!important}.is-size-5-touch{font-size:1.25rem!important}.is-size-6-touch{font-size:1rem!important}.is-size-7-touch{font-size:.75rem!important}}@media screen and (min-width:1024px){.is-size-1-desktop{font-size:3rem!important}.is-size-2-desktop{font-size:2.5rem!important}.is-size-3-desktop{font-size:2rem!important}.is-size-4-desktop{font-size:1.5rem!important}.is-size-5-desktop{font-size:1.25rem!important}.is-size-6-desktop{font-size:1rem!important}.is-size-7-desktop{font-size:.75rem!important}}@media screen and (min-width:1216px){.is-size-1-widescreen{font-size:3rem!important}.is-size-2-widescreen{font-size:2.5rem!important}.is-size-3-widescreen{font-size:2rem!important}.is-size-4-widescreen{font-size:1.5rem!important}.is-size-5-widescreen{font-size:1.25rem!important}.is-size-6-widescreen{font-size:1rem!important}.is-size-7-widescreen{font-size:.75rem!important}}@media screen and (min-width:1408px){.is-size-1-fullhd{font-size:3rem!important}.is-size-2-fullhd{font-size:2.5rem!important}.is-size-3-fullhd{font-size:2rem!important}.is-size-4-fullhd{font-size:1.5rem!important}.is-size-5-fullhd{font-size:1.25rem!important}.is-size-6-fullhd{font-size:1rem!important}.is-size-7-fullhd{font-size:.75rem!important}}.has-text-centered{text-align:center!important}.has-text-justified{text-align:justify!important}.has-text-left{text-align:left!important}.has-text-right{text-align:right!important}@media screen and (max-width:768px){.has-text-centered-mobile{text-align:center!important}}@media screen and (min-width:769px),print{.has-text-centered-tablet{text-align:center!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-centered-tablet-only{text-align:center!important}}@media screen and (max-width:1023px){.has-text-centered-touch{text-align:center!important}}@media screen and (min-width:1024px){.has-text-centered-desktop{text-align:center!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-centered-desktop-only{text-align:center!important}}@media screen and (min-width:1216px){.has-text-centered-widescreen{text-align:center!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-centered-widescreen-only{text-align:center!important}}@media screen and (min-width:1408px){.has-text-centered-fullhd{text-align:center!important}}@media screen and (max-width:768px){.has-text-justified-mobile{text-align:justify!important}}@media screen and (min-width:769px),print{.has-text-justified-tablet{text-align:justify!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-justified-tablet-only{text-align:justify!important}}@media screen and (max-width:1023px){.has-text-justified-touch{text-align:justify!important}}@media screen and (min-width:1024px){.has-text-justified-desktop{text-align:justify!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-justified-desktop-only{text-align:justify!important}}@media screen and (min-width:1216px){.has-text-justified-widescreen{text-align:justify!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-justified-widescreen-only{text-align:justify!important}}@media screen and (min-width:1408px){.has-text-justified-fullhd{text-align:justify!important}}@media screen and (max-width:768px){.has-text-left-mobile{text-align:left!important}}@media screen and (min-width:769px),print{.has-text-left-tablet{text-align:left!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-left-tablet-only{text-align:left!important}}@media screen and (max-width:1023px){.has-text-left-touch{text-align:left!important}}@media screen and (min-width:1024px){.has-text-left-desktop{text-align:left!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-left-desktop-only{text-align:left!important}}@media screen and (min-width:1216px){.has-text-left-widescreen{text-align:left!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-left-widescreen-only{text-align:left!important}}@media screen and (min-width:1408px){.has-text-left-fullhd{text-align:left!important}}@media screen and (max-width:768px){.has-text-right-mobile{text-align:right!important}}@media screen and (min-width:769px),print{.has-text-right-tablet{text-align:right!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-right-tablet-only{text-align:right!important}}@media screen and (max-width:1023px){.has-text-right-touch{text-align:right!important}}@media screen and (min-width:1024px){.has-text-right-desktop{text-align:right!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-right-desktop-only{text-align:right!important}}@media screen and (min-width:1216px){.has-text-right-widescreen{text-align:right!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-right-widescreen-only{text-align:right!important}}@media screen and (min-width:1408px){.has-text-right-fullhd{text-align:right!important}}.is-capitalized{text-transform:capitalize!important}.is-lowercase{text-transform:lowercase!important}.is-uppercase{text-transform:uppercase!important}.is-italic{font-style:italic!important}.has-text-weight-light{font-weight:300!important}.has-text-weight-normal{font-weight:400!important}.has-text-weight-medium{font-weight:500!important}.has-text-weight-semibold{font-weight:600!important}.has-text-weight-bold{font-weight:700!important}.is-family-primary{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-secondary{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-sans-serif{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-monospace{font-family:monospace!important}.is-family-code{font-family:monospace!important}.is-block{display:block!important}@media screen and (max-width:768px){.is-block-mobile{display:block!important}}@media screen and (min-width:769px),print{.is-block-tablet{display:block!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-block-tablet-only{display:block!important}}@media screen and (max-width:1023px){.is-block-touch{display:block!important}}@media screen and (min-width:1024px){.is-block-desktop{display:block!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-block-desktop-only{display:block!important}}@media screen and (min-width:1216px){.is-block-widescreen{display:block!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-block-widescreen-only{display:block!important}}@media screen and (min-width:1408px){.is-block-fullhd{display:block!important}}.is-flex{display:flex!important}@media screen and (max-width:768px){.is-flex-mobile{display:flex!important}}@media screen and (min-width:769px),print{.is-flex-tablet{display:flex!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-flex-tablet-only{display:flex!important}}@media screen and (max-width:1023px){.is-flex-touch{display:flex!important}}@media screen and (min-width:1024px){.is-flex-desktop{display:flex!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-flex-desktop-only{display:flex!important}}@media screen and (min-width:1216px){.is-flex-widescreen{display:flex!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-flex-widescreen-only{display:flex!important}}@media screen and (min-width:1408px){.is-flex-fullhd{display:flex!important}}.is-inline{display:inline!important}@media screen and (max-width:768px){.is-inline-mobile{display:inline!important}}@media screen and (min-width:769px),print{.is-inline-tablet{display:inline!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-tablet-only{display:inline!important}}@media screen and (max-width:1023px){.is-inline-touch{display:inline!important}}@media screen and (min-width:1024px){.is-inline-desktop{display:inline!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-desktop-only{display:inline!important}}@media screen and (min-width:1216px){.is-inline-widescreen{display:inline!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-widescreen-only{display:inline!important}}@media screen and (min-width:1408px){.is-inline-fullhd{display:inline!important}}.is-inline-block{display:inline-block!important}@media screen and (max-width:768px){.is-inline-block-mobile{display:inline-block!important}}@media screen and (min-width:769px),print{.is-inline-block-tablet{display:inline-block!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-block-tablet-only{display:inline-block!important}}@media screen and (max-width:1023px){.is-inline-block-touch{display:inline-block!important}}@media screen and (min-width:1024px){.is-inline-block-desktop{display:inline-block!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-block-desktop-only{display:inline-block!important}}@media screen and (min-width:1216px){.is-inline-block-widescreen{display:inline-block!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-block-widescreen-only{display:inline-block!important}}@media screen and (min-width:1408px){.is-inline-block-fullhd{display:inline-block!important}}.is-inline-flex{display:inline-flex!important}@media screen and (max-width:768px){.is-inline-flex-mobile{display:inline-flex!important}}@media screen and (min-width:769px),print{.is-inline-flex-tablet{display:inline-flex!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-flex-tablet-only{display:inline-flex!important}}@media screen and (max-width:1023px){.is-inline-flex-touch{display:inline-flex!important}}@media screen and (min-width:1024px){.is-inline-flex-desktop{display:inline-flex!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-flex-desktop-only{display:inline-flex!important}}@media screen and (min-width:1216px){.is-inline-flex-widescreen{display:inline-flex!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-flex-widescreen-only{display:inline-flex!important}}@media screen and (min-width:1408px){.is-inline-flex-fullhd{display:inline-flex!important}}.is-hidden{display:none!important}.is-sr-only{border:none!important;clip:rect(0,0,0,0)!important;height:.01em!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:.01em!important}@media screen and (max-width:768px){.is-hidden-mobile{display:none!important}}@media screen and (min-width:769px),print{.is-hidden-tablet{display:none!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-hidden-tablet-only{display:none!important}}@media screen and (max-width:1023px){.is-hidden-touch{display:none!important}}@media screen and (min-width:1024px){.is-hidden-desktop{display:none!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-hidden-desktop-only{display:none!important}}@media screen and (min-width:1216px){.is-hidden-widescreen{display:none!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-hidden-widescreen-only{display:none!important}}@media screen and (min-width:1408px){.is-hidden-fullhd{display:none!important}}.is-invisible{visibility:hidden!important}@media screen and (max-width:768px){.is-invisible-mobile{visibility:hidden!important}}@media screen and (min-width:769px),print{.is-invisible-tablet{visibility:hidden!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-invisible-tablet-only{visibility:hidden!important}}@media screen and (max-width:1023px){.is-invisible-touch{visibility:hidden!important}}@media screen and (min-width:1024px){.is-invisible-desktop{visibility:hidden!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-invisible-desktop-only{visibility:hidden!important}}@media screen and (min-width:1216px){.is-invisible-widescreen{visibility:hidden!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-invisible-widescreen-only{visibility:hidden!important}}@media screen and (min-width:1408px){.is-invisible-fullhd{visibility:hidden!important}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:0 0}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width:1023px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,.7)}.hero.is-white .navbar-link.is-active,.hero.is-white .navbar-link:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg,#e6e6e6 0,#fff 71%,#fff 100%)}@media screen and (max-width:768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg,#e6e6e6 0,#fff 71%,#fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,.7)}.hero.is-black .navbar-link.is-active,.hero.is-black .navbar-link:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black a.navbar-item:hover{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg,#000 0,#0a0a0a 71%,#181616 100%)}@media screen and (max-width:768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg,#000 0,#0a0a0a 71%,#181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:rgba(0,0,0,.7)}.hero.is-light .subtitle{color:rgba(0,0,0,.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,.7)}@media screen and (max-width:1023px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(0,0,0,.7)}.hero.is-light .navbar-link.is-active,.hero.is-light .navbar-link:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.hero.is-light .tabs a{color:rgba(0,0,0,.7);opacity:.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,.7)}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,.7);border-color:rgba(0,0,0,.7);color:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg,#dfd8d9 0,#f5f5f5 71%,#fff 100%)}@media screen and (max-width:768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg,#dfd8d9 0,#f5f5f5 71%,#fff 100%)}}.hero.is-dark{background-color:#363636;color:#fff}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong{color:inherit}.hero.is-dark .title{color:#fff}.hero.is-dark .subtitle{color:rgba(255,255,255,.9)}.hero.is-dark .subtitle a:not(.button),.hero.is-dark .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-dark .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.hero.is-dark .navbar-link{color:rgba(255,255,255,.7)}.hero.is-dark .navbar-link.is-active,.hero.is-dark .navbar-link:hover,.hero.is-dark a.navbar-item.is-active,.hero.is-dark a.navbar-item:hover{background-color:#292929;color:#fff}.hero.is-dark .tabs a{color:#fff;opacity:.9}.hero.is-dark .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a{opacity:1}.hero.is-dark .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a{color:#fff}.hero.is-dark .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363636}.hero.is-dark.is-bold{background-image:linear-gradient(141deg,#1f191a 0,#363636 71%,#46403f 100%)}@media screen and (max-width:768px){.hero.is-dark.is-bold .navbar-menu{background-image:linear-gradient(141deg,#1f191a 0,#363636 71%,#46403f 100%)}}.hero.is-primary{background-color:#00d1b2;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong{color:inherit}.hero.is-primary .title{color:#fff}.hero.is-primary .subtitle{color:rgba(255,255,255,.9)}.hero.is-primary .subtitle a:not(.button),.hero.is-primary .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-primary .navbar-menu{background-color:#00d1b2}}.hero.is-primary .navbar-item,.hero.is-primary .navbar-link{color:rgba(255,255,255,.7)}.hero.is-primary .navbar-link.is-active,.hero.is-primary .navbar-link:hover,.hero.is-primary a.navbar-item.is-active,.hero.is-primary a.navbar-item:hover{background-color:#00b89c;color:#fff}.hero.is-primary .tabs a{color:#fff;opacity:.9}.hero.is-primary .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a{opacity:1}.hero.is-primary .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#00d1b2}.hero.is-primary.is-bold{background-image:linear-gradient(141deg,#009e6c 0,#00d1b2 71%,#00e7eb 100%)}@media screen and (max-width:768px){.hero.is-primary.is-bold .navbar-menu{background-image:linear-gradient(141deg,#009e6c 0,#00d1b2 71%,#00e7eb 100%)}}.hero.is-link{background-color:#3273dc;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-link .navbar-menu{background-color:#3273dc}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,.7)}.hero.is-link .navbar-link.is-active,.hero.is-link .navbar-link:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link a.navbar-item:hover{background-color:#2366d1;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#3273dc}.hero.is-link.is-bold{background-image:linear-gradient(141deg,#1577c6 0,#3273dc 71%,#4366e5 100%)}@media screen and (max-width:768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg,#1577c6 0,#3273dc 71%,#4366e5 100%)}}.hero.is-info{background-color:#3298dc;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-info .navbar-menu{background-color:#3298dc}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,.7)}.hero.is-info .navbar-link.is-active,.hero.is-info .navbar-link:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info a.navbar-item:hover{background-color:#238cd1;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#3298dc}.hero.is-info.is-bold{background-image:linear-gradient(141deg,#159dc6 0,#3298dc 71%,#4389e5 100%)}@media screen and (max-width:768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg,#159dc6 0,#3298dc 71%,#4389e5 100%)}}.hero.is-success{background-color:#48c774;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-success .navbar-menu{background-color:#48c774}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,.7)}.hero.is-success .navbar-link.is-active,.hero.is-success .navbar-link:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success a.navbar-item:hover{background-color:#3abb67;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#48c774}.hero.is-success.is-bold{background-image:linear-gradient(141deg,#29b342 0,#48c774 71%,#56d296 100%)}@media screen and (max-width:768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg,#29b342 0,#48c774 71%,#56d296 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,.7)}@media screen and (max-width:1023px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,.7)}.hero.is-warning .navbar-link.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,.7);opacity:.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,.7);border-color:rgba(0,0,0,.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg,#ffaf24 0,#ffdd57 71%,#fffa70 100%)}@media screen and (max-width:768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg,#ffaf24 0,#ffdd57 71%,#fffa70 100%)}}.hero.is-danger{background-color:#f14668;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-danger .navbar-menu{background-color:#f14668}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,.7)}.hero.is-danger .navbar-link.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger a.navbar-item:hover{background-color:#ef2e55;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#f14668}.hero.is-danger.is-bold{background-image:linear-gradient(141deg,#fa0a62 0,#f14668 71%,#f7595f 100%)}@media screen and (max-width:768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg,#fa0a62 0,#f14668 71%,#f7595f 100%)}}.hero.is-small .hero-body{padding:1.5rem}@media screen and (min-width:769px),print{.hero.is-medium .hero-body{padding:9rem 1.5rem}}@media screen and (min-width:769px),print{.hero.is-large .hero-body{padding:18rem 1.5rem}}.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body,.hero.is-halfheight .hero-body{align-items:center;display:flex}.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container,.hero.is-halfheight .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%,-50%,0)}.hero-video.is-transparent{opacity:.3}@media screen and (max-width:768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width:768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:.75rem}}@media screen and (min-width:769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-foot,.hero-head{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}.section{padding:3rem 1.5rem}@media screen and (min-width:1024px){.section.is-medium{padding:9rem 1.5rem}.section.is-large{padding:18rem 1.5rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem} From 8b154b69fbb40caa3e8d115fa494277136b84a0e Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 26 Apr 2021 10:35:37 -0700 Subject: [PATCH 027/140] Fixes follower/following logic in suggested user annotations --- bookwyrm/views/helpers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bookwyrm/views/helpers.py b/bookwyrm/views/helpers.py index 8a60b54c7..6207f63ec 100644 --- a/bookwyrm/views/helpers.py +++ b/bookwyrm/views/helpers.py @@ -190,11 +190,11 @@ def get_annotated_users(user, *args, **kwargs): .exclude(Q(id__in=user.blocks.all()) | Q(blocks=user)) .annotate( mutuals=Count( - "following", + "followers", filter=Q( ~Q(id=user.id), ~Q(id__in=user.following.all()), - following__in=user.following.all(), + followers__in=user.following.all(), ), distinct=True, ), From 85297426e07917c20d5d5d7fed344380af5b6608 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 26 Apr 2021 14:33:16 -0700 Subject: [PATCH 028/140] Adds merge migration --- ...63_auto_20210407_0045_0070_auto_20210423_0121.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 bookwyrm/migrations/0071_merge_0063_auto_20210407_0045_0070_auto_20210423_0121.py diff --git a/bookwyrm/migrations/0071_merge_0063_auto_20210407_0045_0070_auto_20210423_0121.py b/bookwyrm/migrations/0071_merge_0063_auto_20210407_0045_0070_auto_20210423_0121.py new file mode 100644 index 000000000..b6489b80a --- /dev/null +++ b/bookwyrm/migrations/0071_merge_0063_auto_20210407_0045_0070_auto_20210423_0121.py @@ -0,0 +1,13 @@ +# Generated by Django 3.2 on 2021-04-26 21:32 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0063_auto_20210407_0045"), + ("bookwyrm", "0070_auto_20210423_0121"), + ] + + operations = [] From 7b65291a59b6f3b5f7a64360227ce41451aec5b5 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 26 Apr 2021 14:43:29 -0700 Subject: [PATCH 029/140] Python formatting for the new Black standard --- bookwyrm/activitypub/book.py | 2 +- bookwyrm/connectors/abstract_connector.py | 4 ++-- bookwyrm/connectors/inventaire.py | 14 +++++++------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/bookwyrm/activitypub/book.py b/bookwyrm/activitypub/book.py index dfe14b6f9..597d7a665 100644 --- a/bookwyrm/activitypub/book.py +++ b/bookwyrm/activitypub/book.py @@ -8,7 +8,7 @@ from .image import Document @dataclass(init=False) class BookData(ActivityObject): - """ shared fields for all book data and authors""" + """shared fields for all book data and authors""" openlibraryKey: str = None inventaireId: str = None diff --git a/bookwyrm/connectors/abstract_connector.py b/bookwyrm/connectors/abstract_connector.py index 14fe3cb71..fd2b2707f 100644 --- a/bookwyrm/connectors/abstract_connector.py +++ b/bookwyrm/connectors/abstract_connector.py @@ -69,7 +69,7 @@ class AbstractMinimalConnector(ABC): return results def get_search_data(self, remote_id, **kwargs): # pylint: disable=no-self-use - """ this allows connectors to override the default behavior """ + """this allows connectors to override the default behavior""" return get_data(remote_id, **kwargs) @abstractmethod @@ -155,7 +155,7 @@ class AbstractConnector(AbstractMinimalConnector): return edition def get_book_data(self, remote_id): # pylint: disable=no-self-use - """ this allows connectors to override the default behavior """ + """this allows connectors to override the default behavior""" return get_data(remote_id) def create_edition_from_data(self, work, edition_data): diff --git a/bookwyrm/connectors/inventaire.py b/bookwyrm/connectors/inventaire.py index 594fe8101..ae6fb8628 100644 --- a/bookwyrm/connectors/inventaire.py +++ b/bookwyrm/connectors/inventaire.py @@ -6,7 +6,7 @@ from .connector_manager import ConnectorException class Connector(AbstractConnector): - """ instantiate a connector for OL """ + """instantiate a connector for OL""" def __init__(self, identifier): super().__init__(identifier) @@ -51,7 +51,7 @@ class Connector(AbstractConnector): ] + shared_mappings def get_remote_id(self, value): - """ convert an id/uri into a url """ + """convert an id/uri into a url""" return "{:s}?action=by-uris&uris={:s}".format(self.books_url, value) def get_book_data(self, remote_id): @@ -88,16 +88,16 @@ class Connector(AbstractConnector): ) def parse_isbn_search_data(self, data): - """ boop doop """ + """boop doop""" def format_isbn_search_result(self, search_result): - """ beep bloop """ + """beep bloop""" def is_work_data(self, data): return data.get("type") == "work" def load_edition_data(self, work_uri): - """ get a list of editions for a work """ + """get a list of editions for a work""" url = "{:s}?action=reverse-claims&property=wdt:P629&value={:s}".format( self.books_url, work_uri ) @@ -149,7 +149,7 @@ class Connector(AbstractConnector): return "%s%s" % (self.covers_url, cover_id) def resolve_keys(self, keys): - """ cool, it's "wd:Q3156592" now what the heck does that mean """ + """cool, it's "wd:Q3156592" now what the heck does that mean""" results = [] for uri in keys: try: @@ -161,5 +161,5 @@ class Connector(AbstractConnector): def get_language_code(options, code="en"): - """ when there are a bunch of translation but we need a single field """ + """when there are a bunch of translation but we need a single field""" return options.get(code) From 8ddc292ee634af784594b307c53f02fe3fb9174e Mon Sep 17 00:00:00 2001 From: Fabien Basmaison Date: Tue, 27 Apr 2021 14:58:30 +0200 Subject: [PATCH 030/140] cover: Change the logic again: - Work on feeds. - Add `.is-cover` to modify the behaviours of columns. - Only apply logic for dimensions on the cover container; too many contextual side effects otherwise. - Add classes to dimension and align, including auto margins for flex. - Rename classes in templates accordingly. --- bookwyrm/static/css/bookwyrm.css | 243 ++++++++++++++++-- bookwyrm/templates/book/book.html | 2 +- bookwyrm/templates/book/edit_book.html | 2 +- bookwyrm/templates/book/editions.html | 8 +- bookwyrm/templates/discover/small-book.html | 2 +- bookwyrm/templates/feed/feed_layout.html | 2 +- bookwyrm/templates/import_status.html | 2 +- bookwyrm/templates/lists/curate.html | 10 +- bookwyrm/templates/lists/list.html | 16 +- bookwyrm/templates/lists/list_items.html | 4 +- .../snippets/search_result_text.html | 4 +- .../snippets/status/content_status.html | 39 +-- .../snippets/status/generated_status.html | 31 ++- bookwyrm/templates/user/user.html | 2 +- 14 files changed, 294 insertions(+), 73 deletions(-) diff --git a/bookwyrm/static/css/bookwyrm.css b/bookwyrm/static/css/bookwyrm.css index 8f95cfeba..4d27c2a4a 100644 --- a/bookwyrm/static/css/bookwyrm.css +++ b/bookwyrm/static/css/bookwyrm.css @@ -159,19 +159,33 @@ body { /** Book covers * - * - The context gives the extrinsic dimensions. - * - .cover-container gives the intrinsic dimensions and position. + * - .is-cover gives the behaviour of the cover and its surrounding. + * - .cover-container gives the dimensions and position (for borders, image and other elements). * - .book-cover is positioned and sized based on its container. + * + * To have the cover with specific dimensions, specify a width or height for + * standard bulma’s named breapoints: + * + * is-[w|h]-[xs|s|m|l|xl]-[mobile|tablet|desktop] ******************************************************************************/ +.column.is-cover { + flex-grow: 0 !important; +} + +.column.is-cover, +.column.is-cover + .column { + flex-basis: auto !important; +} + .cover-container { display: flex; + justify-content: center; + align-items: center; position: relative; + width: max-content; + max-width: 100%; overflow: hidden; - min-width: 80px; - min-height: 100px; - max-width: max-content; - outline: solid 1px #dbdbdb; } /* Book cover @@ -278,46 +292,231 @@ body { min-height: 96px !important; } -.is-h-small { +.is-w-auto { + width: auto !important; +} + +.is-w-xs { + width: 80px !important; +} + +.is-w-s { + width: 100px !important; +} + +.is-w-m { + width: 150px !important; +} + +.is-w-l { + width: 200px !important; +} + +.is-h-xs { + height: 80px !important; +} + +.is-h-s { height: 100px !important; } -.is-h-medium { +.is-h-m { height: 150px !important; } +.is-h-l { + height: 200px !important; +} + @media only screen and (max-width: 768px) { - .is-h-medium-mobile { - height: 150px; + .is-w-auto-mobile { + width: auto !important; + } + + .is-w-xs-mobile { + width: 80px !important; + } + + .is-w-s-mobile { + width: 100px !important; + } + + .is-w-m-mobile { + width: 150px !important; + } + + .is-w-l-mobile { + width: 200px !important; + } + + .is-h-xs-mobile { + height: 80px !important; + } + + .is-h-s-mobile { + height: 100px !important; + } + + .is-h-m-mobile { + height: 150px !important; + } + + .is-h-l-mobile { + height: 200px !important; } } -.is-min-w-none { - min-width: auto !important; +@media only screen and (min-width: 769px) { + .is-w-auto-tablet { + width: auto !important; + } + + .is-w-xs-tablet { + width: 80px !important; + } + + .is-w-s-tablet { + width: 100px !important; + } + + .is-w-m-tablet { + width: 150px !important; + } + + .is-w-l-tablet { + width: 200px !important; + } + + .is-h-xs-tablet { + height: 80px !important; + } + + .is-h-s-tablet { + height: 100px !important; + } + + .is-h-m-tablet { + height: 150px !important; + } + + .is-h-l-tablet { + height: 200px !important; + } +} + +@media only screen and (min-width: 1024px) { + .is-w-auto-desktop { + width: auto !important; + } + + .is-w-xs-desktop { + width: 80px !important; + } + + .is-w-s-desktop { + width: 100px !important; + } + + .is-w-m-desktop { + width: 150px !important; + } + + .is-w-l-desktop { + width: 200px !important; + } + + .is-h-xs-desktop { + height: 80px !important; + } + + .is-h-s-desktop { + height: 100px !important; + } + + .is-h-m-desktop { + height: 150px !important; + } + + .is-h-l-desktop { + height: 200px !important; + } } /* Alignments ******************************************************************************/ /* Flex item position - * - * This is for a default `flex-direction: row`. * -------------------------------------------------------------------------- */ -.align-r { - justify-content: flex-end; +.align { + display: flex !important; + flex-direction: row !important; +} + +.align.to-c { + justify-content: center !important; +} + +.align.to-r { + justify-content: flex-end !important; +} + +.align.to-l { + justify-content: flex-start !important; +} + +@media screen and (max-width: 768px) { + .align.to-c-mobile { + justify-content: center !important; + } + + .align.to-r-mobile { + justify-content: flex-end !important; + } + + .align.to-l-mobile { + justify-content: flex-start !important; + } } @media screen and (min-width: 769px) { - .align-r-tablet { - justify-content: flex-end; + .align.to-c-tablet { + justify-content: center !important; + } + + .align.to-r-tablet { + justify-content: flex-end !important; + } + + .align.to-l-tablet { + justify-content: flex-start !important; } } /* Spacings ******************************************************************************/ +.mr-auto { + margin-right: auto !important; +} + +.ml-auto { + margin-left: auto !important; +} + @media screen and (max-width: 768px) { + .mr-auto-mobile { + margin-right: auto !important; + } + + .ml-auto-mobile { + margin-left: auto !important; + } + + .ml-3-mobile { + margin-left: 0.75rem !important; + } + .my-3-mobile { margin-top: 0.75rem !important; margin-bottom: 0.75rem !important; @@ -325,6 +524,14 @@ body { } @media screen and (min-width: 769px) { + .mr-auto-tablet { + margin-right: auto !important; + } + + .ml-auto-tablet { + margin-left: auto !important; + } + .ml-3-tablet { margin-left: 0.75rem !important; } diff --git a/bookwyrm/templates/book/book.html b/bookwyrm/templates/book/book.html index 23f7dac06..a99329104 100644 --- a/bookwyrm/templates/book/book.html +++ b/bookwyrm/templates/book/book.html @@ -48,7 +48,7 @@
      - {% include 'snippets/book_cover.html' with book=book cover_class='is-h-medium-mobile' %} + {% include 'snippets/book_cover.html' with book=book cover_class='is-h-m-mobile' %} {% include 'snippets/rate_action.html' with user=request.user book=book %}
      diff --git a/bookwyrm/templates/book/edit_book.html b/bookwyrm/templates/book/edit_book.html index 0cb1a9b12..de9c95350 100644 --- a/bookwyrm/templates/book/edit_book.html +++ b/bookwyrm/templates/book/edit_book.html @@ -170,7 +170,7 @@

      {% trans "Cover" %}

      - {% include 'snippets/book_cover.html' with book=book cover_class='is-h-small' %} + {% include 'snippets/book_cover.html' with book=book cover_class='is-h-s' %}
      diff --git a/bookwyrm/templates/book/editions.html b/bookwyrm/templates/book/editions.html index 009bdd663..dd5802342 100644 --- a/bookwyrm/templates/book/editions.html +++ b/bookwyrm/templates/book/editions.html @@ -14,11 +14,11 @@
      {% for book in editions %}
      -
      - {% include 'snippets/book_cover.html' with book=book cover_class='is-h-medium' %} +
      + {% include 'snippets/book_cover.html' with book=book cover_class='is-w-m is-h-m align to-l-mobile' %}
      -
      +

      {{ book.title }} @@ -26,7 +26,7 @@

      {% with book=book %} -
      +
      {% include 'book/publisher_info.html' %}
      diff --git a/bookwyrm/templates/discover/small-book.html b/bookwyrm/templates/discover/small-book.html index c1f5f1654..f0e1626c7 100644 --- a/bookwyrm/templates/discover/small-book.html +++ b/bookwyrm/templates/discover/small-book.html @@ -6,7 +6,7 @@ {% with book=book %}
      {% include 'snippets/book_cover.html' with cover_class='is-h-small' %} + >{% include 'snippets/book_cover.html' with cover_class='is-h-s' %} {% include 'snippets/stars.html' with rating=book|rating:request.user %} diff --git a/bookwyrm/templates/feed/feed_layout.html b/bookwyrm/templates/feed/feed_layout.html index 669c2aaa0..75fc1951a 100644 --- a/bookwyrm/templates/feed/feed_layout.html +++ b/bookwyrm/templates/feed/feed_layout.html @@ -37,7 +37,7 @@ aria-label="{{ book.title }}" aria-selected="{% if active_book == book.id|stringformat:'d' %}true{% elif shelf_counter == 1 and forloop.first %}true{% else %}false{% endif %}" aria-controls="book-{{ book.id }}"> - {% include 'snippets/book_cover.html' with book=book cover_class='is-h-medium' %} + {% include 'snippets/book_cover.html' with book=book cover_class='is-h-m' %} {% endfor %} diff --git a/bookwyrm/templates/import_status.html b/bookwyrm/templates/import_status.html index 05c811d23..3ce929e6a 100644 --- a/bookwyrm/templates/import_status.html +++ b/bookwyrm/templates/import_status.html @@ -125,7 +125,7 @@ {% if item.book %} - {% include 'snippets/book_cover.html' with book=item.book cover_class='is-h-small' %} + {% include 'snippets/book_cover.html' with book=item.book cover_class='is-h-s' %} {% endif %} diff --git a/bookwyrm/templates/lists/curate.html b/bookwyrm/templates/lists/curate.html index 529f51c30..492b399b6 100644 --- a/bookwyrm/templates/lists/curate.html +++ b/bookwyrm/templates/lists/curate.html @@ -25,23 +25,23 @@ mb-6 " > -
      +
      -
      +
      {% trans "Suggested by" %} diff --git a/bookwyrm/templates/lists/list.html b/bookwyrm/templates/lists/list.html index 0b1b05d3c..b28c469dd 100644 --- a/bookwyrm/templates/lists/list.html +++ b/bookwyrm/templates/lists/list.html @@ -37,13 +37,13 @@ columns is-mobile is-gapless " > -
      + -
      +
      {% include 'snippets/book_titleby.html' %} {% include 'snippets/stars.html' with rating=item.book|rating:request.user %} {% include 'snippets/shelve_button/shelve_button.html' %} @@ -133,11 +133,15 @@ {% if suggested_books|length > 0 %} {% for book in suggested_books %}
      - -
      +

      {% include 'snippets/book_titleby.html' with book=book %}

      diff --git a/bookwyrm/templates/lists/list_items.html b/bookwyrm/templates/lists/list_items.html index f1a4938e0..b59e2a96a 100644 --- a/bookwyrm/templates/lists/list_items.html +++ b/bookwyrm/templates/lists/list_items.html @@ -13,8 +13,8 @@ {% if list_books %} diff --git a/bookwyrm/templates/snippets/search_result_text.html b/bookwyrm/templates/snippets/search_result_text.html index e234c82c4..663ef8659 100644 --- a/bookwyrm/templates/snippets/search_result_text.html +++ b/bookwyrm/templates/snippets/search_result_text.html @@ -1,6 +1,8 @@ {% load i18n %}
      - {% include 'snippets/book_cover.html' with book=result cover_class='column' img_path=false %} +
      + {% include 'snippets/book_cover.html' with book=result cover_class='is-w-xs is-h-xs' img_path=false %} +

      diff --git a/bookwyrm/templates/snippets/status/content_status.html b/bookwyrm/templates/snippets/status/content_status.html index b2946b83b..31ba33b54 100644 --- a/bookwyrm/templates/snippets/status/content_status.html +++ b/bookwyrm/templates/snippets/status/content_status.html @@ -10,27 +10,30 @@ {% endif %} > -

      +
      {% if not hide_book %} - {% with book=status.book|default:status.mention_books.first %} - {% if book %} -
      -
      -
      - {% include 'snippets/book_cover.html' with book=book %} - {% include 'snippets/stars.html' with rating=book|rating:request.user %} - {% include 'snippets/shelve_button/shelve_button.html' with book=book %} -
      -
      -

      {{ book|book_description|to_markdown|default:""|safe|truncatewords_html:15 }}

      -
      -
      -
      - {% endif %} - {% endwith %} + {% with book=status.book|default:status.mention_books.first %} + {% if book %} +
      +
      +
      + {% include 'snippets/book_cover.html' with book=book cover_class='is-h-xs is-h-l-tablet' %} + + {% include 'snippets/stars.html' with rating=book|rating:request.user %} + + {% include 'snippets/shelve_button/shelve_button.html' with book=book %} +
      + +
      +

      {{ book|book_description|to_markdown|default:""|safe|truncatewords_html:15 }}

      +
      +
      +
      + {% endif %} + {% endwith %} {% endif %} -
      +
      {% if status_type == 'Review' %}

      -
      -
      - {% include 'snippets/book_cover.html' with book=book cover_class='is-h-small' %} + {% with book=status.book|default:status.mention_books.first %} +
      + + {% include 'snippets/book_cover.html' with book=book cover_class='is-h-xs is-h-s-tablet' %} + + +
      +

      + {% include 'snippets/book_titleby.html' with book=book %} +

      + +

      + {{ book|book_description|to_markdown|default:""|safe|truncatewords_html:20 }} +

      + + {% include 'snippets/shelve_button/shelve_button.html' with book=book %} +
      -
      -
      -

      {% include 'snippets/book_titleby.html' with book=book %}

      -

      {{ book|book_description|to_markdown|default:""|safe|truncatewords_html:20 }}

      - {% include 'snippets/shelve_button/shelve_button.html' with book=book %} -
      -
      -{% endwith %} + {% endwith %} {% endif %} {% endspaceless %} diff --git a/bookwyrm/templates/user/user.html b/bookwyrm/templates/user/user.html index 80dac2139..444385fe6 100644 --- a/bookwyrm/templates/user/user.html +++ b/bookwyrm/templates/user/user.html @@ -36,7 +36,7 @@ {% for book in shelf.books %} {% endfor %} From d8b6676976f48b24dcc2873aebb8eb3143112a9e Mon Sep 17 00:00:00 2001 From: Fabien Basmaison Date: Tue, 27 Apr 2021 16:27:39 +0200 Subject: [PATCH 031/140] cover: Udpate logged out home and discover. --- bookwyrm/static/css/bookwyrm.css | 44 +++++++++++++++++++++ bookwyrm/templates/discover/large-book.html | 10 +++-- bookwyrm/templates/discover/small-book.html | 6 +-- 3 files changed, 53 insertions(+), 7 deletions(-) diff --git a/bookwyrm/static/css/bookwyrm.css b/bookwyrm/static/css/bookwyrm.css index 4d27c2a4a..98801fa14 100644 --- a/bookwyrm/static/css/bookwyrm.css +++ b/bookwyrm/static/css/bookwyrm.css @@ -167,6 +167,9 @@ body { * standard bulma’s named breapoints: * * is-[w|h]-[xs|s|m|l|xl]-[mobile|tablet|desktop] + * + * When using `.column.is-N`, add `.is-w-auto` to the container so that the flex + * calculations are not biased by the default `max-content`. ******************************************************************************/ .column.is-cover { @@ -280,6 +283,7 @@ body { } /* Dimensions + * @todo These could be in rem. ******************************************************************************/ .is-32x32 { @@ -312,6 +316,10 @@ body { width: 200px !important; } +.is-w-xxl { + width: 500px !important; +} + .is-h-xs { height: 80px !important; } @@ -328,6 +336,10 @@ body { height: 200px !important; } +.is-h-xxl { + height: 500px !important; +} + @media only screen and (max-width: 768px) { .is-w-auto-mobile { width: auto !important; @@ -349,6 +361,10 @@ body { width: 200px !important; } + .is-w-xxl-mobile { + width: 500px !important; + } + .is-h-xs-mobile { height: 80px !important; } @@ -364,6 +380,10 @@ body { .is-h-l-mobile { height: 200px !important; } + + .is-h-xxl-mobile { + height: 500px !important; + } } @media only screen and (min-width: 769px) { @@ -387,6 +407,10 @@ body { width: 200px !important; } + .is-w-xxl-tablet { + width: 500px !important; + } + .is-h-xs-tablet { height: 80px !important; } @@ -402,6 +426,10 @@ body { .is-h-l-tablet { height: 200px !important; } + + .is-h-xxl-tablet { + height: 500px !important; + } } @media only screen and (min-width: 1024px) { @@ -425,6 +453,10 @@ body { width: 200px !important; } + .is-w-xxl-desktop { + width: 500px !important; + } + .is-h-xs-desktop { height: 80px !important; } @@ -440,6 +472,10 @@ body { .is-h-l-desktop { height: 200px !important; } + + .is-h-xxl-desktop { + height: 500px !important; + } } /* Alignments @@ -461,6 +497,10 @@ body { justify-content: flex-end !important; } +.align.to-b { + align-items: flex-end !important; +} + .align.to-l { justify-content: flex-start !important; } @@ -513,6 +553,10 @@ body { margin-left: auto !important; } + .mt-3-mobile { + margin-top: 0.75rem !important; + } + .ml-3-mobile { margin-left: 0.75rem !important; } diff --git a/bookwyrm/templates/discover/large-book.html b/bookwyrm/templates/discover/large-book.html index c7b39ebbe..1808a0f9d 100644 --- a/bookwyrm/templates/discover/large-book.html +++ b/bookwyrm/templates/discover/large-book.html @@ -4,16 +4,18 @@ {% if book %} {% with book=book %} -
      -
      +
      +
      {% include 'snippets/book_cover.html' %} + >{% include 'snippets/book_cover.html' with cover_class='is-w-l-mobile is-w-auto-tablet' %} {% include 'snippets/stars.html' with rating=book|rating:request.user %}
      -
      + +

      {{ book.title }}

      diff --git a/bookwyrm/templates/discover/small-book.html b/bookwyrm/templates/discover/small-book.html index f0e1626c7..ad7e00fba 100644 --- a/bookwyrm/templates/discover/small-book.html +++ b/bookwyrm/templates/discover/small-book.html @@ -4,9 +4,9 @@ {% if book %} {% with book=book %} - {% include 'snippets/book_cover.html' with cover_class='is-h-s' %} + + {% include 'snippets/book_cover.html' with cover_class='is-w-l-mobile is-h-l-tablet is-w-auto align to-b to-l' %} + {% include 'snippets/stars.html' with rating=book|rating:request.user %} From 8d53b7589fc448b84a8fa63fb1ee47552c06769c Mon Sep 17 00:00:00 2001 From: Fabien Basmaison Date: Tue, 27 Apr 2021 17:23:37 +0200 Subject: [PATCH 032/140] cover: Update /get-started/books: - Remove `.content` from templates. - Remove a stray unclosed label. --- .../templates/get_started/book_preview.html | 8 +-- bookwyrm/templates/get_started/books.html | 63 +++++++++++-------- 2 files changed, 40 insertions(+), 31 deletions(-) diff --git a/bookwyrm/templates/get_started/book_preview.html b/bookwyrm/templates/get_started/book_preview.html index 04d0c424d..578fef708 100644 --- a/bookwyrm/templates/get_started/book_preview.html +++ b/bookwyrm/templates/get_started/book_preview.html @@ -1,8 +1,8 @@ {% load i18n %} -
      - {% include 'snippets/book_cover.html' with book=book %} -

      From 095b60bff107ab36370ce1743fb585a38598e904 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 29 Apr 2021 11:22:09 -0700 Subject: [PATCH 064/140] Show search result context for inventaire results --- bookwyrm/connectors/inventaire.py | 2 ++ bookwyrm/templates/snippets/search_result_text.html | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/bookwyrm/connectors/inventaire.py b/bookwyrm/connectors/inventaire.py index 896f84af1..dc27f2c02 100644 --- a/bookwyrm/connectors/inventaire.py +++ b/bookwyrm/connectors/inventaire.py @@ -86,6 +86,7 @@ class Connector(AbstractConnector): return SearchResult( title=search_result.get("label"), key=self.get_remote_id(search_result.get("uri")), + author=search_result.get("description"), view_link="{:s}/entity/{:s}".format( self.base_url, search_result.get("uri") ), @@ -108,6 +109,7 @@ class Connector(AbstractConnector): return SearchResult( title=title[0], key=self.get_remote_id(search_result.get("uri")), + author=search_result.get("description"), view_link="{:s}/entity/{:s}".format( self.base_url, search_result.get("uri") ), diff --git a/bookwyrm/templates/snippets/search_result_text.html b/bookwyrm/templates/snippets/search_result_text.html index 2f6ba5037..26623c05a 100644 --- a/bookwyrm/templates/snippets/search_result_text.html +++ b/bookwyrm/templates/snippets/search_result_text.html @@ -18,8 +18,13 @@ {{ result.title }} +

      +

      {% if result.author %} - {% blocktrans with author=result.author %}by {{ author }}{% endblocktrans %}{% endif %}{% if result.year %} ({{ result.year }}) + {{ result.author }} + {% endif %} + {% if result.year %} + ({{ result.year }}) {% endif %}

      From a31d05c6947d2469d4adc9a22975d6155082e8dd Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 29 Apr 2021 11:31:01 -0700 Subject: [PATCH 065/140] Don't crash on books with no isbn --- bookwyrm/models/book.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index 0539414ad..869ff04d2 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -240,8 +240,10 @@ class Edition(Book): self.isbn_13 = isbn_10_to_13(self.isbn_10) # normalize isbn format - self.isbn_10 = re.sub(r"[^0-9X]", "", self.isbn_10) - self.isbn_13 = re.sub(r"[^0-9X]", "", self.isbn_13) + if self.isbn_10: + self.isbn_10 = re.sub(r"[^0-9X]", "", self.isbn_10) + if self.isbn_13: + self.isbn_13 = re.sub(r"[^0-9X]", "", self.isbn_13) # set rank self.edition_rank = self.get_rank() From 0dcd7853f7ad4e94dc70104c7f8484f05a4f1844 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 29 Apr 2021 11:38:51 -0700 Subject: [PATCH 066/140] Updates locales --- locale/de_DE/LC_MESSAGES/django.mo | Bin 25779 -> 25234 bytes locale/de_DE/LC_MESSAGES/django.po | 73 ++++++++++++++------------- locale/en_US/LC_MESSAGES/django.po | 67 ++++++++++++------------ locale/es/LC_MESSAGES/django.mo | Bin 42362 -> 65330 bytes locale/es/LC_MESSAGES/django.po | 73 ++++++++++++++------------- locale/fr_FR/LC_MESSAGES/django.mo | Bin 42851 -> 41556 bytes locale/fr_FR/LC_MESSAGES/django.po | 73 ++++++++++++++------------- locale/zh_Hans/LC_MESSAGES/django.mo | Bin 38418 -> 37261 bytes locale/zh_Hans/LC_MESSAGES/django.po | 73 ++++++++++++++------------- 9 files changed, 189 insertions(+), 170 deletions(-) diff --git a/locale/de_DE/LC_MESSAGES/django.mo b/locale/de_DE/LC_MESSAGES/django.mo index dca726855f8f9060958660f8ab5bae1e36db3fd9..3f41eda575696af9585b5df60f4b09c991259496 100644 GIT binary patch delta 7645 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 NmY;|0x2th`nE{CLq5uE@ diff --git a/locale/de_DE/LC_MESSAGES/django.po b/locale/de_DE/LC_MESSAGES/django.po index 7acc3f969..bbdd13275 100644 --- a/locale/de_DE/LC_MESSAGES/django.po +++ b/locale/de_DE/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-26 09:56-0700\n" +"POT-Creation-Date: 2021-04-29 11:36-0700\n" "PO-Revision-Date: 2021-03-02 17:19-0800\n" "Last-Translator: Mouse Reeve \n" "Language-Team: English \n" @@ -100,23 +100,23 @@ msgstr "Username" msgid "A user with that username already exists." msgstr "Dieser Benutzename ist bereits vergeben." -#: bookwyrm/settings.py:152 +#: bookwyrm/settings.py:155 msgid "English" msgstr "Englisch" -#: bookwyrm/settings.py:153 +#: bookwyrm/settings.py:156 msgid "German" msgstr "Deutsch" -#: bookwyrm/settings.py:154 +#: bookwyrm/settings.py:157 msgid "Spanish" msgstr "Spanisch" -#: bookwyrm/settings.py:155 +#: bookwyrm/settings.py:158 msgid "French" msgstr "Französisch" -#: bookwyrm/settings.py:156 +#: bookwyrm/settings.py:159 msgid "Simplified Chinese" msgstr "Vereinfachtes Chinesisch" @@ -178,24 +178,30 @@ msgstr "Laden fehlgeschlagen" msgid "View on OpenLibrary" msgstr "In OpenLibrary ansehen" -#: bookwyrm/templates/book/book.html:102 +#: bookwyrm/templates/book/book.html:85 +#, fuzzy +#| msgid "View on OpenLibrary" +msgid "View on Inventaire" +msgstr "In OpenLibrary ansehen" + +#: bookwyrm/templates/book/book.html:105 #, python-format msgid "(%(review_count)s review)" msgid_plural "(%(review_count)s reviews)" msgstr[0] "(%(review_count)s Bewertung)" msgstr[1] "(%(review_count)s Bewertungen)" -#: bookwyrm/templates/book/book.html:114 +#: bookwyrm/templates/book/book.html:117 msgid "Add Description" msgstr "Beschreibung hinzufügen" -#: bookwyrm/templates/book/book.html:121 +#: bookwyrm/templates/book/book.html:124 #: bookwyrm/templates/book/edit_book.html:107 #: bookwyrm/templates/lists/form.html:12 msgid "Description:" msgstr "Beschreibung:" -#: bookwyrm/templates/book/book.html:125 +#: bookwyrm/templates/book/book.html:128 #: bookwyrm/templates/book/edit_book.html:240 #: bookwyrm/templates/edit_author.html:78 bookwyrm/templates/lists/form.html:42 #: bookwyrm/templates/preferences/edit_user.html:70 @@ -210,7 +216,7 @@ msgstr "Beschreibung:" msgid "Save" msgstr "Speichern" -#: bookwyrm/templates/book/book.html:126 bookwyrm/templates/book/book.html:175 +#: bookwyrm/templates/book/book.html:129 bookwyrm/templates/book/book.html:178 #: bookwyrm/templates/book/cover_modal.html:32 #: bookwyrm/templates/book/edit_book.html:241 #: bookwyrm/templates/edit_author.html:79 @@ -226,19 +232,19 @@ msgstr "Speichern" msgid "Cancel" msgstr "Abbrechen" -#: bookwyrm/templates/book/book.html:135 +#: bookwyrm/templates/book/book.html:138 #, fuzzy, python-format #| msgid "%(title)s by " msgid "%(count)s editions" msgstr "%(title)s von" -#: bookwyrm/templates/book/book.html:143 +#: bookwyrm/templates/book/book.html:146 #, fuzzy, python-format #| msgid "Direct Messages with %(username)s" msgid "This edition is on your %(shelf_name)s shelf." msgstr "Direktnachrichten mit %(username)s" -#: bookwyrm/templates/book/book.html:149 +#: bookwyrm/templates/book/book.html:152 #, fuzzy, python-format #| msgid "" #| " added %(book_title)s to your list " @@ -250,74 +256,74 @@ msgstr "" "hat %(book_title)s zu deiner Liste " "\"%(list_name)s\" Hinzugefügt" -#: bookwyrm/templates/book/book.html:158 +#: bookwyrm/templates/book/book.html:161 msgid "Your reading activity" msgstr "Deine Leseaktivität" -#: bookwyrm/templates/book/book.html:160 +#: bookwyrm/templates/book/book.html:163 msgid "Add read dates" msgstr "Lesedaten hinzufügen" -#: bookwyrm/templates/book/book.html:165 +#: bookwyrm/templates/book/book.html:168 msgid "You don't have any reading activity for this book." msgstr "Du hast keine Leseaktivität für dieses Buch." -#: bookwyrm/templates/book/book.html:172 +#: bookwyrm/templates/book/book.html:175 msgid "Create" msgstr "Erstellen" -#: bookwyrm/templates/book/book.html:194 +#: bookwyrm/templates/book/book.html:197 msgid "Subjects" msgstr "Themen" -#: bookwyrm/templates/book/book.html:206 +#: bookwyrm/templates/book/book.html:209 msgid "Places" msgstr "Orte" -#: bookwyrm/templates/book/book.html:217 bookwyrm/templates/layout.html:65 +#: bookwyrm/templates/book/book.html:220 bookwyrm/templates/layout.html:65 #: bookwyrm/templates/lists/lists.html:5 bookwyrm/templates/lists/lists.html:12 #: bookwyrm/templates/search_results.html:91 #: bookwyrm/templates/user/user_layout.html:62 msgid "Lists" msgstr "Listen" -#: bookwyrm/templates/book/book.html:228 +#: bookwyrm/templates/book/book.html:231 #, fuzzy #| msgid "Go to list" msgid "Add to list" msgstr "Zur Liste" -#: bookwyrm/templates/book/book.html:238 +#: bookwyrm/templates/book/book.html:241 #: bookwyrm/templates/book/cover_modal.html:31 #: bookwyrm/templates/lists/list.html:133 msgid "Add" msgstr "Hinzufügen" -#: bookwyrm/templates/book/book.html:254 +#: bookwyrm/templates/book/book.html:257 #, fuzzy #| msgid "Review" msgid "Reviews" msgstr "Bewerten" -#: bookwyrm/templates/book/book.html:259 +#: bookwyrm/templates/book/book.html:262 #, fuzzy #| msgid "Your shelves" msgid "Your reviews" msgstr "Deine Regale" -#: bookwyrm/templates/book/book.html:265 +#: bookwyrm/templates/book/book.html:268 #, fuzzy #| msgid "Your Account" msgid "Your comments" msgstr "Dein Account" -#: bookwyrm/templates/book/book.html:271 +#: bookwyrm/templates/book/book.html:274 #, fuzzy #| msgid "Your books" msgid "Your quotes" msgstr "Deine Bücher" -#: bookwyrm/templates/book/book.html:305 +#: bookwyrm/templates/book/book.html:308 msgid "rated it" msgstr "bewertet" @@ -2728,12 +2734,7 @@ msgstr "kommentierte" msgid "quoted" msgstr "zitierte" -#: bookwyrm/templates/snippets/search_result_text.html:22 -#, python-format -msgid "by %(author)s" -msgstr "von %(author)s" - -#: bookwyrm/templates/snippets/search_result_text.html:30 +#: bookwyrm/templates/snippets/search_result_text.html:35 msgid "Import book" msgstr "Buch importieren" @@ -4495,6 +4496,10 @@ msgctxt "stick" msgid "club" msgstr "" +#, python-format +#~ msgid "by %(author)s" +#~ msgstr "von %(author)s" + #~ msgid "Deactivate user" #~ msgstr "Nutzer:in deaktivieren" diff --git a/locale/en_US/LC_MESSAGES/django.po b/locale/en_US/LC_MESSAGES/django.po index 6685605a0..3637bb770 100644 --- a/locale/en_US/LC_MESSAGES/django.po +++ b/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-26 09:56-0700\n" +"POT-Creation-Date: 2021-04-29 11:36-0700\n" "PO-Revision-Date: 2021-02-28 17:19-0800\n" "Last-Translator: Mouse Reeve \n" "Language-Team: English \n" @@ -90,23 +90,23 @@ msgstr "" msgid "A user with that username already exists." msgstr "" -#: bookwyrm/settings.py:152 +#: bookwyrm/settings.py:155 msgid "English" msgstr "" -#: bookwyrm/settings.py:153 +#: bookwyrm/settings.py:156 msgid "German" msgstr "" -#: bookwyrm/settings.py:154 +#: bookwyrm/settings.py:157 msgid "Spanish" msgstr "" -#: bookwyrm/settings.py:155 +#: bookwyrm/settings.py:158 msgid "French" msgstr "" -#: bookwyrm/settings.py:156 +#: bookwyrm/settings.py:159 msgid "Simplified Chinese" msgstr "" @@ -166,24 +166,28 @@ msgstr "" msgid "View on OpenLibrary" msgstr "" -#: bookwyrm/templates/book/book.html:102 +#: bookwyrm/templates/book/book.html:85 +msgid "View on Inventaire" +msgstr "" + +#: bookwyrm/templates/book/book.html:105 #, python-format msgid "(%(review_count)s review)" msgid_plural "(%(review_count)s reviews)" msgstr[0] "" msgstr[1] "" -#: bookwyrm/templates/book/book.html:114 +#: bookwyrm/templates/book/book.html:117 msgid "Add Description" msgstr "" -#: bookwyrm/templates/book/book.html:121 +#: bookwyrm/templates/book/book.html:124 #: bookwyrm/templates/book/edit_book.html:107 #: bookwyrm/templates/lists/form.html:12 msgid "Description:" msgstr "" -#: bookwyrm/templates/book/book.html:125 +#: bookwyrm/templates/book/book.html:128 #: bookwyrm/templates/book/edit_book.html:240 #: bookwyrm/templates/edit_author.html:78 bookwyrm/templates/lists/form.html:42 #: bookwyrm/templates/preferences/edit_user.html:70 @@ -198,7 +202,7 @@ msgstr "" msgid "Save" msgstr "" -#: bookwyrm/templates/book/book.html:126 bookwyrm/templates/book/book.html:175 +#: bookwyrm/templates/book/book.html:129 bookwyrm/templates/book/book.html:178 #: bookwyrm/templates/book/cover_modal.html:32 #: bookwyrm/templates/book/edit_book.html:241 #: bookwyrm/templates/edit_author.html:79 @@ -214,81 +218,81 @@ msgstr "" msgid "Cancel" msgstr "" -#: bookwyrm/templates/book/book.html:135 +#: bookwyrm/templates/book/book.html:138 #, python-format msgid "%(count)s editions" msgstr "" -#: bookwyrm/templates/book/book.html:143 +#: bookwyrm/templates/book/book.html:146 #, python-format msgid "This edition is on your %(shelf_name)s shelf." msgstr "" -#: bookwyrm/templates/book/book.html:149 +#: bookwyrm/templates/book/book.html:152 #, python-format msgid "" "A different edition of this book is on your %(shelf_name)s shelf." msgstr "" -#: bookwyrm/templates/book/book.html:158 +#: bookwyrm/templates/book/book.html:161 msgid "Your reading activity" msgstr "" -#: bookwyrm/templates/book/book.html:160 +#: bookwyrm/templates/book/book.html:163 msgid "Add read dates" msgstr "" -#: bookwyrm/templates/book/book.html:165 +#: bookwyrm/templates/book/book.html:168 msgid "You don't have any reading activity for this book." msgstr "" -#: bookwyrm/templates/book/book.html:172 +#: bookwyrm/templates/book/book.html:175 msgid "Create" msgstr "" -#: bookwyrm/templates/book/book.html:194 +#: bookwyrm/templates/book/book.html:197 msgid "Subjects" msgstr "" -#: bookwyrm/templates/book/book.html:206 +#: bookwyrm/templates/book/book.html:209 msgid "Places" msgstr "" -#: bookwyrm/templates/book/book.html:217 bookwyrm/templates/layout.html:65 +#: bookwyrm/templates/book/book.html:220 bookwyrm/templates/layout.html:65 #: bookwyrm/templates/lists/lists.html:5 bookwyrm/templates/lists/lists.html:12 #: bookwyrm/templates/search_results.html:91 #: bookwyrm/templates/user/user_layout.html:62 msgid "Lists" msgstr "" -#: bookwyrm/templates/book/book.html:228 +#: bookwyrm/templates/book/book.html:231 msgid "Add to list" msgstr "" -#: bookwyrm/templates/book/book.html:238 +#: bookwyrm/templates/book/book.html:241 #: bookwyrm/templates/book/cover_modal.html:31 #: bookwyrm/templates/lists/list.html:133 msgid "Add" msgstr "" -#: bookwyrm/templates/book/book.html:254 +#: bookwyrm/templates/book/book.html:257 msgid "Reviews" msgstr "" -#: bookwyrm/templates/book/book.html:259 +#: bookwyrm/templates/book/book.html:262 msgid "Your reviews" msgstr "" -#: bookwyrm/templates/book/book.html:265 +#: bookwyrm/templates/book/book.html:268 msgid "Your comments" msgstr "" -#: bookwyrm/templates/book/book.html:271 +#: bookwyrm/templates/book/book.html:274 msgid "Your quotes" msgstr "" -#: bookwyrm/templates/book/book.html:305 +#: bookwyrm/templates/book/book.html:308 msgid "rated it" msgstr "" @@ -2481,12 +2485,7 @@ msgstr "" msgid "quoted" msgstr "" -#: bookwyrm/templates/snippets/search_result_text.html:22 -#, python-format -msgid "by %(author)s" -msgstr "" - -#: bookwyrm/templates/snippets/search_result_text.html:30 +#: bookwyrm/templates/snippets/search_result_text.html:35 msgid "Import book" msgstr "" diff --git a/locale/es/LC_MESSAGES/django.mo b/locale/es/LC_MESSAGES/django.mo index 64baee4f2fb999e55a052d3f2f25e231cbdc0e16..1fb1ae530173b3a63652ee8d1e2face2a044ffc5 100644 GIT binary patch literal 65330 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 kYsC-(8g~iFNX!G5 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%0DKK=2?os8tGDBmyb{LHp7{Cv<@F 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 oD785C@J6uY8Cg=aso1FA3NGLBqH>oHU6d\n" "Language-Team: LANGUAGE \n" @@ -90,23 +90,23 @@ msgstr "nombre de usuario" msgid "A user with that username already exists." msgstr "Ya existe un usuario con ese nombre." -#: bookwyrm/settings.py:152 +#: bookwyrm/settings.py:155 msgid "English" msgstr "Inglés" -#: bookwyrm/settings.py:153 +#: bookwyrm/settings.py:156 msgid "German" msgstr "Aléman" -#: bookwyrm/settings.py:154 +#: bookwyrm/settings.py:157 msgid "Spanish" msgstr "Español" -#: bookwyrm/settings.py:155 +#: bookwyrm/settings.py:158 msgid "French" msgstr "Francés" -#: bookwyrm/settings.py:156 +#: bookwyrm/settings.py:159 msgid "Simplified Chinese" msgstr "Chino simplificado" @@ -166,24 +166,30 @@ msgstr "No se pudo cargar la portada" msgid "View on OpenLibrary" msgstr "Ver en OpenLibrary" -#: bookwyrm/templates/book/book.html:102 +#: bookwyrm/templates/book/book.html:85 +#, fuzzy +#| msgid "View on OpenLibrary" +msgid "View on Inventaire" +msgstr "Ver en OpenLibrary" + +#: bookwyrm/templates/book/book.html:105 #, python-format msgid "(%(review_count)s review)" msgid_plural "(%(review_count)s reviews)" msgstr[0] "(%(review_count)s reseña)" msgstr[1] "(%(review_count)s reseñas)" -#: bookwyrm/templates/book/book.html:114 +#: bookwyrm/templates/book/book.html:117 msgid "Add Description" msgstr "Agregar descripción" -#: bookwyrm/templates/book/book.html:121 +#: bookwyrm/templates/book/book.html:124 #: bookwyrm/templates/book/edit_book.html:107 #: bookwyrm/templates/lists/form.html:12 msgid "Description:" msgstr "Descripción:" -#: bookwyrm/templates/book/book.html:125 +#: bookwyrm/templates/book/book.html:128 #: bookwyrm/templates/book/edit_book.html:240 #: bookwyrm/templates/edit_author.html:78 bookwyrm/templates/lists/form.html:42 #: bookwyrm/templates/preferences/edit_user.html:70 @@ -198,7 +204,7 @@ msgstr "Descripción:" msgid "Save" msgstr "Guardar" -#: bookwyrm/templates/book/book.html:126 bookwyrm/templates/book/book.html:175 +#: bookwyrm/templates/book/book.html:129 bookwyrm/templates/book/book.html:178 #: bookwyrm/templates/book/cover_modal.html:32 #: bookwyrm/templates/book/edit_book.html:241 #: bookwyrm/templates/edit_author.html:79 @@ -214,18 +220,18 @@ msgstr "Guardar" msgid "Cancel" msgstr "Cancelar" -#: bookwyrm/templates/book/book.html:135 +#: bookwyrm/templates/book/book.html:138 #, python-format msgid "%(count)s editions" msgstr "%(count)s ediciones" -#: bookwyrm/templates/book/book.html:143 +#: bookwyrm/templates/book/book.html:146 #, python-format msgid "This edition is on your %(shelf_name)s shelf." msgstr "" "Esta edición está en tu %(shelf_name)s estante." -#: bookwyrm/templates/book/book.html:149 +#: bookwyrm/templates/book/book.html:152 #, python-format msgid "" "A different edition of this book is on your edición diferente de este libro está en tu " "%(shelf_name)s estante." -#: bookwyrm/templates/book/book.html:158 +#: bookwyrm/templates/book/book.html:161 msgid "Your reading activity" msgstr "Tu actividad de lectura" -#: bookwyrm/templates/book/book.html:160 +#: bookwyrm/templates/book/book.html:163 msgid "Add read dates" msgstr "Agregar fechas de lectura" -#: bookwyrm/templates/book/book.html:165 +#: bookwyrm/templates/book/book.html:168 msgid "You don't have any reading activity for this book." msgstr "No tienes ninguna actividad de lectura para este libro." -#: bookwyrm/templates/book/book.html:172 +#: bookwyrm/templates/book/book.html:175 msgid "Create" msgstr "Crear" -#: bookwyrm/templates/book/book.html:194 +#: bookwyrm/templates/book/book.html:197 msgid "Subjects" msgstr "Sujetos" -#: bookwyrm/templates/book/book.html:206 +#: bookwyrm/templates/book/book.html:209 msgid "Places" msgstr "Lugares" -#: bookwyrm/templates/book/book.html:217 bookwyrm/templates/layout.html:65 +#: bookwyrm/templates/book/book.html:220 bookwyrm/templates/layout.html:65 #: bookwyrm/templates/lists/lists.html:5 bookwyrm/templates/lists/lists.html:12 #: bookwyrm/templates/search_results.html:91 #: bookwyrm/templates/user/user_layout.html:62 msgid "Lists" msgstr "Listas" -#: bookwyrm/templates/book/book.html:228 +#: bookwyrm/templates/book/book.html:231 msgid "Add to list" msgstr "Agregar a lista" -#: bookwyrm/templates/book/book.html:238 +#: bookwyrm/templates/book/book.html:241 #: bookwyrm/templates/book/cover_modal.html:31 #: bookwyrm/templates/lists/list.html:133 msgid "Add" msgstr "Agregar" -#: bookwyrm/templates/book/book.html:254 +#: bookwyrm/templates/book/book.html:257 #, fuzzy #| msgid "Review" msgid "Reviews" msgstr "Reseña" -#: bookwyrm/templates/book/book.html:259 +#: bookwyrm/templates/book/book.html:262 #, fuzzy #| msgid "Your shelves" msgid "Your reviews" msgstr "Tus estantes" -#: bookwyrm/templates/book/book.html:265 +#: bookwyrm/templates/book/book.html:268 #, fuzzy #| msgid "Your Account" msgid "Your comments" msgstr "Tu cuenta" -#: bookwyrm/templates/book/book.html:271 +#: bookwyrm/templates/book/book.html:274 #, fuzzy #| msgid "Your books" msgid "Your quotes" msgstr "Tus libros" -#: bookwyrm/templates/book/book.html:305 +#: bookwyrm/templates/book/book.html:308 msgid "rated it" msgstr "lo calificó con" @@ -2571,12 +2577,7 @@ msgstr "comentó en" msgid "quoted" msgstr "citó" -#: bookwyrm/templates/snippets/search_result_text.html:22 -#, python-format -msgid "by %(author)s" -msgstr "por %(author)s" - -#: bookwyrm/templates/snippets/search_result_text.html:30 +#: bookwyrm/templates/snippets/search_result_text.html:35 msgid "Import book" msgstr "Importar libro" @@ -4299,6 +4300,10 @@ msgctxt "stick" msgid "club" msgstr "garrote" +#, python-format +#~ msgid "by %(author)s" +#~ msgstr "por %(author)s" + #, python-format #~ msgid "%(rating)s star" #~ msgid_plural "%(rating)s stars" diff --git a/locale/fr_FR/LC_MESSAGES/django.mo b/locale/fr_FR/LC_MESSAGES/django.mo index b91a542dbfb13e56f1baff5aeab3b9c4a3088116..b88e6e3e553d7ff3d88570f27eff191e6a57ad71 100644 GIT binary patch delta 12040 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 ue(u}sch_5%Q*x1}=x delta 12883 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\n" "Language-Team: Mouse Reeve \n" @@ -96,23 +96,23 @@ msgstr "nom du compte :" msgid "A user with that username already exists." msgstr "Ce nom est déjà associé à un compte." -#: bookwyrm/settings.py:152 +#: bookwyrm/settings.py:155 msgid "English" msgstr "English" -#: bookwyrm/settings.py:153 +#: bookwyrm/settings.py:156 msgid "German" msgstr "Deutsch" -#: bookwyrm/settings.py:154 +#: bookwyrm/settings.py:157 msgid "Spanish" msgstr "Español" -#: bookwyrm/settings.py:155 +#: bookwyrm/settings.py:158 msgid "French" msgstr "Français" -#: bookwyrm/settings.py:156 +#: bookwyrm/settings.py:159 msgid "Simplified Chinese" msgstr "简化字" @@ -172,24 +172,30 @@ msgstr "La couverture n’a pu être chargée" msgid "View on OpenLibrary" msgstr "Voir sur OpenLibrary" -#: bookwyrm/templates/book/book.html:102 +#: bookwyrm/templates/book/book.html:85 +#, fuzzy +#| msgid "View on OpenLibrary" +msgid "View on Inventaire" +msgstr "Voir sur OpenLibrary" + +#: bookwyrm/templates/book/book.html:105 #, python-format msgid "(%(review_count)s review)" msgid_plural "(%(review_count)s reviews)" msgstr[0] "(%(review_count)s critique)" msgstr[1] "(%(review_count)s critiques)" -#: bookwyrm/templates/book/book.html:114 +#: bookwyrm/templates/book/book.html:117 msgid "Add Description" msgstr "Ajouter une description" -#: bookwyrm/templates/book/book.html:121 +#: bookwyrm/templates/book/book.html:124 #: bookwyrm/templates/book/edit_book.html:107 #: bookwyrm/templates/lists/form.html:12 msgid "Description:" msgstr "Description :" -#: bookwyrm/templates/book/book.html:125 +#: bookwyrm/templates/book/book.html:128 #: bookwyrm/templates/book/edit_book.html:240 #: bookwyrm/templates/edit_author.html:78 bookwyrm/templates/lists/form.html:42 #: bookwyrm/templates/preferences/edit_user.html:70 @@ -204,7 +210,7 @@ msgstr "Description :" msgid "Save" msgstr "Enregistrer" -#: bookwyrm/templates/book/book.html:126 bookwyrm/templates/book/book.html:175 +#: bookwyrm/templates/book/book.html:129 bookwyrm/templates/book/book.html:178 #: bookwyrm/templates/book/cover_modal.html:32 #: bookwyrm/templates/book/edit_book.html:241 #: bookwyrm/templates/edit_author.html:79 @@ -220,18 +226,18 @@ msgstr "Enregistrer" msgid "Cancel" msgstr "Annuler" -#: bookwyrm/templates/book/book.html:135 +#: bookwyrm/templates/book/book.html:138 #, python-format msgid "%(count)s editions" msgstr "%(count)s éditions" -#: bookwyrm/templates/book/book.html:143 +#: bookwyrm/templates/book/book.html:146 #, python-format msgid "This edition is on your %(shelf_name)s shelf." msgstr "" "Cette édition est sur votre étagère %(shelf_name)s." -#: bookwyrm/templates/book/book.html:149 +#: bookwyrm/templates/book/book.html:152 #, python-format msgid "" "A different edition of this book is on your édition différente de ce livre existe sur " "votre étagère %(shelf_name)s." -#: bookwyrm/templates/book/book.html:158 +#: bookwyrm/templates/book/book.html:161 msgid "Your reading activity" msgstr "Votre activité de lecture" -#: bookwyrm/templates/book/book.html:160 +#: bookwyrm/templates/book/book.html:163 msgid "Add read dates" msgstr "Ajouter des dates de lecture" -#: bookwyrm/templates/book/book.html:165 +#: bookwyrm/templates/book/book.html:168 msgid "You don't have any reading activity for this book." msgstr "Vous n’avez aucune activité de lecture pour ce livre" -#: bookwyrm/templates/book/book.html:172 +#: bookwyrm/templates/book/book.html:175 msgid "Create" msgstr "Créer" -#: bookwyrm/templates/book/book.html:194 +#: bookwyrm/templates/book/book.html:197 msgid "Subjects" msgstr "Sujets" -#: bookwyrm/templates/book/book.html:206 +#: bookwyrm/templates/book/book.html:209 msgid "Places" msgstr "Lieux" -#: bookwyrm/templates/book/book.html:217 bookwyrm/templates/layout.html:65 +#: bookwyrm/templates/book/book.html:220 bookwyrm/templates/layout.html:65 #: bookwyrm/templates/lists/lists.html:5 bookwyrm/templates/lists/lists.html:12 #: bookwyrm/templates/search_results.html:91 #: bookwyrm/templates/user/user_layout.html:62 msgid "Lists" msgstr "Listes" -#: bookwyrm/templates/book/book.html:228 +#: bookwyrm/templates/book/book.html:231 msgid "Add to list" msgstr "Ajouter à la liste" -#: bookwyrm/templates/book/book.html:238 +#: bookwyrm/templates/book/book.html:241 #: bookwyrm/templates/book/cover_modal.html:31 #: bookwyrm/templates/lists/list.html:133 msgid "Add" msgstr "Ajouter" -#: bookwyrm/templates/book/book.html:254 +#: bookwyrm/templates/book/book.html:257 #, fuzzy #| msgid "Review" msgid "Reviews" msgstr "Critique" -#: bookwyrm/templates/book/book.html:259 +#: bookwyrm/templates/book/book.html:262 #, fuzzy #| msgid "Your shelves" msgid "Your reviews" msgstr "Vos étagères" -#: bookwyrm/templates/book/book.html:265 +#: bookwyrm/templates/book/book.html:268 #, fuzzy #| msgid "Your Account" msgid "Your comments" msgstr "Votre compte" -#: bookwyrm/templates/book/book.html:271 +#: bookwyrm/templates/book/book.html:274 #, fuzzy #| msgid "Your books" msgid "Your quotes" msgstr "Vos livres" -#: bookwyrm/templates/book/book.html:305 +#: bookwyrm/templates/book/book.html:308 msgid "rated it" msgstr "l’a noté" @@ -2605,12 +2611,7 @@ msgstr "a commenté" msgid "quoted" msgstr "a cité" -#: bookwyrm/templates/snippets/search_result_text.html:22 -#, python-format -msgid "by %(author)s" -msgstr "par %(author)s" - -#: bookwyrm/templates/snippets/search_result_text.html:30 +#: bookwyrm/templates/snippets/search_result_text.html:35 msgid "Import book" msgstr "Importer le livre" @@ -4341,6 +4342,10 @@ msgctxt "stick" msgid "club" msgstr "" +#, python-format +#~ msgid "by %(author)s" +#~ msgstr "par %(author)s" + #~ msgid "Deactivate user" #~ msgstr "Désactiver le compte" diff --git a/locale/zh_Hans/LC_MESSAGES/django.mo b/locale/zh_Hans/LC_MESSAGES/django.mo index 07b8d63ca2e7a940d4feb0d0a94892b7a708e8b5..765ee77f337dbac59fdba575943504652b01f890 100644 GIT binary patch delta 11940 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 F003V;T>=0A diff --git a/locale/zh_Hans/LC_MESSAGES/django.po b/locale/zh_Hans/LC_MESSAGES/django.po index 789960ccc..af3bc59bd 100644 --- a/locale/zh_Hans/LC_MESSAGES/django.po +++ b/locale/zh_Hans/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-26 09:56-0700\n" +"POT-Creation-Date: 2021-04-29 11:36-0700\n" "PO-Revision-Date: 2021-03-20 00:56+0000\n" "Last-Translator: Kana \n" "Language-Team: Mouse Reeve \n" @@ -96,23 +96,23 @@ msgstr "用户名" msgid "A user with that username already exists." msgstr "已经存在使用该用户名的用户。" -#: bookwyrm/settings.py:152 +#: bookwyrm/settings.py:155 msgid "English" msgstr "English(英语)" -#: bookwyrm/settings.py:153 +#: bookwyrm/settings.py:156 msgid "German" msgstr "Deutsch(德语)" -#: bookwyrm/settings.py:154 +#: bookwyrm/settings.py:157 msgid "Spanish" msgstr "Español(西班牙语)" -#: bookwyrm/settings.py:155 +#: bookwyrm/settings.py:158 msgid "French" msgstr "Français(法语)" -#: bookwyrm/settings.py:156 +#: bookwyrm/settings.py:159 msgid "Simplified Chinese" msgstr "简体中文" @@ -172,23 +172,29 @@ msgstr "加载封面失败" msgid "View on OpenLibrary" msgstr "在 OpenLibrary 查看" -#: bookwyrm/templates/book/book.html:102 +#: bookwyrm/templates/book/book.html:85 +#, fuzzy +#| msgid "View on OpenLibrary" +msgid "View on Inventaire" +msgstr "在 OpenLibrary 查看" + +#: bookwyrm/templates/book/book.html:105 #, python-format msgid "(%(review_count)s review)" msgid_plural "(%(review_count)s reviews)" msgstr[0] "(%(review_count)s 则书评)" -#: bookwyrm/templates/book/book.html:114 +#: bookwyrm/templates/book/book.html:117 msgid "Add Description" msgstr "添加描述" -#: bookwyrm/templates/book/book.html:121 +#: bookwyrm/templates/book/book.html:124 #: bookwyrm/templates/book/edit_book.html:107 #: bookwyrm/templates/lists/form.html:12 msgid "Description:" msgstr "描述:" -#: bookwyrm/templates/book/book.html:125 +#: bookwyrm/templates/book/book.html:128 #: bookwyrm/templates/book/edit_book.html:240 #: bookwyrm/templates/edit_author.html:78 bookwyrm/templates/lists/form.html:42 #: bookwyrm/templates/preferences/edit_user.html:70 @@ -203,7 +209,7 @@ msgstr "描述:" msgid "Save" msgstr "保存" -#: bookwyrm/templates/book/book.html:126 bookwyrm/templates/book/book.html:175 +#: bookwyrm/templates/book/book.html:129 bookwyrm/templates/book/book.html:178 #: bookwyrm/templates/book/cover_modal.html:32 #: bookwyrm/templates/book/edit_book.html:241 #: bookwyrm/templates/edit_author.html:79 @@ -219,17 +225,17 @@ msgstr "保存" msgid "Cancel" msgstr "取消" -#: bookwyrm/templates/book/book.html:135 +#: bookwyrm/templates/book/book.html:138 #, python-format msgid "%(count)s editions" msgstr "%(count)s 个版本" -#: bookwyrm/templates/book/book.html:143 +#: bookwyrm/templates/book/book.html:146 #, python-format msgid "This edition is on your %(shelf_name)s shelf." msgstr "此版本在你的 %(shelf_name)s 书架上。" -#: bookwyrm/templates/book/book.html:149 +#: bookwyrm/templates/book/book.html:152 #, python-format msgid "" "A different edition of this book is on your 另一个版本 在你的 %(shelf_name)s 书架上。" -#: bookwyrm/templates/book/book.html:158 +#: bookwyrm/templates/book/book.html:161 msgid "Your reading activity" msgstr "你的阅读活动" -#: bookwyrm/templates/book/book.html:160 +#: bookwyrm/templates/book/book.html:163 msgid "Add read dates" msgstr "添加阅读日期" -#: bookwyrm/templates/book/book.html:165 +#: bookwyrm/templates/book/book.html:168 msgid "You don't have any reading activity for this book." msgstr "你还没有任何这本书的阅读活动。" -#: bookwyrm/templates/book/book.html:172 +#: bookwyrm/templates/book/book.html:175 msgid "Create" msgstr "创建" -#: bookwyrm/templates/book/book.html:194 +#: bookwyrm/templates/book/book.html:197 msgid "Subjects" msgstr "主题" -#: bookwyrm/templates/book/book.html:206 +#: bookwyrm/templates/book/book.html:209 msgid "Places" msgstr "地点" -#: bookwyrm/templates/book/book.html:217 bookwyrm/templates/layout.html:65 +#: bookwyrm/templates/book/book.html:220 bookwyrm/templates/layout.html:65 #: bookwyrm/templates/lists/lists.html:5 bookwyrm/templates/lists/lists.html:12 #: bookwyrm/templates/search_results.html:91 #: bookwyrm/templates/user/user_layout.html:62 msgid "Lists" msgstr "列表" -#: bookwyrm/templates/book/book.html:228 +#: bookwyrm/templates/book/book.html:231 msgid "Add to list" msgstr "添加到列表" -#: bookwyrm/templates/book/book.html:238 +#: bookwyrm/templates/book/book.html:241 #: bookwyrm/templates/book/cover_modal.html:31 #: bookwyrm/templates/lists/list.html:133 msgid "Add" msgstr "添加" -#: bookwyrm/templates/book/book.html:254 +#: bookwyrm/templates/book/book.html:257 #, fuzzy #| msgid "Review" msgid "Reviews" msgstr "书评" -#: bookwyrm/templates/book/book.html:259 +#: bookwyrm/templates/book/book.html:262 #, fuzzy #| msgid "Your shelves" msgid "Your reviews" msgstr "你的书架" -#: bookwyrm/templates/book/book.html:265 +#: bookwyrm/templates/book/book.html:268 #, fuzzy #| msgid "Your Account" msgid "Your comments" msgstr "你的帐号" -#: bookwyrm/templates/book/book.html:271 +#: bookwyrm/templates/book/book.html:274 #, fuzzy #| msgid "Your books" msgid "Your quotes" msgstr "你的书目" -#: bookwyrm/templates/book/book.html:305 +#: bookwyrm/templates/book/book.html:308 msgid "rated it" msgstr "评价了" @@ -2570,12 +2576,7 @@ msgstr "评论了" msgid "quoted" msgstr "引用了" -#: bookwyrm/templates/snippets/search_result_text.html:22 -#, python-format -msgid "by %(author)s" -msgstr "由 %(author)s 所著" - -#: bookwyrm/templates/snippets/search_result_text.html:30 +#: bookwyrm/templates/snippets/search_result_text.html:35 msgid "Import book" msgstr "导入书目" @@ -4292,6 +4293,10 @@ msgctxt "stick" msgid "club" msgstr "" +#, python-format +#~ msgid "by %(author)s" +#~ msgstr "由 %(author)s 所著" + #~ msgid "Deactivate user" #~ msgstr "停用用户" From 9e2b4f61bb65d5ed2c506fc289fa92a17e2cfdc1 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 29 Apr 2021 12:13:49 -0700 Subject: [PATCH 067/140] Make subheaders a lil smaller --- bookwyrm/templates/search_results.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bookwyrm/templates/search_results.html b/bookwyrm/templates/search_results.html index 4c9c23dae..2dba79a25 100644 --- a/bookwyrm/templates/search_results.html +++ b/bookwyrm/templates/search_results.html @@ -11,7 +11,7 @@
      -

      {% trans "Matching Books" %}

      +

      {% trans "Matching Books" %}

      {% if not local_results.results %}

      {% blocktrans %}No books found for "{{ query }}"{% endblocktrans %}

      @@ -71,7 +71,7 @@
      -

      {% trans "Matching Users" %}

      +

      {% trans "Matching Users" %}

      {% if not user_results %}

      {% blocktrans %}No users found for "{{ query }}"{% endblocktrans %}

      {% endif %} @@ -88,7 +88,7 @@
-

{% trans "Lists" %}

+

{% trans "Lists" %}

{% if not list_results %}

{% blocktrans %}No lists found for "{{ query }}"{% endblocktrans %}

{% endif %} From 9d89aaf9fcdbfb84187ae0ac9c991fc2a94e8ac7 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 29 Apr 2021 12:18:55 -0700 Subject: [PATCH 068/140] Don't let logged out viwers search for users --- bookwyrm/templates/search_results.html | 6 +++-- bookwyrm/views/search.py | 37 +++++++++++++------------- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/bookwyrm/templates/search_results.html b/bookwyrm/templates/search_results.html index 2dba79a25..9188c1f0a 100644 --- a/bookwyrm/templates/search_results.html +++ b/bookwyrm/templates/search_results.html @@ -70,10 +70,11 @@ {% endif %}
+ {% if request.user.is_authenticated %}

{% trans "Matching Users" %}

{% if not user_results %} -

{% blocktrans %}No users found for "{{ query }}"{% endblocktrans %}

+

{% blocktrans %}No users found for "{{ query }}"{% endblocktrans %}

{% endif %}
    {% for result in user_results %} @@ -87,10 +88,11 @@ {% endfor %}
+ {% endif %}

{% trans "Lists" %}

{% if not list_results %} -

{% blocktrans %}No lists found for "{{ query }}"{% endblocktrans %}

+

{% blocktrans %}No lists found for "{{ query }}"{% endblocktrans %}

{% endif %} {% for result in list_results %}
diff --git a/bookwyrm/views/search.py b/bookwyrm/views/search.py index 4543b55ee..bd5ac3c74 100644 --- a/bookwyrm/views/search.py +++ b/bookwyrm/views/search.py @@ -30,27 +30,30 @@ class Search(View): ) return JsonResponse([r.json() for r in book_results], safe=False) + data = {"query": query or ""} + # use webfinger for mastodon style account@domain.com username if query and re.match(regex.full_username, query): handle_remote_webfinger(query) # do a user search - user_results = ( - models.User.viewer_aware_objects(request.user) - .annotate( - similarity=Greatest( - TrigramSimilarity("username", query), - TrigramSimilarity("localname", query), + if request.user.is_authenticated: + data["user_results"] = ( + models.User.viewer_aware_objects(request.user) + .annotate( + similarity=Greatest( + TrigramSimilarity("username", query), + TrigramSimilarity("localname", query), + ) ) + .filter( + similarity__gt=0.5, + ) + .order_by("-similarity")[:10] ) - .filter( - similarity__gt=0.5, - ) - .order_by("-similarity")[:10] - ) # any relevent lists? - list_results = ( + data["list_results"] = ( privacy_filter( request.user, models.List.objects, @@ -68,11 +71,7 @@ class Search(View): .order_by("-similarity")[:10] ) - book_results = connector_manager.search(query, min_confidence=min_confidence) - data = { - "book_results": book_results, - "user_results": user_results, - "list_results": list_results, - "query": query or "", - } + data["book_results"] = connector_manager.search( + query, min_confidence=min_confidence + ) return TemplateResponse(request, "search_results.html", data) From 6d7b3e9ae76bacd98bb43c35a3cd7338fd0dafb8 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 29 Apr 2021 12:56:42 -0700 Subject: [PATCH 069/140] Show/hide individual search results --- bookwyrm/templates/search_results.html | 37 +++++++++++++++++++------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/bookwyrm/templates/search_results.html b/bookwyrm/templates/search_results.html index 9188c1f0a..f911bec7a 100644 --- a/bookwyrm/templates/search_results.html +++ b/bookwyrm/templates/search_results.html @@ -42,18 +42,35 @@ {% if result_set.results %}
{% if not result_set.connector.local %} -

- Results from {% if result_set.connector.name %}{{ result_set.connector.name }}{% else %}{{ result_set.connector.identifier }}{% endif %} -

+
+ +
+ {% trans "Show" as button_text %} + {% include 'snippets/toggle/open_button.html' with text=button_text small=True controls_text="more-results-panel" controls_uid=result_set.connector.identifier class="is-small" icon="arrow-down" pressed=forloop.first %} +
+
{% endif %} -
    - {% for result in result_set.results %} -
  • - {% include 'snippets/search_result_text.html' with result=result remote_result=True %} -
  • - {% endfor %} -
+
+
+
+ {% trans "Close" as button_text %} + {% include 'snippets/toggle/toggle_button.html' with label=button_text class="delete" nonbutton=True controls_text="more-results-panel" controls_uid=result_set.connector.identifier pressed=forloop.first %} +
+
    + {% for result in result_set.results %} +
  • + {% include 'snippets/search_result_text.html' with result=result remote_result=True %} +
  • + {% endfor %} +
+
+
{% endif %} {% endfor %} From 15790abc703619858ad019fe4ac288975ff61f8d Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 29 Apr 2021 13:03:56 -0700 Subject: [PATCH 070/140] Don't show broken image previews when cover is absent --- bookwyrm/connectors/bookwyrm_connector.py | 2 +- bookwyrm/connectors/self_connector.py | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/bookwyrm/connectors/bookwyrm_connector.py b/bookwyrm/connectors/bookwyrm_connector.py index 6b1d2f8ca..10a633b2d 100644 --- a/bookwyrm/connectors/bookwyrm_connector.py +++ b/bookwyrm/connectors/bookwyrm_connector.py @@ -6,7 +6,7 @@ from .abstract_connector import AbstractMinimalConnector, SearchResult class Connector(AbstractMinimalConnector): """this is basically just for search""" - def get_or_create_book(self, remote_id, work=None): + def get_or_create_book(self, remote_id): return activitypub.resolve_remote_id(remote_id, model=models.Edition) def parse_search_data(self, data): diff --git a/bookwyrm/connectors/self_connector.py b/bookwyrm/connectors/self_connector.py index 6b1b349fe..a8f858345 100644 --- a/bookwyrm/connectors/self_connector.py +++ b/bookwyrm/connectors/self_connector.py @@ -69,6 +69,10 @@ class Connector(AbstractConnector): return search_results def format_search_result(self, search_result): + cover = None + if search_result.cover: + cover = "%s%s" % (self.covers_url, search_result.cover) + return SearchResult( title=search_result.title, key=search_result.remote_id, @@ -77,7 +81,7 @@ class Connector(AbstractConnector): if search_result.published_date else None, connector=self, - cover="%s%s" % (self.covers_url, search_result.cover), + cover=cover, confidence=search_result.rank if hasattr(search_result, "rank") else 1, ) From f4ebecfe75f598fa94be4d28f5048399e26e5708 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 29 Apr 2021 13:11:37 -0700 Subject: [PATCH 071/140] Add background to search result boxes --- bookwyrm/templates/search_results.html | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/bookwyrm/templates/search_results.html b/bookwyrm/templates/search_results.html index f911bec7a..909b0a253 100644 --- a/bookwyrm/templates/search_results.html +++ b/bookwyrm/templates/search_results.html @@ -29,18 +29,23 @@ {% if request.user.is_authenticated %} {% if book_results|slice:":1" and local_results.results %}
-

+

{% trans "Didn't find what you were looking for?" %} -

+

{% trans "Show results from other catalogues" as button_text %} {% include 'snippets/toggle/open_button.html' with text=button_text small=True controls_text="more-results" %} + + {% if local_results.results %} + {% trans "Hide results from other catalogues" as button_text %} + {% include 'snippets/toggle/close_button.html' with text=button_text small=True controls_text="more-results" %} + {% endif %}
{% endif %}
{% for result_set in book_results|slice:"1:" %} {% if result_set.results %} -
+
{% if not result_set.connector.local %}
@@ -56,7 +61,7 @@
{% endif %} -
+
{% trans "Close" as button_text %} @@ -74,11 +79,6 @@
{% endif %} {% endfor %} - - {% if local_results.results %} - {% trans "Hide results from other catalogues" as button_text %} - {% include 'snippets/toggle/close_button.html' with text=button_text small=True controls_text="more-results" %} - {% endif %}
From 6f38ab167e6a8fa53358521352c4929c09c07811 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 29 Apr 2021 13:21:35 -0700 Subject: [PATCH 072/140] Show clarifying text for empty search when logged out --- bookwyrm/templates/search_results.html | 11 ++++++++--- bookwyrm/urls.py | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/bookwyrm/templates/search_results.html b/bookwyrm/templates/search_results.html index 909b0a253..337e88f87 100644 --- a/bookwyrm/templates/search_results.html +++ b/bookwyrm/templates/search_results.html @@ -14,7 +14,12 @@

{% trans "Matching Books" %}

{% if not local_results.results %} -

{% blocktrans %}No books found for "{{ query }}"{% endblocktrans %}

+

{% blocktrans %}No books found for "{{ query }}"{% endblocktrans %}

+ {% if not user.is_authenticated %} +

+ {% trans "Log in to import or add books." %} +

+ {% endif %} {% else %}
    {% for result in local_results.results %} @@ -88,7 +93,7 @@
{% if request.user.is_authenticated %} -
+

{% trans "Matching Users" %}

{% if not user_results %}

{% blocktrans %}No users found for "{{ query }}"{% endblocktrans %}

@@ -106,7 +111,7 @@
{% endif %} -
+

{% trans "Lists" %}

{% if not list_results %}

{% blocktrans %}No lists found for "{{ query }}"{% endblocktrans %}

diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index 53ceeaa83..24c80b046 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -43,7 +43,7 @@ urlpatterns = [ re_path("^api/updates/notifications/?$", views.get_notification_count), re_path("^api/updates/stream/(?P[a-z]+)/?$", views.get_unread_status_count), # authentication - re_path(r"^login/?$", views.Login.as_view()), + re_path(r"^login/?$", views.Login.as_view(), name="login"), re_path(r"^register/?$", views.Register.as_view()), re_path(r"^logout/?$", views.Logout.as_view()), re_path(r"^password-reset/?$", views.PasswordResetRequest.as_view()), From 533cba3ce0c000001911164106362b3621a25989 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 29 Apr 2021 13:25:44 -0700 Subject: [PATCH 073/140] Updates locales --- locale/de_DE/LC_MESSAGES/django.po | 27 +++++++++++++++++++-------- locale/en_US/LC_MESSAGES/django.po | 25 +++++++++++++++++-------- locale/es/LC_MESSAGES/django.po | 27 +++++++++++++++++++-------- locale/fr_FR/LC_MESSAGES/django.po | 27 +++++++++++++++++++-------- locale/zh_Hans/LC_MESSAGES/django.po | 27 +++++++++++++++++++-------- 5 files changed, 93 insertions(+), 40 deletions(-) diff --git a/locale/de_DE/LC_MESSAGES/django.po b/locale/de_DE/LC_MESSAGES/django.po index bbdd13275..d7ad8724e 100644 --- a/locale/de_DE/LC_MESSAGES/django.po +++ b/locale/de_DE/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-29 11:36-0700\n" +"POT-Creation-Date: 2021-04-29 13:24-0700\n" "PO-Revision-Date: 2021-03-02 17:19-0800\n" "Last-Translator: Mouse Reeve \n" "Language-Team: English \n" @@ -282,7 +282,7 @@ msgstr "Orte" #: bookwyrm/templates/book/book.html:220 bookwyrm/templates/layout.html:65 #: bookwyrm/templates/lists/lists.html:5 bookwyrm/templates/lists/lists.html:12 -#: bookwyrm/templates/search_results.html:91 +#: bookwyrm/templates/search_results.html:115 #: bookwyrm/templates/user/user_layout.html:62 msgid "Lists" msgstr "Listen" @@ -581,6 +581,7 @@ msgstr "Veröffentlicht von %(publisher)s." #: bookwyrm/templates/feed/feed_layout.html:70 #: bookwyrm/templates/get_started/layout.html:19 #: bookwyrm/templates/get_started/layout.html:52 +#: bookwyrm/templates/search_results.html:72 msgid "Close" msgstr "Schließen" @@ -1129,7 +1130,7 @@ msgid "Search for a user" msgstr "Suche nach Buch oder Benutzer*in" #: bookwyrm/templates/get_started/users.html:13 -#: bookwyrm/templates/search_results.html:76 +#: bookwyrm/templates/search_results.html:99 #, python-format msgid "No users found for \"%(query)s\"" msgstr "Keine Nutzer*innen für \"%(query)s\" gefunden" @@ -1908,23 +1909,33 @@ msgstr "Profil" msgid "Relationships" msgstr "Beziehungen" -#: bookwyrm/templates/search_results.html:33 +#: bookwyrm/templates/search_results.html:20 +msgid "Log in to import or add books." +msgstr "" + +#: bookwyrm/templates/search_results.html:38 msgid "Didn't find what you were looking for?" msgstr "Nicht gefunden, wonach du gesucht hast?" -#: bookwyrm/templates/search_results.html:35 +#: bookwyrm/templates/search_results.html:40 msgid "Show results from other catalogues" msgstr "Ergebnisse aus anderen Katalogen zeigen" -#: bookwyrm/templates/search_results.html:62 +#: bookwyrm/templates/search_results.html:44 msgid "Hide results from other catalogues" msgstr "Ergebnisse aus anderen Katalogen ausblenden" -#: bookwyrm/templates/search_results.html:74 +#: bookwyrm/templates/search_results.html:63 +#, fuzzy +#| msgid "Show more" +msgid "Show" +msgstr "Mehr anzeigen" + +#: bookwyrm/templates/search_results.html:97 msgid "Matching Users" msgstr "Passende Nutzer*innen" -#: bookwyrm/templates/search_results.html:93 +#: bookwyrm/templates/search_results.html:117 #, python-format msgid "No lists found for \"%(query)s\"" msgstr "Keine Liste für \"%(query)s\" gefunden" diff --git a/locale/en_US/LC_MESSAGES/django.po b/locale/en_US/LC_MESSAGES/django.po index 3637bb770..c3df47ae1 100644 --- a/locale/en_US/LC_MESSAGES/django.po +++ b/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-29 11:36-0700\n" +"POT-Creation-Date: 2021-04-29 13:24-0700\n" "PO-Revision-Date: 2021-02-28 17:19-0800\n" "Last-Translator: Mouse Reeve \n" "Language-Team: English \n" @@ -261,7 +261,7 @@ msgstr "" #: bookwyrm/templates/book/book.html:220 bookwyrm/templates/layout.html:65 #: bookwyrm/templates/lists/lists.html:5 bookwyrm/templates/lists/lists.html:12 -#: bookwyrm/templates/search_results.html:91 +#: bookwyrm/templates/search_results.html:115 #: bookwyrm/templates/user/user_layout.html:62 msgid "Lists" msgstr "" @@ -535,6 +535,7 @@ msgstr "" #: bookwyrm/templates/feed/feed_layout.html:70 #: bookwyrm/templates/get_started/layout.html:19 #: bookwyrm/templates/get_started/layout.html:52 +#: bookwyrm/templates/search_results.html:72 msgid "Close" msgstr "" @@ -1032,7 +1033,7 @@ msgid "Search for a user" msgstr "" #: bookwyrm/templates/get_started/users.html:13 -#: bookwyrm/templates/search_results.html:76 +#: bookwyrm/templates/search_results.html:99 #, python-format msgid "No users found for \"%(query)s\"" msgstr "" @@ -1739,23 +1740,31 @@ msgstr "" msgid "Relationships" msgstr "" -#: bookwyrm/templates/search_results.html:33 +#: bookwyrm/templates/search_results.html:20 +msgid "Log in to import or add books." +msgstr "" + +#: bookwyrm/templates/search_results.html:38 msgid "Didn't find what you were looking for?" msgstr "" -#: bookwyrm/templates/search_results.html:35 +#: bookwyrm/templates/search_results.html:40 msgid "Show results from other catalogues" msgstr "" -#: bookwyrm/templates/search_results.html:62 +#: bookwyrm/templates/search_results.html:44 msgid "Hide results from other catalogues" msgstr "" -#: bookwyrm/templates/search_results.html:74 +#: bookwyrm/templates/search_results.html:63 +msgid "Show" +msgstr "" + +#: bookwyrm/templates/search_results.html:97 msgid "Matching Users" msgstr "" -#: bookwyrm/templates/search_results.html:93 +#: bookwyrm/templates/search_results.html:117 #, python-format msgid "No lists found for \"%(query)s\"" msgstr "" diff --git a/locale/es/LC_MESSAGES/django.po b/locale/es/LC_MESSAGES/django.po index 8385f7f66..dab4c486f 100644 --- a/locale/es/LC_MESSAGES/django.po +++ b/locale/es/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-29 11:36-0700\n" +"POT-Creation-Date: 2021-04-29 13:24-0700\n" "PO-Revision-Date: 2021-03-19 11:49+0800\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -266,7 +266,7 @@ msgstr "Lugares" #: bookwyrm/templates/book/book.html:220 bookwyrm/templates/layout.html:65 #: bookwyrm/templates/lists/lists.html:5 bookwyrm/templates/lists/lists.html:12 -#: bookwyrm/templates/search_results.html:91 +#: bookwyrm/templates/search_results.html:115 #: bookwyrm/templates/user/user_layout.html:62 msgid "Lists" msgstr "Listas" @@ -548,6 +548,7 @@ msgstr "Publicado por %(publisher)s." #: bookwyrm/templates/feed/feed_layout.html:70 #: bookwyrm/templates/get_started/layout.html:19 #: bookwyrm/templates/get_started/layout.html:52 +#: bookwyrm/templates/search_results.html:72 msgid "Close" msgstr "Cerrar" @@ -1060,7 +1061,7 @@ msgid "Search for a user" msgstr "Buscar un usuario" #: bookwyrm/templates/get_started/users.html:13 -#: bookwyrm/templates/search_results.html:76 +#: bookwyrm/templates/search_results.html:99 #, python-format msgid "No users found for \"%(query)s\"" msgstr "No se encontró ningún usuario correspondiente a \"%(query)s\"" @@ -1811,23 +1812,33 @@ msgstr "Perfil" msgid "Relationships" msgstr "Relaciones" -#: bookwyrm/templates/search_results.html:33 +#: bookwyrm/templates/search_results.html:20 +msgid "Log in to import or add books." +msgstr "" + +#: bookwyrm/templates/search_results.html:38 msgid "Didn't find what you were looking for?" msgstr "¿No encontraste lo que buscabas?" -#: bookwyrm/templates/search_results.html:35 +#: bookwyrm/templates/search_results.html:40 msgid "Show results from other catalogues" msgstr "Mostrar resultados de otros catálogos" -#: bookwyrm/templates/search_results.html:62 +#: bookwyrm/templates/search_results.html:44 msgid "Hide results from other catalogues" msgstr "Ocultar resultados de otros catálogos" -#: bookwyrm/templates/search_results.html:74 +#: bookwyrm/templates/search_results.html:63 +#, fuzzy +#| msgid "Show more" +msgid "Show" +msgstr "Mostrar más" + +#: bookwyrm/templates/search_results.html:97 msgid "Matching Users" msgstr "Usuarios correspondientes" -#: bookwyrm/templates/search_results.html:93 +#: bookwyrm/templates/search_results.html:117 #, python-format msgid "No lists found for \"%(query)s\"" msgstr "No se encontró ningúna lista correspondiente a \"%(query)s\"" diff --git a/locale/fr_FR/LC_MESSAGES/django.po b/locale/fr_FR/LC_MESSAGES/django.po index ee7a55344..01963e467 100644 --- a/locale/fr_FR/LC_MESSAGES/django.po +++ b/locale/fr_FR/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-29 11:36-0700\n" +"POT-Creation-Date: 2021-04-29 13:24-0700\n" "PO-Revision-Date: 2021-04-05 12:44+0100\n" "Last-Translator: Fabien Basmaison \n" "Language-Team: Mouse Reeve \n" @@ -272,7 +272,7 @@ msgstr "Lieux" #: bookwyrm/templates/book/book.html:220 bookwyrm/templates/layout.html:65 #: bookwyrm/templates/lists/lists.html:5 bookwyrm/templates/lists/lists.html:12 -#: bookwyrm/templates/search_results.html:91 +#: bookwyrm/templates/search_results.html:115 #: bookwyrm/templates/user/user_layout.html:62 msgid "Lists" msgstr "Listes" @@ -554,6 +554,7 @@ msgstr "Publié par %(publisher)s." #: bookwyrm/templates/feed/feed_layout.html:70 #: bookwyrm/templates/get_started/layout.html:19 #: bookwyrm/templates/get_started/layout.html:52 +#: bookwyrm/templates/search_results.html:72 msgid "Close" msgstr "Fermer" @@ -1072,7 +1073,7 @@ msgid "Search for a user" msgstr "Chercher un compte" #: bookwyrm/templates/get_started/users.html:13 -#: bookwyrm/templates/search_results.html:76 +#: bookwyrm/templates/search_results.html:99 #, python-format msgid "No users found for \"%(query)s\"" msgstr "Aucun compte trouvé pour « %(query)s »" @@ -1836,23 +1837,33 @@ msgstr "Profil" msgid "Relationships" msgstr "Relations" -#: bookwyrm/templates/search_results.html:33 +#: bookwyrm/templates/search_results.html:20 +msgid "Log in to import or add books." +msgstr "" + +#: bookwyrm/templates/search_results.html:38 msgid "Didn't find what you were looking for?" msgstr "Vous n’avez pas trouvé ce que vous cherchiez ?" -#: bookwyrm/templates/search_results.html:35 +#: bookwyrm/templates/search_results.html:40 msgid "Show results from other catalogues" msgstr "Montrer les résultats d’autres catalogues" -#: bookwyrm/templates/search_results.html:62 +#: bookwyrm/templates/search_results.html:44 msgid "Hide results from other catalogues" msgstr "Masquer les résultats d’autres catalogues" -#: bookwyrm/templates/search_results.html:74 +#: bookwyrm/templates/search_results.html:63 +#, fuzzy +#| msgid "Show more" +msgid "Show" +msgstr "Déplier" + +#: bookwyrm/templates/search_results.html:97 msgid "Matching Users" msgstr "Comptes correspondants" -#: bookwyrm/templates/search_results.html:93 +#: bookwyrm/templates/search_results.html:117 #, python-format msgid "No lists found for \"%(query)s\"" msgstr "Aucune liste trouvée pour « %(query)s »" diff --git a/locale/zh_Hans/LC_MESSAGES/django.po b/locale/zh_Hans/LC_MESSAGES/django.po index af3bc59bd..783fc70ab 100644 --- a/locale/zh_Hans/LC_MESSAGES/django.po +++ b/locale/zh_Hans/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-29 11:36-0700\n" +"POT-Creation-Date: 2021-04-29 13:24-0700\n" "PO-Revision-Date: 2021-03-20 00:56+0000\n" "Last-Translator: Kana \n" "Language-Team: Mouse Reeve \n" @@ -270,7 +270,7 @@ msgstr "地点" #: bookwyrm/templates/book/book.html:220 bookwyrm/templates/layout.html:65 #: bookwyrm/templates/lists/lists.html:5 bookwyrm/templates/lists/lists.html:12 -#: bookwyrm/templates/search_results.html:91 +#: bookwyrm/templates/search_results.html:115 #: bookwyrm/templates/user/user_layout.html:62 msgid "Lists" msgstr "列表" @@ -552,6 +552,7 @@ msgstr "由 %(publisher)s 出版。" #: bookwyrm/templates/feed/feed_layout.html:70 #: bookwyrm/templates/get_started/layout.html:19 #: bookwyrm/templates/get_started/layout.html:52 +#: bookwyrm/templates/search_results.html:72 msgid "Close" msgstr "关闭" @@ -1052,7 +1053,7 @@ msgid "Search for a user" msgstr "搜索用户" #: bookwyrm/templates/get_started/users.html:13 -#: bookwyrm/templates/search_results.html:76 +#: bookwyrm/templates/search_results.html:99 #, python-format msgid "No users found for \"%(query)s\"" msgstr "没有找到 \"%(query)s\" 的用户" @@ -1801,23 +1802,33 @@ msgstr "个人资料" msgid "Relationships" msgstr "关系" -#: bookwyrm/templates/search_results.html:33 +#: bookwyrm/templates/search_results.html:20 +msgid "Log in to import or add books." +msgstr "" + +#: bookwyrm/templates/search_results.html:38 msgid "Didn't find what you were looking for?" msgstr "没有找到你想找的?" -#: bookwyrm/templates/search_results.html:35 +#: bookwyrm/templates/search_results.html:40 msgid "Show results from other catalogues" msgstr "显示其它类别的结果" -#: bookwyrm/templates/search_results.html:62 +#: bookwyrm/templates/search_results.html:44 msgid "Hide results from other catalogues" msgstr "隐藏其它类别的结果" -#: bookwyrm/templates/search_results.html:74 +#: bookwyrm/templates/search_results.html:63 +#, fuzzy +#| msgid "Show more" +msgid "Show" +msgstr "显示更多" + +#: bookwyrm/templates/search_results.html:97 msgid "Matching Users" msgstr "匹配的用户" -#: bookwyrm/templates/search_results.html:93 +#: bookwyrm/templates/search_results.html:117 #, python-format msgid "No lists found for \"%(query)s\"" msgstr "没有找到 \"%(query)s\" 的列表" From 3feba60665a92a2fe71032a721a8d6279f761e02 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 29 Apr 2021 13:54:17 -0700 Subject: [PATCH 074/140] Fixes test --- bookwyrm/tests/views/test_helpers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/tests/views/test_helpers.py b/bookwyrm/tests/views/test_helpers.py index 6a435ff39..0dddd2a15 100644 --- a/bookwyrm/tests/views/test_helpers.py +++ b/bookwyrm/tests/views/test_helpers.py @@ -219,7 +219,7 @@ class ViewsHelpers(TestCase): with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): # 1 shared follow self.local_user.following.add(user_2) - user_1.following.add(user_2) + user_1.followers.add(user_2) # 1 shared book models.ShelfBook.objects.create( From daf65e230de424ae8ae2bcea437570fd54cf3c7a Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 29 Apr 2021 14:43:14 -0700 Subject: [PATCH 075/140] Test for failing rate federation --- .../tests/views/inbox/test_inbox_create.py | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/bookwyrm/tests/views/inbox/test_inbox_create.py b/bookwyrm/tests/views/inbox/test_inbox_create.py index e7a120244..b59a975f5 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_create.py +++ b/bookwyrm/tests/views/inbox/test_inbox_create.py @@ -127,6 +127,43 @@ class InboxCreate(TestCase): self.assertTrue(models.Notification.objects.filter(user=self.local_user)) self.assertEqual(models.Notification.objects.get().notification_type, "REPLY") + def test_create_rating(self): + """a remote rating activity""" + models.Edition.objects.create( + title="Test Book", origin_id="https://example.com/book/1" + ) + activity = self.create_json + activity["object"] = { + "id": "https://example.com/user/mouse/reviewrating/12", + "type": "Rating", + "published": "2021-04-29T21:27:30.014235+00:00", + "attributedTo": "https://example.com/user/mouse", + "to": ["https://www.w3.org/ns/activitystreams#Public"], + "cc": ["https://example.com/user/mouse/followers"], + "replies": { + "id": "https://example.com/user/mouse/reviewrating/12/replies", + "type": "OrderedCollection", + "totalItems": 0, + "first": "https://example.com/user/mouse/reviewrating/12/replies?page=1", + "last": "https://example.com/user/mouse/reviewrating/12/replies?page=1", + "@context": "https://www.w3.org/ns/activitystreams", + }, + "inReplyTo": "", + "summary": "", + "tag": [], + "attachment": [], + "sensitive": False, + "inReplyToBook": "https://example.com/book/1", + "rating": 3, + "@context": "https://www.w3.org/ns/activitystreams", + } + with patch("bookwyrm.activitystreams.ActivityStream.add_status") as redis_mock: + views.inbox.activity_task(activity) + self.assertTrue(redis_mock.called) + rating = models.Status.objects.select_subclasses().first() + self.assertEqual(rating.book, self.book) + self.assertEqual(rating.rating, 3.0) + def test_create_list(self): """a new list""" activity = self.create_json From d61ba2e474a8e58f2683387d797b77895f6e0ca2 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 29 Apr 2021 15:16:51 -0700 Subject: [PATCH 076/140] Fixes review rating serialization --- bookwyrm/activitypub/note.py | 1 + bookwyrm/tests/views/inbox/test_inbox_create.py | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/bookwyrm/activitypub/note.py b/bookwyrm/activitypub/note.py index b501c3d61..ea2e92b6e 100644 --- a/bookwyrm/activitypub/note.py +++ b/bookwyrm/activitypub/note.py @@ -83,4 +83,5 @@ class Rating(Comment): rating: int content: str = None + name: str = None # not used, but the model inherits from Review type: str = "Rating" diff --git a/bookwyrm/tests/views/inbox/test_inbox_create.py b/bookwyrm/tests/views/inbox/test_inbox_create.py index b59a975f5..958dfee8c 100644 --- a/bookwyrm/tests/views/inbox/test_inbox_create.py +++ b/bookwyrm/tests/views/inbox/test_inbox_create.py @@ -129,8 +129,8 @@ class InboxCreate(TestCase): def test_create_rating(self): """a remote rating activity""" - models.Edition.objects.create( - title="Test Book", origin_id="https://example.com/book/1" + book = models.Edition.objects.create( + title="Test Book", remote_id="https://example.com/book/1" ) activity = self.create_json activity["object"] = { @@ -160,8 +160,8 @@ class InboxCreate(TestCase): with patch("bookwyrm.activitystreams.ActivityStream.add_status") as redis_mock: views.inbox.activity_task(activity) self.assertTrue(redis_mock.called) - rating = models.Status.objects.select_subclasses().first() - self.assertEqual(rating.book, self.book) + rating = models.ReviewRating.objects.first() + self.assertEqual(rating.book, book) self.assertEqual(rating.rating, 3.0) def test_create_list(self): From aa3cdee73119530cdba51beb052f260369f52484 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 06:43:43 -0700 Subject: [PATCH 077/140] Fixes invalid url breaking change password flow --- bookwyrm/templates/preferences/change_password.html | 2 +- bookwyrm/urls.py | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/bookwyrm/templates/preferences/change_password.html b/bookwyrm/templates/preferences/change_password.html index ab8be7170..9f5b7e8b9 100644 --- a/bookwyrm/templates/preferences/change_password.html +++ b/bookwyrm/templates/preferences/change_password.html @@ -8,7 +8,7 @@ {% endblock %} {% block panel %} - + {% csrf_token %}
diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index 24c80b046..99e51ff3c 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -224,7 +224,11 @@ urlpatterns = [ re_path(r"^hide-goal/?$", views.hide_goal, name="hide-goal"), # preferences re_path(r"^preferences/profile/?$", views.EditUser.as_view(), name="prefs-profile"), - re_path(r"^preferences/password/?$", views.ChangePassword.as_view()), + re_path( + r"^preferences/password/?$", + views.ChangePassword.as_view(), + name="prefs-password", + ), re_path(r"^preferences/block/?$", views.Block.as_view()), re_path(r"^block/(?P\d+)/?$", views.Block.as_view()), re_path(r"^unblock/(?P\d+)/?$", views.unblock), From 454dd25681af9de9e08ddc021eb29c25ec1ab2f8 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 07:49:34 -0700 Subject: [PATCH 078/140] Only make notification count red for mentions --- bookwyrm/models/user.py | 13 +++++++++++++ bookwyrm/static/js/bookwyrm.js | 2 ++ bookwyrm/templates/layout.html | 7 +++++-- bookwyrm/views/updates.py | 3 ++- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py index 3efbd6ac8..257264681 100644 --- a/bookwyrm/models/user.py +++ b/bookwyrm/models/user.py @@ -150,6 +150,19 @@ class User(OrderedCollectionPageMixin, AbstractUser): """for consistent naming""" return not self.is_active + @property + def unread_notification_count(self): + """ count of notifications, for the templates """ + return self.notification_set.filter(read=False).count() + + @property + def has_unread_mentions(self): + """ whether any of the unread notifications are conversations """ + return self.notification_set.filter( + read=False, + notification_type__in=["REPLY", "MENTION", "TAG"], + ).exists() + activity_serializer = activitypub.Person @classmethod diff --git a/bookwyrm/static/js/bookwyrm.js b/bookwyrm/static/js/bookwyrm.js index 485daf15b..3659a20e4 100644 --- a/bookwyrm/static/js/bookwyrm.js +++ b/bookwyrm/static/js/bookwyrm.js @@ -97,10 +97,12 @@ let BookWyrm = new class { updateCountElement(counter, data) { const currentCount = counter.innerText; const count = data.count; + const hasMentions = data.has_mentions; if (count != currentCount) { this.addRemoveClass(counter.closest('[data-poll-wrapper]'), 'is-hidden', count < 1); counter.innerText = count; + this.addRemoveClass(counter.closest('[data-poll-wrapper]'), 'is-danger', hasMentions); } } diff --git a/bookwyrm/templates/layout.html b/bookwyrm/templates/layout.html index 84482cdfc..770666e80 100644 --- a/bookwyrm/templates/layout.html +++ b/bookwyrm/templates/layout.html @@ -135,8 +135,11 @@ {% trans "Notifications" %} - - {{ request.user | notification_count }} + + {{ request.user.unread_notification_count }}
diff --git a/bookwyrm/views/updates.py b/bookwyrm/views/updates.py index 349022724..726145626 100644 --- a/bookwyrm/views/updates.py +++ b/bookwyrm/views/updates.py @@ -10,7 +10,8 @@ def get_notification_count(request): """any notifications waiting?""" return JsonResponse( { - "count": request.user.notification_set.filter(read=False).count(), + "count": request.user.unread_notification_count, + "has_mentions": request.user.has_unread_mentions, } ) From 2867d703ccc32dada6f9e85c815e3c04354a9788 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 07:57:38 -0700 Subject: [PATCH 079/140] Fixes python formatting --- bookwyrm/models/user.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py index 257264681..2c5bef4ae 100644 --- a/bookwyrm/models/user.py +++ b/bookwyrm/models/user.py @@ -152,12 +152,12 @@ class User(OrderedCollectionPageMixin, AbstractUser): @property def unread_notification_count(self): - """ count of notifications, for the templates """ + """count of notifications, for the templates""" return self.notification_set.filter(read=False).count() @property def has_unread_mentions(self): - """ whether any of the unread notifications are conversations """ + """whether any of the unread notifications are conversations""" return self.notification_set.filter( read=False, notification_type__in=["REPLY", "MENTION", "TAG"], From d2355fef96e8ea517815a2163239fb70236164d4 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 08:23:02 -0700 Subject: [PATCH 080/140] Consistent display on followers/following pages --- bookwyrm/templates/user/followers.html | 2 +- bookwyrm/templates/user/following.html | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bookwyrm/templates/user/followers.html b/bookwyrm/templates/user/followers.html index b294db909..2a7ccd1e9 100644 --- a/bookwyrm/templates/user/followers.html +++ b/bookwyrm/templates/user/followers.html @@ -25,7 +25,7 @@
{% endfor %} - {% if not followers.count %} + {% if not followers %}
{% blocktrans with username=user.display_name %}{{ username }} has no followers{% endblocktrans %}
{% endif %}
diff --git a/bookwyrm/templates/user/following.html b/bookwyrm/templates/user/following.html index 38c01ad27..b41d51264 100644 --- a/bookwyrm/templates/user/following.html +++ b/bookwyrm/templates/user/following.html @@ -20,12 +20,12 @@ ({{ follower.username }}) -
+
{% include 'snippets/follow_button.html' with user=follower %}
{% endfor %} - {% if not following.count %} + {% if not following %}
{% blocktrans with username=user|username %}{{ username }} isn't following any users{% endblocktrans %}
{% endif %} From 862ef835366bb716a47f8716c9713ed301e51b36 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 08:40:47 -0700 Subject: [PATCH 081/140] Move user templates into more subdirectories --- bookwyrm/templates/goal.html | 2 +- .../templates/user/{user_layout.html => layout.html} | 0 .../templates/user/{ => relationships}/followers.html | 2 +- .../templates/user/{ => relationships}/following.html | 2 +- bookwyrm/templates/user/{ => shelf}/books_header.html | 0 .../templates/user/{ => shelf}/create_shelf_form.html | 0 .../templates/user/{ => shelf}/edit_shelf_form.html | 0 bookwyrm/templates/user/{ => shelf}/shelf.html | 10 +++++----- bookwyrm/templates/user/user.html | 8 ++++---- bookwyrm/views/shelf.py | 2 +- bookwyrm/views/user.py | 4 ++-- 11 files changed, 15 insertions(+), 15 deletions(-) rename bookwyrm/templates/user/{user_layout.html => layout.html} (100%) rename bookwyrm/templates/user/{ => relationships}/followers.html (96%) rename bookwyrm/templates/user/{ => relationships}/following.html (96%) rename bookwyrm/templates/user/{ => shelf}/books_header.html (100%) rename bookwyrm/templates/user/{ => shelf}/create_shelf_form.html (100%) rename bookwyrm/templates/user/{ => shelf}/edit_shelf_form.html (100%) rename bookwyrm/templates/user/{ => shelf}/shelf.html (94%) diff --git a/bookwyrm/templates/goal.html b/bookwyrm/templates/goal.html index 32b5062dc..22aba08e4 100644 --- a/bookwyrm/templates/goal.html +++ b/bookwyrm/templates/goal.html @@ -1,4 +1,4 @@ -{% extends 'user/user_layout.html' %} +{% extends 'user/layout.html' %} {% load i18n %} {% block header %} diff --git a/bookwyrm/templates/user/user_layout.html b/bookwyrm/templates/user/layout.html similarity index 100% rename from bookwyrm/templates/user/user_layout.html rename to bookwyrm/templates/user/layout.html diff --git a/bookwyrm/templates/user/followers.html b/bookwyrm/templates/user/relationships/followers.html similarity index 96% rename from bookwyrm/templates/user/followers.html rename to bookwyrm/templates/user/relationships/followers.html index 2a7ccd1e9..c69416dce 100644 --- a/bookwyrm/templates/user/followers.html +++ b/bookwyrm/templates/user/relationships/followers.html @@ -1,4 +1,4 @@ -{% extends 'user/user_layout.html' %} +{% extends 'user/layout.html' %} {% load i18n %} {% load bookwyrm_tags %} diff --git a/bookwyrm/templates/user/following.html b/bookwyrm/templates/user/relationships/following.html similarity index 96% rename from bookwyrm/templates/user/following.html rename to bookwyrm/templates/user/relationships/following.html index b41d51264..a1feeb76a 100644 --- a/bookwyrm/templates/user/following.html +++ b/bookwyrm/templates/user/relationships/following.html @@ -1,4 +1,4 @@ -{% extends 'user/user_layout.html' %} +{% extends 'user/layout.html' %} {% load i18n %} {% load bookwyrm_tags %} diff --git a/bookwyrm/templates/user/books_header.html b/bookwyrm/templates/user/shelf/books_header.html similarity index 100% rename from bookwyrm/templates/user/books_header.html rename to bookwyrm/templates/user/shelf/books_header.html diff --git a/bookwyrm/templates/user/create_shelf_form.html b/bookwyrm/templates/user/shelf/create_shelf_form.html similarity index 100% rename from bookwyrm/templates/user/create_shelf_form.html rename to bookwyrm/templates/user/shelf/create_shelf_form.html diff --git a/bookwyrm/templates/user/edit_shelf_form.html b/bookwyrm/templates/user/shelf/edit_shelf_form.html similarity index 100% rename from bookwyrm/templates/user/edit_shelf_form.html rename to bookwyrm/templates/user/shelf/edit_shelf_form.html diff --git a/bookwyrm/templates/user/shelf.html b/bookwyrm/templates/user/shelf/shelf.html similarity index 94% rename from bookwyrm/templates/user/shelf.html rename to bookwyrm/templates/user/shelf/shelf.html index 336162588..93f0c15f2 100644 --- a/bookwyrm/templates/user/shelf.html +++ b/bookwyrm/templates/user/shelf/shelf.html @@ -1,16 +1,16 @@ -{% extends 'user/user_layout.html' %} +{% extends 'user/layout.html' %} {% load bookwyrm_tags %} {% load humanize %} {% load i18n %} {% block title %} -{% include 'user/books_header.html' %} +{% include 'user/shelf/books_header.html' %} {% endblock %} {% block header %}

- {% include 'user/books_header.html' %} + {% include 'user/shelf/books_header.html' %}

{% endblock %} @@ -41,7 +41,7 @@
- {% include 'user/create_shelf_form.html' with controls_text='create-shelf-form' %} + {% include 'user/shelf/create_shelf_form.html' with controls_text='create-shelf-form' %}
@@ -62,7 +62,7 @@
- {% include 'user/edit_shelf_form.html' with controls_text="edit-shelf-form" %} + {% include 'user/shelf/edit_shelf_form.html' with controls_text="edit-shelf-form" %}
diff --git a/bookwyrm/templates/user/user.html b/bookwyrm/templates/user/user.html index a97d26ab8..fead8fcf6 100644 --- a/bookwyrm/templates/user/user.html +++ b/bookwyrm/templates/user/user.html @@ -1,4 +1,4 @@ -{% extends 'user/user_layout.html' %} +{% extends 'user/layout.html' %} {% load i18n %} {% load bookwyrm_tags %} @@ -11,7 +11,7 @@
{% if is_self %}
- + {% trans "Edit profile" %} @@ -25,7 +25,7 @@ {% if user.bookwyrm_user %}

- {% include 'user/books_header.html' %} + {% include 'user/shelf/books_header.html' %}

{% for shelf in shelves %} @@ -56,7 +56,7 @@ {% elif user == request.user %} {% endif %} diff --git a/bookwyrm/views/shelf.py b/bookwyrm/views/shelf.py index 9bcf0a4ac..ca05ec1ee 100644 --- a/bookwyrm/views/shelf.py +++ b/bookwyrm/views/shelf.py @@ -68,7 +68,7 @@ class Shelf(View): "books": paginated.get_page(request.GET.get("page")), } - return TemplateResponse(request, "user/shelf.html", data) + return TemplateResponse(request, "user/shelf/shelf.html", data) @method_decorator(login_required, name="dispatch") # pylint: disable=unused-argument diff --git a/bookwyrm/views/user.py b/bookwyrm/views/user.py index d394c1d73..af31fd47f 100644 --- a/bookwyrm/views/user.py +++ b/bookwyrm/views/user.py @@ -112,7 +112,7 @@ class Followers(View): "is_self": request.user.id == user.id, "followers": paginated.page(request.GET.get("page", 1)), } - return TemplateResponse(request, "user/followers.html", data) + return TemplateResponse(request, "user/relationships/followers.html", data) class Following(View): @@ -138,7 +138,7 @@ class Following(View): "is_self": request.user.id == user.id, "following": paginated.page(request.GET.get("page", 1)), } - return TemplateResponse(request, "user/following.html", data) + return TemplateResponse(request, "user/relationships/following.html", data) @method_decorator(login_required, name="dispatch") From e4cecf2874103890be40f376cb399e2e21e7036c Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 09:02:14 -0700 Subject: [PATCH 082/140] Coherent logic on which tabs show in the user page --- bookwyrm/templates/user/layout.html | 4 ++-- bookwyrm/templates/user/lists.html | 2 +- bookwyrm/templates/user/shelf/shelf.html | 4 +++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/bookwyrm/templates/user/layout.html b/bookwyrm/templates/user/layout.html index 0c3e94e3c..0f04f6288 100644 --- a/bookwyrm/templates/user/layout.html +++ b/bookwyrm/templates/user/layout.html @@ -41,8 +41,8 @@
{% endif %}
+{% block tabs %} {% with user|username as username %} -{% if 'user/'|add:username|add:'/books' not in request.path and 'user/'|add:username|add:'/shelf' not in request.path %} -{% endif %} {% endwith %} +{% endblock %} {% block panel %}{% endblock %} diff --git a/bookwyrm/templates/user/lists.html b/bookwyrm/templates/user/lists.html index b2fd9eefd..aa8ad7fb6 100644 --- a/bookwyrm/templates/user/lists.html +++ b/bookwyrm/templates/user/lists.html @@ -1,4 +1,4 @@ -{% extends 'user/user_layout.html' %} +{% extends 'user/layout.html' %} {% load i18n %} {% block header %} diff --git a/bookwyrm/templates/user/shelf/shelf.html b/bookwyrm/templates/user/shelf/shelf.html index 93f0c15f2..639ab502f 100644 --- a/bookwyrm/templates/user/shelf/shelf.html +++ b/bookwyrm/templates/user/shelf/shelf.html @@ -15,7 +15,7 @@ {% endblock %} -{% block panel %} +{% block tabs %}
@@ -39,7 +39,9 @@
{% endif %}
+{% endblock %} +{% block panel %}
{% include 'user/shelf/create_shelf_form.html' with controls_text='create-shelf-form' %}
From 418e656aea8d5faf1b84afe27337891324f22f0c Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 09:17:46 -0700 Subject: [PATCH 083/140] Uses layout for followers/following page --- bookwyrm/templates/user/layout.html | 6 +++- .../user/relationships/followers.html | 30 ++++--------------- .../user/relationships/following.html | 30 ++++--------------- .../templates/user/relationships/layout.html | 29 ++++++++++++++++++ bookwyrm/views/user.py | 6 ++-- 5 files changed, 47 insertions(+), 54 deletions(-) create mode 100644 bookwyrm/templates/user/relationships/layout.html diff --git a/bookwyrm/templates/user/layout.html b/bookwyrm/templates/user/layout.html index 0f04f6288..dcdf7ccfc 100644 --- a/bookwyrm/templates/user/layout.html +++ b/bookwyrm/templates/user/layout.html @@ -7,7 +7,11 @@ {% block content %}
- {% block header %}{% endblock %} + {% block header %} +

+ {% trans "User Profile" %} +

+ {% endblock %}
{# user bio #} diff --git a/bookwyrm/templates/user/relationships/followers.html b/bookwyrm/templates/user/relationships/followers.html index c69416dce..223f38c7b 100644 --- a/bookwyrm/templates/user/relationships/followers.html +++ b/bookwyrm/templates/user/relationships/followers.html @@ -1,34 +1,14 @@ -{% extends 'user/layout.html' %} +{% extends 'user/relationships/layout.html' %} {% load i18n %} -{% load bookwyrm_tags %} {% block header %}

- {% trans "User Profile" %} + {% trans "Followers" %}

{% endblock %} -{% block panel %} -
-

{% trans "Followers" %}

- {% for follower in followers %} -
- -
- {% include 'snippets/follow_button.html' with user=follower %} -
-
- {% endfor %} - {% if not followers %} -
{% blocktrans with username=user.display_name %}{{ username }} has no followers{% endblocktrans %}
- {% endif %} +{% block nullstate %} +
+ {% blocktrans with username=user.display_name %}{{ username }} has no followers{% endblocktrans %}
- -{% include 'snippets/pagination.html' with page=followers path=request.path %} {% endblock %} diff --git a/bookwyrm/templates/user/relationships/following.html b/bookwyrm/templates/user/relationships/following.html index a1feeb76a..5689bc613 100644 --- a/bookwyrm/templates/user/relationships/following.html +++ b/bookwyrm/templates/user/relationships/following.html @@ -1,34 +1,14 @@ -{% extends 'user/layout.html' %} +{% extends 'user/relationships/layout.html' %} {% load i18n %} -{% load bookwyrm_tags %} {% block header %}

- {% trans "User Profile" %} + {% trans "Following" %}

{% endblock %} -{% block panel %} -
-

{% trans "Following" %}

- {% for follower in user.following.all %} -
- -
- {% include 'snippets/follow_button.html' with user=follower %} -
-
- {% endfor %} - {% if not following %} -
{% blocktrans with username=user|username %}{{ username }} isn't following any users{% endblocktrans %}
- {% endif %} +{% block nullstate %} +
+ {% blocktrans with username=user.display_name %}{{ username }} isn't following any users{% endblocktrans %}
- -{% include 'snippets/pagination.html' with page=following path=request.path %} {% endblock %} diff --git a/bookwyrm/templates/user/relationships/layout.html b/bookwyrm/templates/user/relationships/layout.html new file mode 100644 index 000000000..ab38e6620 --- /dev/null +++ b/bookwyrm/templates/user/relationships/layout.html @@ -0,0 +1,29 @@ +{% extends 'user/layout.html' %} +{% load i18n %} +{% load bookwyrm_tags %} + +{% block panel %} +
+ {% for follow in follow_list %} +
+ +
+ {% include 'snippets/follow_button.html' with user=follow %} +
+
+ {% endfor %} + + {% if not follow_list %} + {% block nullstate %} + {% endblock %} + {% endif %} +
+ +{% include 'snippets/pagination.html' with page=follow_list path=request.path %} +{% endblock %} diff --git a/bookwyrm/views/user.py b/bookwyrm/views/user.py index af31fd47f..5584ce991 100644 --- a/bookwyrm/views/user.py +++ b/bookwyrm/views/user.py @@ -110,7 +110,7 @@ class Followers(View): data = { "user": user, "is_self": request.user.id == user.id, - "followers": paginated.page(request.GET.get("page", 1)), + "follow_list": paginated.page(request.GET.get("page", 1)), } return TemplateResponse(request, "user/relationships/followers.html", data) @@ -132,11 +132,11 @@ class Following(View): if is_api_request(request): return ActivitypubResponse(user.to_following_activity(**request.GET)) - paginated = Paginator(user.followers.all(), PAGE_LENGTH) + paginated = Paginator(user.following.all(), PAGE_LENGTH) data = { "user": user, "is_self": request.user.id == user.id, - "following": paginated.page(request.GET.get("page", 1)), + "follow_list": paginated.page(request.GET.get("page", 1)), } return TemplateResponse(request, "user/relationships/following.html", data) From b65d0d05c9f49c375f32f8252d33a091aac3f0aa Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 09:23:59 -0700 Subject: [PATCH 084/140] Tabs for relationship views --- bookwyrm/templates/user/layout.html | 1 + .../templates/user/relationships/layout.html | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/bookwyrm/templates/user/layout.html b/bookwyrm/templates/user/layout.html index dcdf7ccfc..661d80781 100644 --- a/bookwyrm/templates/user/layout.html +++ b/bookwyrm/templates/user/layout.html @@ -45,6 +45,7 @@
{% endif %}
+ {% block tabs %} {% with user|username as username %}
{% endwith %} {% endblock %} From b4ef800505de3305a428c8e455d9ce3be491d368 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 12:07:59 -0700 Subject: [PATCH 098/140] Hide start list item in readthrough if absent --- bookwyrm/templates/snippets/readthrough.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bookwyrm/templates/snippets/readthrough.html b/bookwyrm/templates/snippets/readthrough.html index cebdc2cd6..d5e79b864 100644 --- a/bookwyrm/templates/snippets/readthrough.html +++ b/bookwyrm/templates/snippets/readthrough.html @@ -48,7 +48,9 @@ {% endif %} {% endif %} + {% if readthrough.start_date %}
  • {{ readthrough.start_date | localtime | naturalday }}: {% trans "started" %}
  • + {% endif %}
    From 485d20696be089782b5c85f0e19c0d4b89d85ffd Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 12:50:35 -0700 Subject: [PATCH 099/140] Fixes loading inventaire data by language code --- bookwyrm/connectors/abstract_connector.py | 4 ++++ bookwyrm/connectors/inventaire.py | 7 ++++++- .../connectors/test_inventaire_connector.py | 17 ++++++++++++++++- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/bookwyrm/connectors/abstract_connector.py b/bookwyrm/connectors/abstract_connector.py index 767188232..db80677f3 100644 --- a/bookwyrm/connectors/abstract_connector.py +++ b/bookwyrm/connectors/abstract_connector.py @@ -217,6 +217,10 @@ def dict_from_mappings(data, mappings): the subclass""" result = {} for mapping in mappings: + # sometimes there are multiple mappings for one field, don't + # overwrite earlier writes in that case + if mapping.local_field in result and result[mapping.local_field]: + continue result[mapping.local_field] = mapping.get_value(data) return result diff --git a/bookwyrm/connectors/inventaire.py b/bookwyrm/connectors/inventaire.py index dc27f2c02..c13ef7f8a 100644 --- a/bookwyrm/connectors/inventaire.py +++ b/bookwyrm/connectors/inventaire.py @@ -21,6 +21,7 @@ class Connector(AbstractConnector): ] self.book_mappings = [ Mapping("title", remote_field="wdt:P1476", formatter=get_first), + Mapping("title", remote_field="labels", formatter=get_language_code), Mapping("subtitle", remote_field="wdt:P1680", formatter=get_first), Mapping("inventaireId", remote_field="uri"), Mapping( @@ -211,4 +212,8 @@ class Connector(AbstractConnector): def get_language_code(options, code="en"): """when there are a bunch of translation but we need a single field""" - return options.get(code) + result = options.get(code) + if result: + return result + values = list(options.values()) + return values[0] if values else None diff --git a/bookwyrm/tests/connectors/test_inventaire_connector.py b/bookwyrm/tests/connectors/test_inventaire_connector.py index 4058b0670..a32fa72be 100644 --- a/bookwyrm/tests/connectors/test_inventaire_connector.py +++ b/bookwyrm/tests/connectors/test_inventaire_connector.py @@ -5,7 +5,7 @@ from django.test import TestCase import responses from bookwyrm import models -from bookwyrm.connectors.inventaire import Connector +from bookwyrm.connectors.inventaire import Connector, get_language_code class Inventaire(TestCase): @@ -156,3 +156,18 @@ class Inventaire(TestCase): formatted.cover, "https://covers.inventaire.io/img/entities/12345", ) + + def test_get_language_code(self): + """ get english or whatever is in reach """ + options = { + "de": "bip", + "en": "hi", + "fr": "there", + } + self.assertEqual(get_language_code(options), "hi") + + options = { + "fr": "there", + } + self.assertEqual(get_language_code(options), "there") + self.assertIsNone(get_language_code({})) From 122e0cbd6d816cbb6f23c9d741a5d7d848b878a1 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 12:52:20 -0700 Subject: [PATCH 100/140] Python formatting --- bookwyrm/tests/connectors/test_inventaire_connector.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/tests/connectors/test_inventaire_connector.py b/bookwyrm/tests/connectors/test_inventaire_connector.py index a32fa72be..71e407e95 100644 --- a/bookwyrm/tests/connectors/test_inventaire_connector.py +++ b/bookwyrm/tests/connectors/test_inventaire_connector.py @@ -158,7 +158,7 @@ class Inventaire(TestCase): ) def test_get_language_code(self): - """ get english or whatever is in reach """ + """get english or whatever is in reach""" options = { "de": "bip", "en": "hi", From 9fea07039889c9962eb0e842dad375ebdcd78f3e Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 12:53:57 -0700 Subject: [PATCH 101/140] Update bookwyrm/management/commands/initdb.py Co-authored-by: Joachim --- bookwyrm/management/commands/initdb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/management/commands/initdb.py b/bookwyrm/management/commands/initdb.py index 2e88ce5d8..71ac511a0 100644 --- a/bookwyrm/management/commands/initdb.py +++ b/bookwyrm/management/commands/initdb.py @@ -15,7 +15,7 @@ def init_groups(): def init_permissions(): - """permissin types""" + """permission types""" permissions = [ { "codename": "edit_instance_settings", From 01f2d80cbd6a604bcb0a1b192ebc4c56c1b0e62e Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 13:21:19 -0700 Subject: [PATCH 102/140] Show book descriptions in list items --- bookwyrm/templates/lists/list.html | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/bookwyrm/templates/lists/list.html b/bookwyrm/templates/lists/list.html index 9243d3afb..2902f793f 100644 --- a/bookwyrm/templates/lists/list.html +++ b/bookwyrm/templates/lists/list.html @@ -44,8 +44,15 @@
    - {% include 'snippets/book_titleby.html' %} - {% include 'snippets/stars.html' with rating=item.book|rating:request.user %} +

    + {% include 'snippets/book_titleby.html' %} +

    +

    + {% include 'snippets/stars.html' with rating=item.book|rating:request.user %} +

    +

    + {{ book|book_description|to_markdown|default:""|safe|truncatewords_html:20 }} +

    {% include 'snippets/shelve_button/shelve_button.html' %}
    From c373a0b818dfea5ebe8a7aa1e9ce1c409c68bf3d Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 13:38:03 -0700 Subject: [PATCH 103/140] Highlight report notifications --- bookwyrm/models/user.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py index 2c5bef4ae..7c943bec9 100644 --- a/bookwyrm/models/user.py +++ b/bookwyrm/models/user.py @@ -160,7 +160,7 @@ class User(OrderedCollectionPageMixin, AbstractUser): """whether any of the unread notifications are conversations""" return self.notification_set.filter( read=False, - notification_type__in=["REPLY", "MENTION", "TAG"], + notification_type__in=["REPLY", "MENTION", "TAG", "REPORT"], ).exists() activity_serializer = activitypub.Person From 544e29fe76754bdaa1589bac7288cddc9d7b3d3c Mon Sep 17 00:00:00 2001 From: Fabien Basmaison Date: Fri, 30 Apr 2021 22:44:53 +0200 Subject: [PATCH 104/140] Fix lists layout for user. --- bookwyrm/templates/user/lists.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/templates/user/lists.html b/bookwyrm/templates/user/lists.html index b2fd9eefd..8fe149d58 100644 --- a/bookwyrm/templates/user/lists.html +++ b/bookwyrm/templates/user/lists.html @@ -23,7 +23,7 @@ {% block panel %} -
    +

    {% trans "Create list" %}

    From a2621bce1223292dbf0647c7c153e8ea578d5f5c Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 15:48:52 -0700 Subject: [PATCH 105/140] Fixes getting authors from work data --- bookwyrm/connectors/abstract_connector.py | 15 ++++++++------- bookwyrm/connectors/inventaire.py | 5 ++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/bookwyrm/connectors/abstract_connector.py b/bookwyrm/connectors/abstract_connector.py index db80677f3..18ccb942c 100644 --- a/bookwyrm/connectors/abstract_connector.py +++ b/bookwyrm/connectors/abstract_connector.py @@ -122,7 +122,6 @@ class AbstractConnector(AbstractMinimalConnector): # load the json data = self.get_book_data(remote_id) - mapped_data = dict_from_mappings(data, self.book_mappings) if self.is_work_data(data): try: edition_data = self.get_edition_from_work_data(data) @@ -130,24 +129,26 @@ class AbstractConnector(AbstractMinimalConnector): # hack: re-use the work data as the edition data # this is why remote ids aren't necessarily unique edition_data = data - work_data = mapped_data + work_data = data else: edition_data = data try: work_data = self.get_work_from_edition_data(data) - work_data = dict_from_mappings(work_data, self.book_mappings) - except (KeyError, ConnectorException): - work_data = mapped_data + except (KeyError, ConnectorException) as e: + logger.exception(e) + work_data = data if not work_data or not edition_data: raise ConnectorException("Unable to load book data: %s" % remote_id) with transaction.atomic(): # create activitypub object - work_activity = activitypub.Work(**work_data) + work_activity = activitypub.Work( + **dict_from_mappings(work_data, self.book_mappings) + ) # this will dedupe automatically work = work_activity.to_model(model=models.Work) - for author in self.get_authors_from_data(data): + for author in self.get_authors_from_data(work_data): work.authors.add(author) edition = self.create_edition_from_data(work, edition_data) diff --git a/bookwyrm/connectors/inventaire.py b/bookwyrm/connectors/inventaire.py index c13ef7f8a..60f490f3e 100644 --- a/bookwyrm/connectors/inventaire.py +++ b/bookwyrm/connectors/inventaire.py @@ -137,9 +137,8 @@ class Connector(AbstractConnector): return self.get_book_data(self.get_remote_id(uri)) def get_work_from_edition_data(self, data): - try: - uri = data["claims"]["wdt:P629"] - except KeyError: + uri = data.get("wdt:P629", [None])[0] + if not uri: raise ConnectorException("Invalid book data") return self.get_book_data(self.get_remote_id(uri)) From f2a6cfb4f3a9c0cc42cd1db46271ef5ca1fbcfea Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 16:04:27 -0700 Subject: [PATCH 106/140] Remove deduplication of external search results --- bookwyrm/connectors/connector_manager.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/bookwyrm/connectors/connector_manager.py b/bookwyrm/connectors/connector_manager.py index 3a6bf13cb..86cebe80a 100644 --- a/bookwyrm/connectors/connector_manager.py +++ b/bookwyrm/connectors/connector_manager.py @@ -29,8 +29,6 @@ def search(query, min_confidence=0.1): isbn = re.sub(r"[\W_]", "", query) maybe_isbn = len(isbn) in [10, 13] # ISBN10 or ISBN13 - dedup_slug = lambda r: "%s/%s/%s" % (r.title, r.author, r.year) - result_index = set() for connector in get_connectors(): result_set = None if maybe_isbn: @@ -53,10 +51,6 @@ def search(query, min_confidence=0.1): logger.exception(e) continue - # if the search results look the same, ignore them - result_set = [r for r in result_set if dedup_slug(r) not in result_index] - # `|=` concats two sets. WE ARE GETTING FANCY HERE - result_index |= set(dedup_slug(r) for r in result_set) results.append( { "connector": connector, From f55ded092cb587693c1dc303a7383610e860515e Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 16:44:14 -0700 Subject: [PATCH 107/140] Fixes link on follow pages --- bookwyrm/templates/user/relationships/layout.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/templates/user/relationships/layout.html b/bookwyrm/templates/user/relationships/layout.html index 5baaf1f96..f36b304c7 100644 --- a/bookwyrm/templates/user/relationships/layout.html +++ b/bookwyrm/templates/user/relationships/layout.html @@ -24,7 +24,7 @@ {% for follow in follow_list %}
    - + {% include 'snippets/avatar.html' with user=follow %} {{ follow.display_name }} From 4b73c37126fe052bbb4aaf7e80d6e4c679bd5d8b Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 18:06:30 -0700 Subject: [PATCH 108/140] Separate out search types --- bookwyrm/views/search.py | 80 ++++++++++++++++++++++++++-------------- 1 file changed, 53 insertions(+), 27 deletions(-) diff --git a/bookwyrm/views/search.py b/bookwyrm/views/search.py index bd5ac3c74..df80603cd 100644 --- a/bookwyrm/views/search.py +++ b/bookwyrm/views/search.py @@ -18,7 +18,7 @@ from .helpers import handle_remote_webfinger class Search(View): """search users or books""" - def get(self, request): + def get(self, request, search_type=None): """that search bar up top""" query = request.GET.get("q") min_confidence = request.GET.get("min_confidence", 0.1) @@ -30,32 +30,62 @@ class Search(View): ) return JsonResponse([r.json() for r in book_results], safe=False) - data = {"query": query or ""} + data = {"query": query, "type": search_type} + # make a guess about what type of query this is for + if search_type == "user" or (not search_type and "@" in query): + results = user_search(query, request.user) + elif search_type == "list": + results = list_search(query, request.user) + else: + results = book_search(query, min_confidence) + return TemplateResponse(request, "search_results.html", {**data, **results}) - # use webfinger for mastodon style account@domain.com username - if query and re.match(regex.full_username, query): - handle_remote_webfinger(query) - # do a user search - if request.user.is_authenticated: - data["user_results"] = ( - models.User.viewer_aware_objects(request.user) - .annotate( - similarity=Greatest( - TrigramSimilarity("username", query), - TrigramSimilarity("localname", query), - ) +def book_search(query, min_confidence): + """that search bar up top""" + + return { + "query": query or "", + "book_results": connector_manager.search(query, min_confidence=min_confidence), + } + + +def user_search(query, viewer): + """that search bar up top""" + # logged out viewers can't search users + if not viewer.is_authenticated: + return None + + # use webfinger for mastodon style account@domain.com username to load the user if + # they don't exist locally (handle_remote_webfinger will check the db) + if re.match(regex.full_username, query): + handle_remote_webfinger(query) + + return { + "query": query, + "user_results": ( + models.User.viewer_aware_objects(viewer) + .annotate( + similarity=Greatest( + TrigramSimilarity("username", query), + TrigramSimilarity("localname", query), ) - .filter( - similarity__gt=0.5, - ) - .order_by("-similarity")[:10] ) + .filter( + similarity__gt=0.5, + ) + .order_by("-similarity")[:10] + ), + } - # any relevent lists? - data["list_results"] = ( + +def list_search(query, viewer): + """any relevent lists?""" + return { + "query": query, + "list_results": ( privacy_filter( - request.user, + viewer, models.List.objects, privacy_levels=["public", "followers"], ) @@ -69,9 +99,5 @@ class Search(View): similarity__gt=0.1, ) .order_by("-similarity")[:10] - ) - - data["book_results"] = connector_manager.search( - query, min_confidence=min_confidence - ) - return TemplateResponse(request, "search_results.html", data) + ), + } From 5ca9d2a7b0bc233a67b7e210e7a4726a7cb08283 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 18:35:09 -0700 Subject: [PATCH 109/140] Adds search templates --- bookwyrm/templates/search/book.html | 9 ++ bookwyrm/templates/search/layout.html | 59 +++++++++++ bookwyrm/templates/search/list.html | 9 ++ bookwyrm/templates/search/user.html | 9 ++ bookwyrm/templates/search_results.html | 133 ------------------------- bookwyrm/urls.py | 3 +- bookwyrm/views/search.py | 31 +++--- 7 files changed, 107 insertions(+), 146 deletions(-) create mode 100644 bookwyrm/templates/search/book.html create mode 100644 bookwyrm/templates/search/layout.html create mode 100644 bookwyrm/templates/search/list.html create mode 100644 bookwyrm/templates/search/user.html delete mode 100644 bookwyrm/templates/search_results.html diff --git a/bookwyrm/templates/search/book.html b/bookwyrm/templates/search/book.html new file mode 100644 index 000000000..5d66ef901 --- /dev/null +++ b/bookwyrm/templates/search/book.html @@ -0,0 +1,9 @@ +{% extends 'search/layout.html' %} + +{% block panel %} + +{% for result in results %} +hi +{% endfor %} + +{% endblock %} diff --git a/bookwyrm/templates/search/layout.html b/bookwyrm/templates/search/layout.html new file mode 100644 index 000000000..005cda9d9 --- /dev/null +++ b/bookwyrm/templates/search/layout.html @@ -0,0 +1,59 @@ +{% extends 'layout.html' %} +{% load i18n %} + +{% block title %}{% trans "Search" %}{% endblock %} + +{% block content %} +
    +

    + {% blocktrans %}Search{% endblocktrans %} +

    +
    + + +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    + + + + +
    +
    + {% block panel %} + {% endblock %} +
    +
    +{% endblock %} diff --git a/bookwyrm/templates/search/list.html b/bookwyrm/templates/search/list.html new file mode 100644 index 000000000..5d66ef901 --- /dev/null +++ b/bookwyrm/templates/search/list.html @@ -0,0 +1,9 @@ +{% extends 'search/layout.html' %} + +{% block panel %} + +{% for result in results %} +hi +{% endfor %} + +{% endblock %} diff --git a/bookwyrm/templates/search/user.html b/bookwyrm/templates/search/user.html new file mode 100644 index 000000000..5d66ef901 --- /dev/null +++ b/bookwyrm/templates/search/user.html @@ -0,0 +1,9 @@ +{% extends 'search/layout.html' %} + +{% block panel %} + +{% for result in results %} +hi +{% endfor %} + +{% endblock %} diff --git a/bookwyrm/templates/search_results.html b/bookwyrm/templates/search_results.html deleted file mode 100644 index fdb77f728..000000000 --- a/bookwyrm/templates/search_results.html +++ /dev/null @@ -1,133 +0,0 @@ -{% extends 'layout.html' %} -{% load i18n %} - -{% block title %}{% trans "Search Results" %}{% endblock %} - -{% block content %} -{% with book_results|first as local_results %} -
    -

    {% blocktrans %}Search Results for "{{ query }}"{% endblocktrans %}

    -
    - -
    -
    -

    {% trans "Matching Books" %}

    -
    - {% if not local_results.results %} -

    {% blocktrans %}No books found for "{{ query }}"{% endblocktrans %}

    - {% if not user.is_authenticated %} -

    - {% trans "Log in to import or add books." %} -

    - {% endif %} - {% else %} -
      - {% for result in local_results.results %} -
    • - {% include 'snippets/search_result_text.html' with result=result %} -
    • - {% endfor %} -
    - {% endif %} -
    - - {% if request.user.is_authenticated %} - {% if book_results|slice:":1" and local_results.results %} -
    -

    - {% trans "Didn't find what you were looking for?" %} -

    - {% trans "Show results from other catalogues" as button_text %} - {% include 'snippets/toggle/open_button.html' with text=button_text small=True controls_text="more-results" %} - - {% if local_results.results %} - {% trans "Hide results from other catalogues" as button_text %} - {% include 'snippets/toggle/close_button.html' with text=button_text small=True controls_text="more-results" %} - {% endif %} -
    - {% endif %} - -
    - {% for result_set in book_results|slice:"1:" %} - {% if result_set.results %} -
    - {% if not result_set.connector.local %} -
    - -
    - {% trans "Show" as button_text %} - {% include 'snippets/toggle/open_button.html' with text=button_text small=True controls_text="more-results-panel" controls_uid=result_set.connector.identifier class="is-small" icon="arrow-down" pressed=forloop.first %} -
    -
    - {% endif %} - -
    -
    -
    - {% trans "Close" as button_text %} - {% include 'snippets/toggle/toggle_button.html' with label=button_text class="delete" nonbutton=True controls_text="more-results-panel" controls_uid=result_set.connector.identifier pressed=forloop.first %} -
    - -
      - {% for result in result_set.results %} -
    • - {% include 'snippets/search_result_text.html' with result=result remote_result=True %} -
    • - {% endfor %} -
    -
    -
    -
    - {% endif %} - {% endfor %} -
    - - - {% endif %} -
    -
    - {% if request.user.is_authenticated %} -
    -

    {% trans "Matching Users" %}

    - {% if not user_results %} -

    {% blocktrans %}No users found for "{{ query }}"{% endblocktrans %}

    - {% endif %} - -
    - {% endif %} -
    -

    {% trans "Lists" %}

    - {% if not list_results %} -

    {% blocktrans %}No lists found for "{{ query }}"{% endblocktrans %}

    - {% endif %} - {% for result in list_results %} -
    - -
    - {% endfor %} -
    -
    -
    -{% endwith %} -{% endblock %} diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index 99e51ff3c..a06e0bd40 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -163,7 +163,8 @@ urlpatterns = [ name="direct-messages-user", ), # search - re_path(r"^search/?$", views.Search.as_view()), + re_path(r"^search/?$", views.Search.as_view(), name="search"), + re_path(r"^search/(?Puser|list|book)/?$", views.Search.as_view(), name="search"), # imports re_path(r"^import/?$", views.Import.as_view()), re_path(r"^import/(\d+)/?$", views.ImportStatus.as_view()), diff --git a/bookwyrm/views/search.py b/bookwyrm/views/search.py index df80603cd..aaca73779 100644 --- a/bookwyrm/views/search.py +++ b/bookwyrm/views/search.py @@ -30,15 +30,22 @@ class Search(View): ) return JsonResponse([r.json() for r in book_results], safe=False) - data = {"query": query, "type": search_type} - # make a guess about what type of query this is for - if search_type == "user" or (not search_type and "@" in query): - results = user_search(query, request.user) - elif search_type == "list": - results = list_search(query, request.user) - else: - results = book_search(query, min_confidence) - return TemplateResponse(request, "search_results.html", {**data, **results}) + data = {"query": query or "", "type": search_type} + results = {} + if query: + # make a guess about what type of query this is for + if search_type == "user" or (not search_type and "@" in query): + results = user_search(query, request.user) + elif search_type == "list": + results = list_search(query, request.user) + else: + results = book_search(query, min_confidence) + + return TemplateResponse( + request, + "search/{:s}.html".format(search_type or "book"), + {**data, **results} + ) def book_search(query, min_confidence): @@ -46,7 +53,7 @@ def book_search(query, min_confidence): return { "query": query or "", - "book_results": connector_manager.search(query, min_confidence=min_confidence), + "results": connector_manager.search(query, min_confidence=min_confidence), } @@ -63,7 +70,7 @@ def user_search(query, viewer): return { "query": query, - "user_results": ( + "results": ( models.User.viewer_aware_objects(viewer) .annotate( similarity=Greatest( @@ -83,7 +90,7 @@ def list_search(query, viewer): """any relevent lists?""" return { "query": query, - "list_results": ( + "results": ( privacy_filter( viewer, models.List.objects, From 21a5147c3c523f57c945bc64efc2311dfda4472a Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 18:59:02 -0700 Subject: [PATCH 110/140] Controls search type --- bookwyrm/templates/search/layout.html | 36 ++++++++++++------------ bookwyrm/templates/search/list.html | 4 +-- bookwyrm/urls.py | 1 - bookwyrm/views/search.py | 40 +++++++++++++-------------- 4 files changed, 39 insertions(+), 42 deletions(-) diff --git a/bookwyrm/templates/search/layout.html b/bookwyrm/templates/search/layout.html index 005cda9d9..da0f651af 100644 --- a/bookwyrm/templates/search/layout.html +++ b/bookwyrm/templates/search/layout.html @@ -10,14 +10,14 @@
    -
    +
    - +
    - @@ -35,25 +35,25 @@ -
    -
    - {% block panel %} - {% endblock %} -
    -
    +
    + {% block panel %} + {% endblock %} + {% if not results %} +

    + {% blocktrans %}No results found for "{{ query }}"{% endblocktrans %} +

    + {% endif %} +
    {% endblock %} diff --git a/bookwyrm/templates/search/list.html b/bookwyrm/templates/search/list.html index 5d66ef901..d7e48f51c 100644 --- a/bookwyrm/templates/search/list.html +++ b/bookwyrm/templates/search/list.html @@ -2,8 +2,6 @@ {% block panel %} -{% for result in results %} -hi -{% endfor %} +{% include 'lists/list_items.html' with lists=results %} {% endblock %} diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index a06e0bd40..5412378e6 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -164,7 +164,6 @@ urlpatterns = [ ), # search re_path(r"^search/?$", views.Search.as_view(), name="search"), - re_path(r"^search/(?Puser|list|book)/?$", views.Search.as_view(), name="search"), # imports re_path(r"^import/?$", views.Import.as_view()), re_path(r"^import/(\d+)/?$", views.ImportStatus.as_view()), diff --git a/bookwyrm/views/search.py b/bookwyrm/views/search.py index aaca73779..cfbc1f0ba 100644 --- a/bookwyrm/views/search.py +++ b/bookwyrm/views/search.py @@ -18,10 +18,11 @@ from .helpers import handle_remote_webfinger class Search(View): """search users or books""" - def get(self, request, search_type=None): + def get(self, request): """that search bar up top""" query = request.GET.get("q") min_confidence = request.GET.get("min_confidence", 0.1) + search_type = request.GET.get("type") if is_api_request(request): # only return local book results via json so we don't cascade @@ -30,38 +31,39 @@ class Search(View): ) return JsonResponse([r.json() for r in book_results], safe=False) + if not search_type: + search_type = "user" if "@" in query else "book" + + endpoints = { + "book": book_search, + "user": user_search, + "list": list_search, + } + if not search_type in endpoints: + search_type = "book" + endpoint = endpoints[search_type] + data = {"query": query or "", "type": search_type} - results = {} - if query: - # make a guess about what type of query this is for - if search_type == "user" or (not search_type and "@" in query): - results = user_search(query, request.user) - elif search_type == "list": - results = list_search(query, request.user) - else: - results = book_search(query, min_confidence) + results = endpoint(query, request.user, min_confidence) if query else {} return TemplateResponse( - request, - "search/{:s}.html".format(search_type or "book"), - {**data, **results} + request, "search/{:s}.html".format(search_type), {**data, **results} ) -def book_search(query, min_confidence): +def book_search(query, _, min_confidence): """that search bar up top""" return { - "query": query or "", "results": connector_manager.search(query, min_confidence=min_confidence), } -def user_search(query, viewer): +def user_search(query, viewer, _): """that search bar up top""" # logged out viewers can't search users if not viewer.is_authenticated: - return None + return {} # use webfinger for mastodon style account@domain.com username to load the user if # they don't exist locally (handle_remote_webfinger will check the db) @@ -69,7 +71,6 @@ def user_search(query, viewer): handle_remote_webfinger(query) return { - "query": query, "results": ( models.User.viewer_aware_objects(viewer) .annotate( @@ -86,10 +87,9 @@ def user_search(query, viewer): } -def list_search(query, viewer): +def list_search(query, viewer, _): """any relevent lists?""" return { - "query": query, "results": ( privacy_filter( viewer, From cb6c0035d7ee97ee531894e6227df22fffbb7700 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 19:19:10 -0700 Subject: [PATCH 111/140] List and user previews --- bookwyrm/templates/directory/directory.html | 56 +-------------- bookwyrm/templates/directory/user_card.html | 57 +++++++++++++++ bookwyrm/templates/search/layout.html | 3 + bookwyrm/templates/search/user.html | 9 ++- bookwyrm/views/search.py | 80 ++++++++++----------- 5 files changed, 105 insertions(+), 100 deletions(-) create mode 100644 bookwyrm/templates/directory/user_card.html diff --git a/bookwyrm/templates/directory/directory.html b/bookwyrm/templates/directory/directory.html index 2fa8a5aea..f97a84814 100644 --- a/bookwyrm/templates/directory/directory.html +++ b/bookwyrm/templates/directory/directory.html @@ -1,7 +1,5 @@ {% extends 'layout.html' %} {% load i18n %} -{% load bookwyrm_tags %} -{% load humanize %} {% block title %}{% trans "Directory" %}{% endblock %} @@ -41,59 +39,7 @@
    {% for user in users %}
    -
    -
    - - -
    - {% if user.summary %} - {{ user.summary | to_markdown | safe | truncatechars_html:40 }} - {% else %} {% endif %} -
    -
    -
    - {% if user != request.user %} - {% if user.mutuals %} - - {% elif user.shared_books %} - - {% endif %} - {% endif %} - - -
    -
    + {% include 'directory/user_card.html' %}
    {% endfor %}
    diff --git a/bookwyrm/templates/directory/user_card.html b/bookwyrm/templates/directory/user_card.html new file mode 100644 index 000000000..8e7538c89 --- /dev/null +++ b/bookwyrm/templates/directory/user_card.html @@ -0,0 +1,57 @@ +{% load i18n %} +{% load bookwyrm_tags %} +{% load humanize %} + +
    +
    + + +
    + {% if user.summary %} + {{ user.summary | to_markdown | safe | truncatechars_html:40 }} + {% else %} {% endif %} +
    +
    +
    + {% if user != request.user %} + {% if user.mutuals %} + + {% elif user.shared_books %} + + {% endif %} + {% endif %} + + +
    +
    diff --git a/bookwyrm/templates/search/layout.html b/bookwyrm/templates/search/layout.html index da0f651af..b122d7e25 100644 --- a/bookwyrm/templates/search/layout.html +++ b/bookwyrm/templates/search/layout.html @@ -33,6 +33,7 @@
    +{% if query %}
    +{% endif %} + {% endblock %} diff --git a/bookwyrm/templates/search/user.html b/bookwyrm/templates/search/user.html index 5d66ef901..c6adc613a 100644 --- a/bookwyrm/templates/search/user.html +++ b/bookwyrm/templates/search/user.html @@ -1,9 +1,14 @@ {% extends 'search/layout.html' %} +{% load bookwyrm_tags %} {% block panel %} -{% for result in results %} -hi +
    +{% for user in results %} +
    + {% include 'directory/user_card.html' %} +
    {% endfor %} +
    {% endblock %} diff --git a/bookwyrm/views/search.py b/bookwyrm/views/search.py index cfbc1f0ba..603ed2117 100644 --- a/bookwyrm/views/search.py +++ b/bookwyrm/views/search.py @@ -43,24 +43,22 @@ class Search(View): search_type = "book" endpoint = endpoints[search_type] - data = {"query": query or "", "type": search_type} - results = endpoint(query, request.user, min_confidence) if query else {} + data = { + "query": query or "", + "type": search_type, + "results": endpoint(query, request.user, min_confidence) if query else {}, + } - return TemplateResponse( - request, "search/{:s}.html".format(search_type), {**data, **results} - ) + return TemplateResponse(request, "search/{:s}.html".format(search_type), data) def book_search(query, _, min_confidence): - """that search bar up top""" - - return { - "results": connector_manager.search(query, min_confidence=min_confidence), - } + """the real business is elsewhere""" + return connector_manager.search(query, min_confidence=min_confidence) def user_search(query, viewer, _): - """that search bar up top""" + """cool kids members only user search""" # logged out viewers can't search users if not viewer.is_authenticated: return {} @@ -70,41 +68,37 @@ def user_search(query, viewer, _): if re.match(regex.full_username, query): handle_remote_webfinger(query) - return { - "results": ( - models.User.viewer_aware_objects(viewer) - .annotate( - similarity=Greatest( - TrigramSimilarity("username", query), - TrigramSimilarity("localname", query), - ) + return ( + models.User.viewer_aware_objects(viewer) + .annotate( + similarity=Greatest( + TrigramSimilarity("username", query), + TrigramSimilarity("localname", query), ) - .filter( - similarity__gt=0.5, - ) - .order_by("-similarity")[:10] - ), - } + ) + .filter( + similarity__gt=0.5, + ) + .order_by("-similarity")[:10] + ) def list_search(query, viewer, _): """any relevent lists?""" - return { - "results": ( - privacy_filter( - viewer, - models.List.objects, - privacy_levels=["public", "followers"], + return ( + privacy_filter( + viewer, + models.List.objects, + privacy_levels=["public", "followers"], + ) + .annotate( + similarity=Greatest( + TrigramSimilarity("name", query), + TrigramSimilarity("description", query), ) - .annotate( - similarity=Greatest( - TrigramSimilarity("name", query), - TrigramSimilarity("description", query), - ) - ) - .filter( - similarity__gt=0.1, - ) - .order_by("-similarity")[:10] - ), - } + ) + .filter( + similarity__gt=0.1, + ) + .order_by("-similarity")[:10] + ) From 499c4e3267d06f738be989dd0d42fea9027f37c9 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 19:56:29 -0700 Subject: [PATCH 112/140] Don't search remote sources by default --- bookwyrm/templates/search/book.html | 69 ++++++++++++++++++++++++++- bookwyrm/templates/search/layout.html | 6 ++- bookwyrm/views/search.py | 21 +++++--- 3 files changed, 86 insertions(+), 10 deletions(-) diff --git a/bookwyrm/templates/search/book.html b/bookwyrm/templates/search/book.html index 5d66ef901..9d42dd7f2 100644 --- a/bookwyrm/templates/search/book.html +++ b/bookwyrm/templates/search/book.html @@ -1,9 +1,74 @@ {% extends 'search/layout.html' %} +{% load i18n %} {% block panel %} -{% for result in results %} -hi +{% if results %} +{% with results|first as local_results %} +
      +{% for result in local_results.results %} +
    • + {% include 'snippets/search_result_text.html' with result=result %} +
    • {% endfor %} +
    +{% endwith %} + +
    +{% for result_set in results|slice:"1:" %} + {% if result_set.results %} +
    + {% if not result_set.connector.local %} +
    + +
    + {% trans "Show" as button_text %} + {% include 'snippets/toggle/open_button.html' with text=button_text small=True controls_text="more-results-panel" controls_uid=result_set.connector.identifier class="is-small" icon="arrow-down" pressed=forloop.first %} +
    +
    + {% endif %} + +
    +
    +
    + {% trans "Close" as button_text %} + {% include 'snippets/toggle/toggle_button.html' with label=button_text class="delete" nonbutton=True controls_text="more-results-panel" controls_uid=result_set.connector.identifier pressed=forloop.first %} +
    + +
      + {% for result in result_set.results %} +
    • + {% include 'snippets/search_result_text.html' with result=result remote_result=True %} +
    • + {% endfor %} +
    +
    +
    +
    + {% endif %} + {% endfor %} +
    + + +{% endif %} + +{% if not remote %} +

    + {% if request.user.is_authenticated %} + + {% trans "Load results from other catalogues" %} + + {% else %} + + {% trans "Log in to import or add books." %} + + {% endif %} +

    +{% endif %} {% endblock %} diff --git a/bookwyrm/templates/search/layout.html b/bookwyrm/templates/search/layout.html index b122d7e25..17e14f0fe 100644 --- a/bookwyrm/templates/search/layout.html +++ b/bookwyrm/templates/search/layout.html @@ -39,9 +39,11 @@ {% trans "Books" %} + {% if request.user.is_authenticated %} {% trans "Users" %} + {% endif %} {% trans "Lists" %} @@ -49,13 +51,13 @@
    - {% block panel %} - {% endblock %} {% if not results %}

    {% blocktrans %}No results found for "{{ query }}"{% endblocktrans %}

    {% endif %} + {% block panel %} + {% endblock %}
    {% endif %} diff --git a/bookwyrm/views/search.py b/bookwyrm/views/search.py index 603ed2117..9fa07e2ed 100644 --- a/bookwyrm/views/search.py +++ b/bookwyrm/views/search.py @@ -23,6 +23,7 @@ class Search(View): query = request.GET.get("q") min_confidence = request.GET.get("min_confidence", 0.1) search_type = request.GET.get("type") + search_remote = request.GET.get("remote", False) if is_api_request(request): # only return local book results via json so we don't cascade @@ -41,23 +42,31 @@ class Search(View): } if not search_type in endpoints: search_type = "book" - endpoint = endpoints[search_type] data = { "query": query or "", "type": search_type, - "results": endpoint(query, request.user, min_confidence) if query else {}, + "remote": search_remote, } + if query: + data["results"] = endpoints[search_type]( + query, request.user, min_confidence, search_remote + ) return TemplateResponse(request, "search/{:s}.html".format(search_type), data) -def book_search(query, _, min_confidence): +def book_search(query, _, min_confidence, search_remote=False): """the real business is elsewhere""" - return connector_manager.search(query, min_confidence=min_confidence) + if search_remote: + return connector_manager.search(query, min_confidence=min_confidence) + results = connector_manager.local_search(query, min_confidence=min_confidence) + if not results: + return None + return [{"results": results}] -def user_search(query, viewer, _): +def user_search(query, viewer, *_): """cool kids members only user search""" # logged out viewers can't search users if not viewer.is_authenticated: @@ -83,7 +92,7 @@ def user_search(query, viewer, _): ) -def list_search(query, viewer, _): +def list_search(query, viewer, *_): """any relevent lists?""" return ( privacy_filter( From 9caad56ffcfc1d900163df1b3f50b4d5e0081bdc Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 20:08:05 -0700 Subject: [PATCH 113/140] Don't allow remote search results for logged out users --- bookwyrm/views/search.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bookwyrm/views/search.py b/bookwyrm/views/search.py index 9fa07e2ed..c216170da 100644 --- a/bookwyrm/views/search.py +++ b/bookwyrm/views/search.py @@ -23,7 +23,9 @@ class Search(View): query = request.GET.get("q") min_confidence = request.GET.get("min_confidence", 0.1) search_type = request.GET.get("type") - search_remote = request.GET.get("remote", False) + search_remote = ( + request.GET.get("remote", False) and request.user.is_authenticated + ) if is_api_request(request): # only return local book results via json so we don't cascade From 5f7191a976331fea2bc8cd16db17126bd0c175db Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 20:09:43 -0700 Subject: [PATCH 114/140] Safer logged out search --- bookwyrm/templates/search/layout.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bookwyrm/templates/search/layout.html b/bookwyrm/templates/search/layout.html index 17e14f0fe..8c81f5b75 100644 --- a/bookwyrm/templates/search/layout.html +++ b/bookwyrm/templates/search/layout.html @@ -19,7 +19,9 @@
    From f9c1ecfabed82ee1da0c116d3d8e31304e3174dc Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 30 Apr 2021 20:16:34 -0700 Subject: [PATCH 115/140] Fixes bad whitespace --- bookwyrm/templates/search/book.html | 60 ++++++++++++++--------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/bookwyrm/templates/search/book.html b/bookwyrm/templates/search/book.html index 9d42dd7f2..53aadb63e 100644 --- a/bookwyrm/templates/search/book.html +++ b/bookwyrm/templates/search/book.html @@ -8,7 +8,7 @@
      {% for result in local_results.results %}
    • - {% include 'snippets/search_result_text.html' with result=result %} + {% include 'snippets/search_result_text.html' with result=result %}
    • {% endfor %}
    @@ -18,37 +18,37 @@ {% for result_set in results|slice:"1:" %} {% if result_set.results %}
    - {% if not result_set.connector.local %} -
    - -
    - {% trans "Show" as button_text %} - {% include 'snippets/toggle/open_button.html' with text=button_text small=True controls_text="more-results-panel" controls_uid=result_set.connector.identifier class="is-small" icon="arrow-down" pressed=forloop.first %} -
    -
    - {% endif %} + {% if not result_set.connector.local %} +
    + +
    + {% trans "Show" as button_text %} + {% include 'snippets/toggle/open_button.html' with text=button_text small=True controls_text="more-results-panel" controls_uid=result_set.connector.identifier class="is-small" icon="arrow-down" pressed=forloop.first %} +
    +
    + {% endif %} -
    -
    -
    - {% trans "Close" as button_text %} - {% include 'snippets/toggle/toggle_button.html' with label=button_text class="delete" nonbutton=True controls_text="more-results-panel" controls_uid=result_set.connector.identifier pressed=forloop.first %} -
    +
    +
    +
    + {% trans "Close" as button_text %} + {% include 'snippets/toggle/toggle_button.html' with label=button_text class="delete" nonbutton=True controls_text="more-results-panel" controls_uid=result_set.connector.identifier pressed=forloop.first %} +
    -
      - {% for result in result_set.results %} -
    • - {% include 'snippets/search_result_text.html' with result=result remote_result=True %} -
    • - {% endfor %} -
    -
    -
    +
      + {% for result in result_set.results %} +
    • + {% include 'snippets/search_result_text.html' with result=result remote_result=True %} +
    • + {% endfor %} +
    +
    +
    {% endif %} {% endfor %} From ad8666ebeca4367620c812dc73236a51102d85f3 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sat, 1 May 2021 07:20:54 -0700 Subject: [PATCH 116/140] Removes extra "content" field in status editor that broke dms --- bookwyrm/templates/feed/direct_messages.html | 2 +- .../snippets/create_status_form.html | 20 ++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/bookwyrm/templates/feed/direct_messages.html b/bookwyrm/templates/feed/direct_messages.html index f097fd9f4..1e361e614 100644 --- a/bookwyrm/templates/feed/direct_messages.html +++ b/bookwyrm/templates/feed/direct_messages.html @@ -14,7 +14,7 @@
    - {% include 'snippets/create_status_form.html' with type="direct" uuid=1 mentions=partner %} + {% include 'snippets/create_status_form.html' with type="direct" uuid=1 mention=partner %}
    diff --git a/bookwyrm/templates/snippets/create_status_form.html b/bookwyrm/templates/snippets/create_status_form.html index a74230ad1..f6021622a 100644 --- a/bookwyrm/templates/snippets/create_status_form.html +++ b/bookwyrm/templates/snippets/create_status_form.html @@ -36,13 +36,23 @@
    {% if type == 'quotation' %} - - {% elif type == 'reply' %} - {% include 'snippets/content_warning_field.html' with parent_status=status %} - + {% else %} {% include 'snippets/content_warning_field.html' with parent_status=status %} - + {% endif %}
    From 64b54510d9270f78e2b267e87525937d7d269254 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sat, 1 May 2021 10:39:05 -0700 Subject: [PATCH 117/140] Updates unit tests --- bookwyrm/tests/views/test_search.py | 47 +++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/bookwyrm/tests/views/test_search.py b/bookwyrm/tests/views/test_search.py index 777275222..7661d5a6f 100644 --- a/bookwyrm/tests/views/test_search.py +++ b/bookwyrm/tests/views/test_search.py @@ -2,6 +2,7 @@ import json from unittest.mock import patch +from django.contrib.auth.models import AnonymousUser from django.http import JsonResponse from django.template.response import TemplateResponse from django.test import TestCase @@ -52,7 +53,7 @@ class ShelfViews(TestCase): self.assertEqual(data[0]["title"], "Test Book") self.assertEqual(data[0]["key"], "https://%s/book/%d" % (DOMAIN, self.book.id)) - def test_search_html_response(self): + def test_search_books(self): """searches remote connectors""" view = views.Search.as_view() @@ -92,7 +93,7 @@ class ShelfViews(TestCase): connector=connector, ) - request = self.factory.get("", {"q": "Test Book"}) + request = self.factory.get("", {"q": "Test Book", "remote": True}) request.user = self.local_user with patch("bookwyrm.views.search.is_api_request") as is_api: is_api.return_value = False @@ -101,19 +102,41 @@ class ShelfViews(TestCase): response = view(request) self.assertIsInstance(response, TemplateResponse) response.render() - self.assertEqual( - response.context_data["book_results"][0].title, "Gideon the Ninth" - ) + self.assertEqual(response.context_data["results"][0].title, "Gideon the Ninth") - def test_search_html_response_users(self): + def test_search_users(self): """searches remote connectors""" view = views.Search.as_view() - request = self.factory.get("", {"q": "mouse"}) + request = self.factory.get("", {"q": "mouse", "type": "user"}) request.user = self.local_user - with patch("bookwyrm.views.search.is_api_request") as is_api: - is_api.return_value = False - with patch("bookwyrm.connectors.connector_manager.search"): - response = view(request) + response = view(request) + self.assertIsInstance(response, TemplateResponse) response.render() - self.assertEqual(response.context_data["user_results"][0], self.local_user) + self.assertEqual(response.context_data["results"][0], self.local_user) + + def test_search_users_logged_out(self): + """searches remote connectors""" + view = views.Search.as_view() + request = self.factory.get("", {"q": "mouse", "type": "user"}) + + anonymous_user = AnonymousUser + anonymous_user.is_authenticated = False + request.user = anonymous_user + + response = view(request) + + response.render() + self.assertEqual(response.context_data["results"], {}) + + def test_search_lists(self): + """searches remote connectors""" + booklist = models.List.objects.create(user=self.local_user, name="test list") + view = views.Search.as_view() + request = self.factory.get("", {"q": "test", "type": "list"}) + request.user = self.local_user + response = view(request) + + self.assertIsInstance(response, TemplateResponse) + response.render() + self.assertEqual(response.context_data["results"][0], booklist) From c42be7a5892e4502355d707ec4c6b5b742cd331a Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sat, 1 May 2021 10:47:01 -0700 Subject: [PATCH 118/140] Adds pagination --- bookwyrm/templates/search/layout.html | 4 ++++ bookwyrm/views/search.py | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/bookwyrm/templates/search/layout.html b/bookwyrm/templates/search/layout.html index 8c81f5b75..00b49b93b 100644 --- a/bookwyrm/templates/search/layout.html +++ b/bookwyrm/templates/search/layout.html @@ -60,6 +60,10 @@ {% endif %} {% block panel %} {% endblock %} + +
    + {% include 'snippets/pagination.html' with page=results path=request.path %} +
    {% endif %} diff --git a/bookwyrm/views/search.py b/bookwyrm/views/search.py index c216170da..ebaa937c7 100644 --- a/bookwyrm/views/search.py +++ b/bookwyrm/views/search.py @@ -2,6 +2,7 @@ import re from django.contrib.postgres.search import TrigramSimilarity +from django.core.paginator import Paginator from django.db.models.functions import Greatest from django.http import JsonResponse from django.template.response import TemplateResponse @@ -9,6 +10,7 @@ from django.views import View from bookwyrm import models from bookwyrm.connectors import connector_manager +from bookwyrm.settings import PAGE_LENGTH from bookwyrm.utils import regex from .helpers import is_api_request, privacy_filter from .helpers import handle_remote_webfinger @@ -51,9 +53,11 @@ class Search(View): "remote": search_remote, } if query: - data["results"] = endpoints[search_type]( + results = endpoints[search_type]( query, request.user, min_confidence, search_remote ) + paginated = Paginator(results, PAGE_LENGTH).get_page(request.GET.get("page")) + data["results"] = paginated return TemplateResponse(request, "search/{:s}.html".format(search_type), data) From bb50bd8121cd857f483b46134161da989eab1c57 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sat, 1 May 2021 10:49:34 -0700 Subject: [PATCH 119/140] Python formatting --- bookwyrm/views/search.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bookwyrm/views/search.py b/bookwyrm/views/search.py index ebaa937c7..b76f23929 100644 --- a/bookwyrm/views/search.py +++ b/bookwyrm/views/search.py @@ -56,7 +56,9 @@ class Search(View): results = endpoints[search_type]( query, request.user, min_confidence, search_remote ) - paginated = Paginator(results, PAGE_LENGTH).get_page(request.GET.get("page")) + paginated = Paginator(results, PAGE_LENGTH).get_page( + request.GET.get("page") + ) data["results"] = paginated return TemplateResponse(request, "search/{:s}.html".format(search_type), data) From 037362e49fa13d6f66755bad51a49d5f6184697d Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Sat, 1 May 2021 10:55:10 -0700 Subject: [PATCH 120/140] Adds labels for form elements --- bookwyrm/templates/search/layout.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bookwyrm/templates/search/layout.html b/bookwyrm/templates/search/layout.html index 00b49b93b..239586efa 100644 --- a/bookwyrm/templates/search/layout.html +++ b/bookwyrm/templates/search/layout.html @@ -13,10 +13,10 @@
    - +
    -
    +
    +

    {% for error in form.first_published_date.errors %}

    {{ error | escape }}

    @@ -141,7 +141,7 @@

    - +

    {% for error in form.published_date.errors %}

    {{ error | escape }}

    @@ -245,3 +245,7 @@ {% endblock %} + +{% block scripts %} +{% include 'snippets/datepicker_js.html' %} +{% endblock %} diff --git a/bookwyrm/templates/book/editions.html b/bookwyrm/templates/book/editions.html index efbe15663..8af85aced 100644 --- a/bookwyrm/templates/book/editions.html +++ b/bookwyrm/templates/book/editions.html @@ -51,3 +51,7 @@ {% include 'snippets/pagination.html' with page=editions path=request.path %}
    {% endblock %} + +{% block scripts %} +{% include 'snippets/datepicker_js.html' %} +{% endblock %} diff --git a/bookwyrm/templates/edit_author.html b/bookwyrm/templates/edit_author.html index 542b57f95..ded8c4944 100644 --- a/bookwyrm/templates/edit_author.html +++ b/bookwyrm/templates/edit_author.html @@ -81,3 +81,7 @@ {% endblock %} + +{% block scripts %} +{% include 'snippets/datepicker_js.html' %} +{% endblock %} diff --git a/bookwyrm/templates/feed/feed_layout.html b/bookwyrm/templates/feed/feed_layout.html index 75fc1951a..431cf6dd7 100644 --- a/bookwyrm/templates/feed/feed_layout.html +++ b/bookwyrm/templates/feed/feed_layout.html @@ -105,4 +105,5 @@ {% block scripts %} +{% include 'snippets/datepicker_js.html' %} {% endblock %} diff --git a/bookwyrm/templates/get_started/books.html b/bookwyrm/templates/get_started/books.html index 9613508b9..e3fd87bbd 100644 --- a/bookwyrm/templates/get_started/books.html +++ b/bookwyrm/templates/get_started/books.html @@ -64,3 +64,7 @@ {% endblock %} + +{% block scripts %} +{% include 'snippets/datepicker_js.html' %} +{% endblock %} diff --git a/bookwyrm/templates/user/layout.html b/bookwyrm/templates/user/layout.html index 661d80781..1aa762027 100644 --- a/bookwyrm/templates/user/layout.html +++ b/bookwyrm/templates/user/layout.html @@ -81,3 +81,8 @@ {% block panel %}{% endblock %} {% endblock %} + + +{% block scripts %} +{% include 'snippets/datepicker_js.html' %} +{% endblock %} From 869cfa6d341f25ee25d8576adcdc2e3b8d239b9c Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 4 May 2021 09:04:21 -0700 Subject: [PATCH 134/140] Replaces date elements with datepicker --- bookwyrm/templates/book/edit_book.html | 12 ++++++++++-- bookwyrm/templates/snippets/datepicker_js.html | 3 +++ bookwyrm/templates/snippets/readthrough_form.html | 12 ++++++++++-- .../snippets/shelve_button/finish_reading_modal.html | 12 ++++++++++-- .../snippets/shelve_button/start_reading_modal.html | 6 +++++- 5 files changed, 38 insertions(+), 7 deletions(-) create mode 100644 bookwyrm/templates/snippets/datepicker_js.html diff --git a/bookwyrm/templates/book/edit_book.html b/bookwyrm/templates/book/edit_book.html index 095439d14..644e90c6e 100644 --- a/bookwyrm/templates/book/edit_book.html +++ b/bookwyrm/templates/book/edit_book.html @@ -133,7 +133,11 @@

    - +

    {% for error in form.first_published_date.errors %}

    {{ error | escape }}

    @@ -141,7 +145,11 @@

    - +

    {% for error in form.published_date.errors %}

    {{ error | escape }}

    diff --git a/bookwyrm/templates/snippets/datepicker_js.html b/bookwyrm/templates/snippets/datepicker_js.html new file mode 100644 index 000000000..abfadaaf8 --- /dev/null +++ b/bookwyrm/templates/snippets/datepicker_js.html @@ -0,0 +1,3 @@ + + + diff --git a/bookwyrm/templates/snippets/readthrough_form.html b/bookwyrm/templates/snippets/readthrough_form.html index c5be295e1..256fcea54 100644 --- a/bookwyrm/templates/snippets/readthrough_form.html +++ b/bookwyrm/templates/snippets/readthrough_form.html @@ -5,7 +5,11 @@
    {# Only show progress for editing existing readthroughs #} @@ -28,6 +32,10 @@
    diff --git a/bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html b/bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html index ca65bf06c..6d4ea5eac 100644 --- a/bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html +++ b/bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html @@ -17,13 +17,21 @@
    diff --git a/bookwyrm/templates/snippets/shelve_button/start_reading_modal.html b/bookwyrm/templates/snippets/shelve_button/start_reading_modal.html index 213416836..47d620e0d 100644 --- a/bookwyrm/templates/snippets/shelve_button/start_reading_modal.html +++ b/bookwyrm/templates/snippets/shelve_button/start_reading_modal.html @@ -15,7 +15,11 @@
    From 748810cd419915b34849d8255fd9b4dfb71bc5fc Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 4 May 2021 09:34:16 -0700 Subject: [PATCH 135/140] Use reverse lookups for urls --- bookwyrm/templates/book/edit_book.html | 2 +- bookwyrm/templates/book/editions.html | 4 ++-- bookwyrm/templates/discover/large-book.html | 2 +- bookwyrm/templates/discover/small-book.html | 2 +- bookwyrm/templates/edit_author.html | 2 +- bookwyrm/templates/feed/direct_messages.html | 2 +- bookwyrm/templates/import.html | 2 +- bookwyrm/templates/import_status.html | 2 +- bookwyrm/templates/layout.html | 12 ++++++------ bookwyrm/templates/login.html | 4 ++-- bookwyrm/templates/notifications.html | 2 +- .../preferences/preferences_layout.html | 9 ++++++--- bookwyrm/templates/snippets/authors.html | 2 +- bookwyrm/templates/snippets/book_tiles.html | 2 +- bookwyrm/templates/snippets/status/layout.html | 2 +- .../templates/snippets/status/status_header.html | 8 ++++---- bookwyrm/templates/snippets/user_options.html | 2 +- bookwyrm/urls.py | 16 ++++++++++------ 18 files changed, 42 insertions(+), 35 deletions(-) diff --git a/bookwyrm/templates/book/edit_book.html b/bookwyrm/templates/book/edit_book.html index 8ebbeaae6..bcf111267 100644 --- a/bookwyrm/templates/book/edit_book.html +++ b/bookwyrm/templates/book/edit_book.html @@ -239,7 +239,7 @@ {% if not confirm_mode %} {% endif %} diff --git a/bookwyrm/templates/book/editions.html b/bookwyrm/templates/book/editions.html index efbe15663..775b05c86 100644 --- a/bookwyrm/templates/book/editions.html +++ b/bookwyrm/templates/book/editions.html @@ -15,14 +15,14 @@ {% for book in editions %}

    - + {{ book.title }}

    diff --git a/bookwyrm/templates/discover/large-book.html b/bookwyrm/templates/discover/large-book.html index 1808a0f9d..7def6e138 100644 --- a/bookwyrm/templates/discover/large-book.html +++ b/bookwyrm/templates/discover/large-book.html @@ -17,7 +17,7 @@

    - {{ book.title }} + {{ book.title }}

    {% if book.authors %} diff --git a/bookwyrm/templates/discover/small-book.html b/bookwyrm/templates/discover/small-book.html index ad7e00fba..73133de45 100644 --- a/bookwyrm/templates/discover/small-book.html +++ b/bookwyrm/templates/discover/small-book.html @@ -11,7 +11,7 @@ {% include 'snippets/stars.html' with rating=book|rating:request.user %}

    - {{ book.title }} + {{ book.title }}

    {% if book.authors %} diff --git a/bookwyrm/templates/edit_author.html b/bookwyrm/templates/edit_author.html index 542b57f95..b575bbb2f 100644 --- a/bookwyrm/templates/edit_author.html +++ b/bookwyrm/templates/edit_author.html @@ -76,7 +76,7 @@ diff --git a/bookwyrm/templates/feed/direct_messages.html b/bookwyrm/templates/feed/direct_messages.html index 1e361e614..0b7dcd79c 100644 --- a/bookwyrm/templates/feed/direct_messages.html +++ b/bookwyrm/templates/feed/direct_messages.html @@ -10,7 +10,7 @@ {% trans "Direct Messages" %} {% endif %} - {% if partner %}

    {% trans "All messages" %}

    {% endif %} + {% if partner %}

    {% trans "All messages" %}

    {% endif %}
    diff --git a/bookwyrm/templates/import.html b/bookwyrm/templates/import.html index 239b6914d..c4f0dfae4 100644 --- a/bookwyrm/templates/import.html +++ b/bookwyrm/templates/import.html @@ -56,7 +56,7 @@ {% endif %}
    diff --git a/bookwyrm/templates/import_status.html b/bookwyrm/templates/import_status.html index 3ce929e6a..e06392a8e 100644 --- a/bookwyrm/templates/import_status.html +++ b/bookwyrm/templates/import_status.html @@ -124,7 +124,7 @@ {% if item.book %} - + {% include 'snippets/book_cover.html' with book=item.book cover_class='is-h-s' %} {% endif %} diff --git a/bookwyrm/templates/layout.html b/bookwyrm/templates/layout.html index c45f23804..bc6544012 100644 --- a/bookwyrm/templates/layout.html +++ b/bookwyrm/templates/layout.html @@ -94,12 +94,12 @@
  • - + {% trans 'Import Books' %}
  • - + {% trans 'Settings' %}
  • @@ -122,14 +122,14 @@ {% endif %}
  • - + {% trans 'Log out' %}
  • diff --git a/bookwyrm/templates/notifications.html b/bookwyrm/templates/notifications.html index ba0a25cd0..73ad23b8a 100644 --- a/bookwyrm/templates/notifications.html +++ b/bookwyrm/templates/notifications.html @@ -107,7 +107,7 @@ {% endif %} {% endif %} {% elif notification.related_import %} - {% blocktrans with related_id=notification.related_import.id %}Your import completed.{% endblocktrans %} + {% blocktrans with related_id=notification.related_import.id %}Your import completed.{% endblocktrans %} {% elif notification.related_report %} {% url 'settings-report' notification.related_report.id as path %} {% blocktrans with related_id=path %}A new report needs moderation.{% endblocktrans %} diff --git a/bookwyrm/templates/preferences/preferences_layout.html b/bookwyrm/templates/preferences/preferences_layout.html index d463d9cba..baf87e478 100644 --- a/bookwyrm/templates/preferences/preferences_layout.html +++ b/bookwyrm/templates/preferences/preferences_layout.html @@ -11,16 +11,19 @@ diff --git a/bookwyrm/templates/snippets/authors.html b/bookwyrm/templates/snippets/authors.html index 9459b0fe4..476956b6e 100644 --- a/bookwyrm/templates/snippets/authors.html +++ b/bookwyrm/templates/snippets/authors.html @@ -5,7 +5,7 @@ {% endcomment %} {% for author in book.authors.all %}
    diff --git a/bookwyrm/templates/snippets/status/layout.html b/bookwyrm/templates/snippets/status/layout.html index 6014158ff..ddbd6f20f 100644 --- a/bookwyrm/templates/snippets/status/layout.html +++ b/bookwyrm/templates/snippets/status/layout.html @@ -44,7 +44,7 @@ {% else %}