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 f1674cf7..4cc98da7 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 00000000..9ff26af3 --- /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 11bdbee2..9f9af8ae 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 7e552b0a..8ff1df82 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 3204c603..ccbec9eb 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 00b5c5c9..bbbedd70 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 00000000..714508ab --- /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 9be0266c..34357726 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 8ff1df82..7a427927 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 bbbedd70..378f23f7 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 714508ab..748259eb 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 059b8e7e..2f6ba503 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 378f23f7..8007bb1a 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 748259eb..72ed8221 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 72ed8221..b3c49772 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 b3c49772..9987079e 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 9987079e..1ff834bf 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 9ff26af3..5db176ec 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 00000000..c9f07b3c --- /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 8007bb1a..f66cca7f 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 1ff834bf..6eff6508 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 34357726..466bf1e5 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 c9f07b3c..00000000 --- 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 00000000..2543193b --- /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 4c5fe6c8..f7740b1d 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 ccbec9eb..94bbe330 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 7a427927..17e5b686 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 f66cca7f..43cd6aad 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 6eff6508..a16bb0fd 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 a16bb0fd..4be0dd5c 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 d6101c87..45c81089 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 17e5b686..ca4d69da 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 4be0dd5c..2a4569b3 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 2543193b..cd87dd97 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 2a4569b3..465268b2 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 465268b2..594fe810 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 b4abd690..71947aea 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 44b91b94..303d7318 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 6df27746..f80a2690 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 ce47819e..f26974d2 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 4c9c23da..cb1fae39 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 059b8e7e..e46dbbeb 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 a9f8e5c0..f6c6f9f5 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 c2985c12..d85bb7fb 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 995ba161..fa6a8fb9 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 3e3e8bf4..ddc2fff0 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 c7d789d0..a7a54811 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 b1166f7f..b994343e 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 cb65a6f2..0b673037 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 0732327b..d9f264ea 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 a54664ce..9b0c6991 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 5ef6e61a..27f4521d 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 281bc7ed..a1e55ce9 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 28850673..34558f8d 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 7f8644b4..0cb1a9b1 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 4ec39218..3eb66eae 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 408e20c0..c7b39ebb 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 048e5a71..c1f5f165 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 15e84a59..669c2aaa 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 d85bb7fb..05c811d2 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 fa6a8fb9..529f51c3 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 ddc2fff0..db6b6d60 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 b994343e..8967ff57 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 d9f264ea..39498a43 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 9b0c6991..80dac213 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 a1e55ce9..9488f0d7 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 3841aac8..8f95cfeb 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 8ab61321..23f7dac0 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 3eb66eae..009bdd66 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 db6b6d60..f1a4938e 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 a807a314..ed54b7b3 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 8a60b54c..6207f63e 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 00000000..b6489b80 --- /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 dfe14b6f..597d7a66 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 14fe3cb7..fd2b2707 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 594fe810..ae6fb862 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 8f95cfeb..4d27c2a4 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 23f7dac0..a9932910 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 0cb1a9b1..de9c9535 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 009bdd66..dd580234 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 c1f5f165..f0e1626c 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 669c2aaa..75fc1951 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 05c811d2..3ce929e6 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 529f51c3..492b399b 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 0b1b05d3..b28c469d 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 f1a4938e..b59e2a96 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 e234c82c..663ef865 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 b2946b83..31ba33b5 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 80dac213..444385fe 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 4d27c2a4..98801fa1 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 c7b39ebb..1808a0f9 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 f0e1626c..ad7e00fb 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 04d0c424..578fef70 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 896f84af..dc27f2c0 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 2f6ba503..26623c05 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 0539414a..869ff04d 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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 P?qvmoyxhMQ?)UsZj4dN2 delta 8133 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 Di1DHT diff --git a/locale/de_DE/LC_MESSAGES/django.po b/locale/de_DE/LC_MESSAGES/django.po index 7acc3f96..bbdd1327 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 6685605a..3637bb77 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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 O_<{5vd27 delta 14241 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\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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 A*#H0l diff --git a/locale/fr_FR/LC_MESSAGES/django.po b/locale/fr_FR/LC_MESSAGES/django.po index ee2f7936..ee7a5534 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-26 09:56-0700\n" +"POT-Creation-Date: 2021-04-29 11:36-0700\n" "PO-Revision-Date: 2021-04-05 12:44+0100\n" "Last-Translator: Fabien Basmaison \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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 delta 12587 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 V7QeP{8O!@`c=dzzbg=N^{{de=0A diff --git a/locale/zh_Hans/LC_MESSAGES/django.po b/locale/zh_Hans/LC_MESSAGES/django.po index 789960cc..af3bc59b 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 4c9c23da..2dba79a2 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 2dba79a2..9188c1f0 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 4543b55e..bd5ac3c7 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 9188c1f0..f911bec7 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 6b1d2f8c..10a633b2 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 6b1b349f..a8f85834 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 f911bec7..909b0a25 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 909b0a25..337e88f8 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 53ceeaa8..24c80b04 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 bbdd1327..d7ad8724 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 3637bb77..c3df47ae 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 8385f7f6..dab4c486 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 ee7a5534..01963e46 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 af3bc59b..783fc70a 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 6a435ff3..0dddd2a1 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 e7a12024..b59a975f 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 b501c3d6..ea2e92b6 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 b59a975f..958dfee8 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 ab8be717..9f5b7e8b 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 24c80b04..99e51ff3 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 3efbd6ac..25726468 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 485daf15..3659a20e 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 84482cdf..770666e8 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 34902272..72614562 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 25726468..2c5bef4a 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 b294db90..2a7ccd1e 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 38c01ad2..b41d5126 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 32b5062d..22aba08e 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 2a7ccd1e..c69416dc 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 b41d5126..a1feeb76 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 33616258..93f0c15f 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 a97d26ab..fead8fcf 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 9bcf0a4a..ca05ec1e 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 d394c1d7..af31fd47 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 0c3e94e3..0f04f628 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 b2fd9eef..aa8ad7fb 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 93f0c15f..639ab502 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 0f04f628..dcdf7ccf 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 c69416dc..223f38c7 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 a1feeb76..5689bc61 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 00000000..ab38e662 --- /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 af31fd47..5584ce99 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 dcdf7ccf..661d8078 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 cebdc2cd..d5e79b86 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 76718823..db80677f 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 dc27f2c0..c13ef7f8 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 4058b067..a32fa72b 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 a32fa72b..71e407e9 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 2e88ce5d..71ac511a 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 9243d3af..2902f793 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 2c5bef4a..7c943bec 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 b2fd9eef..8fe149d5 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 db80677f..18ccb942 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 c13ef7f8..60f490f3 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 3a6bf13c..86cebe80 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 5baaf1f9..f36b304c 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 bd5ac3c7..df80603c 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 00000000..5d66ef90 --- /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 00000000..005cda9d --- /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 00000000..5d66ef90 --- /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 00000000..5d66ef90 --- /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 fdb77f72..00000000 --- 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 99e51ff3..a06e0bd4 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 df80603c..aaca7377 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 005cda9d..da0f651a 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 5d66ef90..d7e48f51 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 a06e0bd4..5412378e 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 aaca7377..cfbc1f0b 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 2fa8a5ae..f97a8481 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 00000000..8e7538c8 --- /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 da0f651a..b122d7e2 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 5d66ef90..c6adc613 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 cfbc1f0b..603ed211 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 5d66ef90..9d42dd7f 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 b122d7e2..17e14f0f 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 603ed211..9fa07e2e 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 9fa07e2e..c216170d 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 17e14f0f..8c81f5b7 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 9d42dd7f..53aadb63 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 f097fd9f..1e361e61 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 a74230ad..f6021622 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 77727522..7661d5a6 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 8c81f5b7..00b49b93 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 c216170d..ebaa937c 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 ebaa937c..b76f2392 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 00b49b93..239586ef 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 efbe1566..8af85ace 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 542b57f9..ded8c494 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 75fc1951..431cf6dd 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 9613508b..e3fd87bb 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 661d8078..1aa76202 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 095439d1..644e90c6 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 00000000..abfadaaf --- /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 c5be295e..256fcea5 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 ca65bf06..6d4ea5ea 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 21341683..47d620e0 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 8ebbeaae..bcf11126 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 efbe1566..775b05c8 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 1808a0f9..7def6e13 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 ad7e00fb..73133de4 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 542b57f9..b575bbb2 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 1e361e61..0b7dcd79 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 239b6914..c4f0dfae 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 3ce929e6..e06392a8 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 c45f2380..bc654401 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 ba0a25cd..73ad23b8 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 d463d9cb..baf87e47 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 9459b0fe..476956b6 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 6014158f..ddbd6f20 100644 --- a/bookwyrm/templates/snippets/status/layout.html +++ b/bookwyrm/templates/snippets/status/layout.html @@ -44,7 +44,7 @@ {% else %}