diff --git a/.gitignore b/.gitignore index 4da20aeb..4f2586e9 100644 --- a/.gitignore +++ b/.gitignore @@ -92,4 +92,6 @@ Thumbs.db .cache -docs \ No newline at end of file +docs +static/scripts/app.min.js +static/styles/app.min.css diff --git a/README.md b/README.md index 0a8dddfa..2b77f10b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,64 @@ -Documentation toolbox for your **javascript** / **typescript** projects based on JSDoc3 with **@category**, **@component** and **@optional** plugins. +A Documentation toolbox for your **javascript** / **typescript**, **react**, or **react-native** projects based on JSDoc3 with tags such as +**@category**, **@component**, **@lifecycle**, **@renders**, **@table**, **@optional**, **@inheritDesc**, **@inheritSummary**, **@inheritProperties**, +and **@inheritParams** plugins. This template also implements several helpful options to better control the behavior of the generated web documentation +such as, nested categorization with accordian style folding, automatically opening external `@link` tags in a new browser tab, and inheriting +documentation from parent(s) in extended classes. + +# OpenSource SoftwareBrothers community + +- [Join the community](https://adminbro.slack.com/) to get help and be inspired. +- subscribe to our [newsletter](http://opensource.softwarebrothers.co) + +# Contents +- [Example](#example) +- [Theme Installation](#theme-installation) +- [Theme Usage](#theme-usage) +- [Template Options](#template-options) + - [Options List](#template-options-option-list) + - [Using Template Options](#using-template-options) +- [TypeScript Support](#typescript-support) + - [Installation](#typescript-support-installation) + - [How It Works](#typescript-support-how-it-works) + - [Examples](#typescript-support-examples) +- Plugins + - [@category Plugin](#category-plugin) + - [Inatallation](#category-plugin-installation) + - [Usage](#category-plugin-usage) + - [@component Plugin](#component-plugin) + - [Installation](#component-installation) + - [Usage](#component-usage) + - [Preview](#component-preview) + - [Mixing Components In Preview](#component-mixing-components-in-preview) + - [Wrapper Component](#component-wrapper-component) + - [Installation](#component-wrapper-component-installation) + - [Usage](#component-wrapper-component-usage) + - [Styling React Examples](#component-styling-react-examples) + - [Adding commands to bundle entry file](#component-adding-commands-to-bundle-entry-file) + - [@lifecycle Plugin](#lifecycle-plugin) + - [Installation](#lifecycle-installation) + - [Usage](#lifecycle-usage) + - [@table Plugin](#table-plugin) + - [Installation](#table-installation) + - [Usage](#table-usage) + - ['inheritable' Plugin](#inheritable-plugin) + - [Installation](#inheritable-installation) + - [Supported Tags](#inheritable-supported-tags) + - [Usage](#inheritable-usage) + - [Using With Standard Tags](#inheritable-using-with-standard-tags) + - [Value Inheritance](#inheritable-value-inheritance) + - [Params](#inheritable-params) + - [Examples](#inheritable-examples) + - ['@typedef import' Plugin](#typedef-import-plugin) + - [Installation](#typedef-import-installation) +- [Setting Up For Development](#setting-up-for-development) +- [License](#license) + + +# Example + +Example documentation can be found here: [](https://softwarebrothers.github.io/example-design-system/index.html) This is how it looks: @@ -18,21 +76,14 @@ This is how it looks: -# Example - -Example documentation can be found here: https://softwarebrothers.github.io/example-design-system/index.html - -# OpenSource SoftwareBrothers community - -- [Join the community](https://join.slack.com/t/adminbro/shared_invite/zt-czfb79t1-0U7pn_KCqd5Ts~lbJK0_RA) to get help and be inspired. -- subscribe to our [newsletter](http://opensource.softwarebrothers.co) - -# Installation + +# Theme Installation ```sh npm install --save-dev better-docs ``` + # Theme Usage ## With command line @@ -61,11 +112,175 @@ in your `jsdoc.json` file, set the template: } ``` + +# Template Options + +First of all, let me state that better-docs extends the `default` template. That is why default template parameters can be used in addition to the template options +provided by better-docs. + +To customize the better-docs pass `options` to `templates['better-docs']`. section in your `jsdoc configuration file`. + + +## Option List + +[BETA]: You must explicitly set the `search` option of the `default` template to `true` to enable search + +better-docs has several template options which are helpful in controlling the way documentation generation behaves: +- `name` - Text to be used as the "site title" in the header of the generated docs +- `logo` - The path to a logo to include in the top navigation header of the generated docs +- `title` - Text to be used as the `` in the `<head>` of the generated docs +- `css` - Path to a CSS file to be included in the generated docs. The path is relative to the `jsdoc.json` configuration file +- `trackingCode` - A string containing tracking code to include in the <head> of each page. It should include `<script>` tags if they are needed. +- `hideGenerator` - Boolean indicating if the 'Generated By' text should be excluded from the footer +- `navLinks` - An array of objects defining links to be included in the navigation dropdown + - `navLinks[...].label` - The link text + - `navLinks[...].href` - The link URL +- `head` - A string of HTML to be included in the `<head>` of each page +- `navButtons` - An array of objects defining buttons that should be added to the top nav of the generated docs + - `navButtons[...].label` - The link text + - `navButtons[...].href` - The link URL + - `navButtons[...].target` - The value of the `target` attribute (i.e. Given `navButtons[...].target: "_new"` the anchor will be `<a target="_new" />`) + - `navButtons[...].className` - A css class to include on the anchor +- `landing` - Boolean value. If true the landing page will be `docs.html`, otherwise it will be `index.html` +- `component` - An object to customize how the `@component` tag works. See [@component](#component-plugin-beta) documentation below + - `component.wrapper` - Add a wrapper component (such as a context provider) See [Wrapper component](#wrapper-component-only-react) documentation below + - `component.entry` - Add to the `.entry.js` file created by `@component`. This property is an array of strings. See + [Adding commands to bundle entry file](#adding-commands-to-bundle-entry-file) +- `useNestedCategories` - Used in conjunction with the @category plugin. Determines if the navigation should nest into `@category` -> `@subcategory` -> type. + defaults to false +- `isReactNative` - Used in conjunction with the @category plugin. When set to true the live preview is diabled since it won't work, which speeds up building + the docs and removes errors. Defaults to false +- `maxPropertyDepth` - Used to limit the depth that properties display when objects are defined. Defaults to 2. For example: +``` +//maxPropertyDepth is set to 2 +@property {Object} myObject +@property {Object} myObject.property1 +@property {Object} myObject.property1.depth3 +@property {Object} myObject.property1.depth4 +@property {Object} myObject.property2 +@property {Object} myObject.property2.anotherProp2 + +//Renders as +// myObject +// - property1 +// - depth3 +// - depth3.depth4 <--- maxPropertyDepth of 2 limits the nesting +// - property2 +// - anotherProp2 +``` +- `useNavFolding` - When true, you are able to fold the contents of the navigation - The folded state of each item persists across pages. Defaults to false +- `usePropertyFolding` - When true, you are able to fold nested object properties. Defaults to false. +- `foldingDefaultClosed` - Used When `useNavFolding` and/or `usePropertyFolding` are set to true. If this option is set to true the folding begins closed. +- `linkTagToNewTab` - When set to true, all `{@link http[s]://}` tags will automatically open in a new tab +- `subsectionsInSideNav` - An array of all the subsections to add to the **right** navigation. Defaults to []; Valid values are + - `augments` - Extends + - `requires` - Requires + - `classes` - Classes + - `interfaces` - Interfaces + - `mixins` - Mixins + - `namespaces` - Namespaces +- `includeTodoPage` - Boolean to determine if a "To Do" list page should be generated along with the documentation. This list will include all `@todo` tags defined +anywhere in the system and are categorized by the file in which they appear. + +<a name="using-template-options"></a> +## Using Template Options + +All options can be set in the `jsdoc.json` file. Below is a sample of the `jsdoc.json` configuration with settings for both `default` and `better-docs` templates: + +```json + { + "tags": { + "allowUnknownTags": ["category"] + }, + "source": { + "include": ["./src"], + "includePattern": ".js$", + "excludePattern": "(node_modules/|docs)" + }, + "plugins": [ + "plugins/markdown", + "jsdoc-mermaid", + "node_modules/better-docs/category" + ], + "opts": { + "encoding": "utf8", + "destination": "docs/", + "readme": "readme.md", + "recurse": true, + "verbose": true, + "tutorials": "./docs-src/tutorials", + "template": "better-docs" + }, + "templates": { + "cleverLinks": false, + "monospaceLinks": false, + "search": true, + "default": { + "staticFiles": { + "include": [ + "./docs-src/statics" + ] + } + }, + "better-docs": { + "name": "AdminBro Documentation", + "logo": "images/logo.png", + "title": "", //HTML title + "css": "style.css", + "trackingCode": "tracking-code-which-will-go-to-the-HEAD", + "hideGenerator": false, + "navLinks": [ + { + "label": "Github", + "href": "https://github.com/SoftwareBrothers/admin-bro" + },{ + "label": "Example Application", + "href": "https://admin-bro-example-app.herokuapp.com/admin" + } + ], + "navButtons": [ + { + "label": "Page 1", + "href": "/page1.html", + "target": "", + "className": "header-button" + },{ + "label": "External Page", + "href": "https://external.link", + "target": "_new", + "className": "header-button external-button" + } + ], + "landing": true, + "component": { + "wrapper": "./path/to/your/wrapper-component.js", + "entry": [ + "import 'babel-polyfill';", + "import 'bulma/css/bulma.css';" + ] + }, + "useNestedCategories": true, + "isReactNative": true, + "maxPropertyDepth": 10, + "useNavFolding": true, + "usePropertyFolding": true, + "foldingDefaultClosed": true, + "linkTagToNewTab":true, + "subsectionsInSideNav": ["augments","requires","classes","interfaces","mixins","namespaces"], + "includeTodoPage": true + } + } + } +... +``` + +<a name="typescript-support"></a> # TypeScript support better-docs has a plugin which allows you to generate documentation from your TypeScript codebase. -## Usage +<a name="typescript-support-installation"></a> +## Installation To use it update your `jsdoc.json` file @@ -85,6 +300,7 @@ To use it update your `jsdoc.json` file And now you can run your `jsdoc` command and parse TypeScript files. +<a name="typescript-support-how-it-works"></a> ## How it works? It performs 4 operations: @@ -100,6 +316,7 @@ Furthermore it: so they can be printed by JSDoc automatically. +<a name="typescript-support-examples"></a> ## Examples ``` @@ -214,12 +431,13 @@ class ClassName { constructor(color: string) {} } ``` - +<a name="category-plugin"></a> # @category plugin better-docs also allows you to nest your documentation into categories and subcategories in the sidebar menu. -## Usage +<a name="category-plugin-installation"></a> +## Installation To add a plugin - update `plugins` section in your `jsdoc.json` file: @@ -233,8 +451,10 @@ To add a plugin - update `plugins` section in your `jsdoc.json` file: ], ... ``` +<a name="category-plugin-usage"></a> +## Usage -and then you can use `@category` and/or `@subcategory` tag in your code: +Once installed, you can use `@category` and/or `@subcategory` tag in your code: ``` /** @@ -247,10 +467,13 @@ class YourClass { } ``` +<a name="component-plugin"></a> # @component plugin [BETA] -Better-docs also allows you to document your [React](https://reactjs.org/) and [Vue](https://vuejs.org/) components automatically. The only thing you have to do is to add a `@component` tag. It will take all props from your components and along with an `@example` tag - will generate a __live preview__. +Better-docs also allows you to document your [React](https://reactjs.org/) and [Vue](https://vuejs.org/) components automatically. The only thing you have to do is +to add a `@component` tag. It will take all props from your components and along with an `@example` tag - will generate a __live preview__. +<a name="component-installation"></a> ## Installation instructions Similar as before to add a plugin - you have to update the `plugins` section in your `jsdoc.json` file: @@ -266,7 +489,8 @@ Similar as before to add a plugin - you have to update the `plugins` section in ... ``` -Since __component__ plugin uses [parcel](https://parceljs.org) as a bundler you have to install it globally. To do this run: +When the `isReactNative` template option is not set to `true` (which disables live preview), the __component__ plugin will use [parcel](https://parceljs.org) as a +bundler so you have to install it globally. To do this run: ``` # if you use npm @@ -275,7 +499,7 @@ npm install -g parcel-bundler # or yarn yarn global add parcel-bundler ``` - +<a name="component-usage"></a> ## Usage To document components simply add `@component` in your JSDoc documentation: @@ -330,11 +554,13 @@ export default { In this case, props will be taken from `props` property. +<a name="component-preview"></a> ## Preview -`@component` plugin also modifies the behaviour of `@example` tag in a way that it can generate an actual __component preview__. What you have to do is to add an `@example` tag and return component from it: +`@component` plugin also modifies the behaviour of `@example` tag in a way that it can generate an actual __component preview__. What you have to do is to add +an `@example` tag and return component from it: -**React example:** +### React example: ```jsx /** @@ -352,7 +578,7 @@ const Documented = (props) => { } ``` -**Vue example 1:** +### Vue example 1: ```vue <script> @@ -368,7 +594,7 @@ export default { </script> ``` -**Vue example 2:** +### Vue example 2: ```vue <script> @@ -392,6 +618,8 @@ export default { </script> ``` +### Multiple Examples and Captions + You can put as many `@example` tags as you like in one component and "caption" each of them like this: ```javascript @@ -401,10 +629,11 @@ You can put as many `@example` tags as you like in one component and "caption" e * // your example here */ ``` - +<a name="component-mixing-components-in-preview"></a> ## Mixing components in preview -Also you can use multiple components which are documented with `@component` tag together. So lets say you have 2 components and in the second component you want to use the first one as a wrapper like this: +Also you can use multiple components which are documented with `@component` tag together. So lets say you have 2 components and in the second component you want to +use the first one as a wrapper like this: ```javascript // component-1.js @@ -429,12 +658,16 @@ const Component1 = (props) => {...} */ const Component2 = (props) => {...} ``` - +<a name="component-wrapper-component"></a> ## Wrapper component [only React] -Most probably your components will have to be run within a particular context, like within redux store provider or with custom CSS libraries. -You can simulate this by passing a `component.wrapper` in your `jsdoc.json`: -_(To read more about passing options - scroll down to __Customization__ section)_ +Most probably your components will have to be run within a particular context, like within redux store provider or with custom CSS libraries. Better Docs achieves this by +allowing you to add a wrapper component to your components. + +<a name="component-wrapper-component-installation"></a> +### Installation +You can simulate running in a context or redux store provider by passing a `component.wrapper` in your `jsdoc.json`: +_(To read more about passing options - See the [Template Options](#template-options) section)_ ```json // jsdoc.json @@ -452,6 +685,9 @@ _(To read more about passing options - scroll down to __Customization__ section) } ``` +<a name="component-wrapper-component-usage"></a> +### Usage + Wrapper component can look like this: ```javascript @@ -480,7 +716,7 @@ const Component = (props) => { export default Component ``` - +<a name="component-styling-react-examples"></a> ## Styling React examples Better-docs inserts all examples within an `iframe`. This results in the following styling options: @@ -520,10 +756,11 @@ const Component = (props) => { export default Component ``` - +<a name="component-adding-commands-to-bundle-entry-file"></a> ## Adding commands to bundle entry file -`@component` plugin creates an entry file: `.entry.js` in your _docs_ output folder. Sometimes you might want to add something to it. You can do this by passing: `component.entry` option, which is an array of strings. +`@component` plugin creates an entry file: `.entry.js` in your _docs_ output folder. Sometimes you might want to add something to it. You can do this by passing: +`component.entry` option, which is an array of strings. So let's say you want to add `babel-polyfill` and 'bulma.css' framework to your bundle. You can do it like this: @@ -545,85 +782,457 @@ So let's say you want to add `babel-polyfill` and 'bulma.css' framework to your } } ``` +<a name="lifecycle-plugin"></a> +# @lifecycle plugin -# Customization +better-docs creates the `@lifecycle` tag, which will label tagged methods and sort them into their own categories in the right navigation. -First of all, let me state that better-docs extends the `default` template. That is why default template parameters are also handled. +This plugin also implements the `@renders` tag so you can tag methods which cause the component to render. This tag simply adds a label to the method. -[BETA]: You must explicitly set the `search` option of the `default` template to `true` to enable search +**Note** This plugin requires the use of the `@component` plugin -To customize the better-docs pass `options` to `templates['better-docs']`. section in your `jsdoc configuration file`. +<a name="lifecycle-installation"></a> +## Installation -Example configuration file with settings for both `default` and `better-docs` templates: +To add the `@lifecycle` plugin - update `plugins` section in your `jsdoc.json` file: -```json -{ - "tags": { - "allowUnknownTags": ["category"] - }, - "source": { - "include": ["./src"], - "includePattern": ".js$", - "excludePattern": "(node_modules/|docs)" - }, - "plugins": [ - "plugins/markdown", - "jsdoc-mermaid", - "node_modules/better-docs/category" - ], - "opts": { - "encoding": "utf8", - "destination": "docs/", - "readme": "readme.md", - "recurse": true, - "verbose": true, - "tutorials": "./docs-src/tutorials", - "template": "better-docs" - }, - "templates": { - "cleverLinks": false, - "monospaceLinks": false, - "search": true, - "default": { - "staticFiles": { - "include": [ - "./docs-src/statics" - ] - } - }, - "better-docs": { - "name": "AdminBro Documentation", - "logo": "images/logo.png", - "title": "", // HTML title - "css": "style.css", - "trackingCode": "tracking-code-which-will-go-to-the-HEAD", - "hideGenerator": false, - "navLinks": [ - { - "label": "Github", - "href": "https://github.com/SoftwareBrothers/admin-bro" - }, - { - "label": "Example Application", - "href": "https://admin-bro-example-app.herokuapp.com/admin" - } - ] - } +``` +... +"tags": { + "allowUnknownTags": ["lifecycle", "renders"] //or true +}, +"plugins": [ + "node_modules/better-docs/lifecycle" +], +... +``` + +<a name="lifecycle-usage"></a> +## Usage +Once installed you can use `@lifecycle` and/or `@renders` tag in your code: + +``` +class YourClass { + .... + /** + * This is an example method + * + * @lifecycle + * @renders + */ + yourMethod(){ + + } +} +``` + +<a name="table-plugin"></a> +# @table plugin + +better-docs creates the `@table` tag, which is a logical separator of members for defining tables in a database. Using this tag will separate those members +tagged with `@table` into it's own section in the documentation, making the docs less cluttered and easier to read. You will define a table's schema as a +`@typedef` just as you do any other typedef, including the `@table` table tag to indicate that this typedef should be documented in the "Tables" section. +This table definition will be rendered the same as any other `@typedef`, except it will be grouped into a "Table" section with any other tables. + +<a name="table-installation"></a> +## Installation + +To add the `@table` plugin - update `plugins` section in your `jsdoc.json` file: + +``` +... +"tags": { + "allowUnknownTags": ["table"] //or true +}, +"plugins": [ + "node_modules/better-docs/table" +], +... +``` + +<a name="table-usage"></a> +## Usage + +Once installed you can use the `@table` tag in your code: + +``` + /** + * @summary Definition of YourTable + * + * This is an example typedef for defining the `YourTable` database table + * + * @typedef {object} YourTable + * @table + * + * @property {string} name='YourTable' The name of the table + * @property {object} indexes A list of all the indexes for this table + * @property {object} indexes.myIndex The myIndex index + * @property {object} indexes.myIndex.primary=false myIndex is not a primary key + * ... + * @property {object} fields All the fields in the `YourTable` database table + * @property {object} fields.id The `id` field + * @property {bool} fields.id.nullable=false The `id` field is not nullable + * ... + * + */ +``` +<a name="inheritable-plugin"></a> +# inheritable Plugin + +better-docs creates several tags that allow you to inhert documentation in a child class from it's parent making it quick and easy to reuse documentation +without the need to repeat it in child classes. This speeds up the documentation process, and keeps param definitions consistent. + +<a name="inheritable-installation"></a> +## Installation + +To add the `inheritable` plugin - update `plugins` section in your `jsdoc.json` file: + +``` +... +"tags": { + "allowUnknownTags": ["inheritDesc", "inheritSummary", "inheritParams"] //or true +}, +"plugins": [ + "node_modules/better-docs/inheritable" +], +... +``` + +<a name="inheritable-supported-tags"></a> +## Supported Tags +- `@inheritDesc <additional description>` - The `@inheritDesc` tag can either be used in conjunction with [@desc](https://jsdoc.app/tags-description.html), + or replace it entirely. Additionally, providing a value will append that value to the description from the inherited doclet. + +- `@inheritSummary <additional summary>` - The `@inheritSummary` tag can either be used in conjunction with [@summary](https://jsdoc.app/tags-summary.html), + or replace it entirely to inherit the summary from the parent doclet. Additionally, providing a value will append that value to the summary from the inherited + doclet. + +- `@inheritParams` - The `@inheritParams` tag is used in conjunction with the [@param](https://jsdoc.app/tags-param.html) tag. It can be used to inherit params + from the parent doclet, and/or modify a param inherited from the parent. + +- `@inheritProperties` - The `@inheritProperties` tag is used in conjunction with the [@property](https://jsdoc.app/tags-property.html) tag. It can be used to + inherit properties from the parent doclet, and/or modify a property inherited from the parent. This tag behaves exactly like the `@inheritParams`, but is used + to inherit `@property` tags instead of `@param` tags. + +<a name="inheritable-usage"></a> +## Usage + +<a name="inheritable-using-with-standard-tags"></a> +### Using with standard tags + +These tags can replace their standard `jsdoc` counterparts, or be used to augment them (i.e. within the same docblock you can replace `@summary` with +`@inheritSummary`, or you can use them both together). When the `inheritable` tags are used in conjunction with their standard `jsdoc` counterparts, the generated +documentation will be positional. This means that where you place the `inheritable` tag relative to it's `jsdoc` counterpart will determine where the rendered +documentation will be placed. For instance, when using both the `@summary` and `@inheritSummary` tags, if the `@summary` tag comes before the `@inheritSummary`, +then the **inherited** documentation will be placed **after** the `@summary`, and vice versa. See Examples, especially 1 & 2. + +<a name="inheritable-value-inheritance"></a> +### Value Inheritance + +These tags follow the same logic of inheritance as a method or property of a class, where the value of the tag will be inherited from the first parent in the +inheritance tree which defines that value. For instance, using the `@inheritDesc` tag on a method will first look to it's immediate parent(s) for a method of +the same name, and inherit it's `@desc` **AND** `@inheritDesc` values. If the immediate parent does not have a method with the same name (or if that method does +not contain a `@desc` or `@inheritDesc` value), then it will look to the parent's parent to find a value, and so on, until either a value is found, or the top +of the tree is reached. If the **child** class's parent implements the `@inheritDesc` tag then the value for the **child** class will be inherited from it's +**grandparent** including any additions the **parent** class made to the value it inherited from it's parent (the child's **grandparent**), and so on. See Examples. + +<a name="inheritable-params"></a> +### Params + +When using the `@inheritParams` or `@inheritProperties` tag, in addition to inheriting params from the parent you can use it in conjunction with the `@param`/`@property` tag +to add to or overwrite the params defined on the parent. When a param on the **child** class has the same name as a param on the **parent** class, the **childs** param will +be used. When a param on the **child** class has a different name than a param on the **parent** class, **BOTH** params will be used. See Examples, especially Example 5. + +<a name="inheritable-examples"></a> +## Examples + +### Example 1: + +To demonstrate the order of rendered documentation when using `inheritance` tags AND standard `jsdoc` tags, given the following class declarations: + +``` +class Parent{ + /** + * @summary This is the parent myMethod summary. + */ + myMethod(){ + ... + } +} + +//FirstChild defines it's own summary, and THEN inherits the summary from Parent +class FirstChild extends Parent{ + /** + * @summary This is the first child's myMethod summary. + * @inheritSummary + */ + myMethod(){ + ... + } +} + +//SecondChild inherits the entire summary from Parent (via FirstChild), and THEN defines it's own summary +class SecondChild extends FirstChild{ + /** + * @inheritSummary + * @summary This is the second child's myMethod summary. + */ + myMethod(){ + ... + } +} +``` + +- **The `Parent` class summary will be:<br>** + + `This is the parent myMethod summary.`<br><br> + +- **The `FirstChild` class summary will be:<br>** + + `This is the first child's myMethod summary.`<br> + `This is the parent myMethod summary!`<br><br> + +- **The `SecondChild` class summary will be:<br>** + + `This is the parent myMethod summary.`<br> + `This is the second child's myMethod summary.`<br> + +### Example 2: + +To demonstrate using `inheritance` tags with a value AND standard `jsdoc` tags, given the following class declarations: + +``` +class Parent{ + /** + * @desc This is the parent myMethod description. + */ + myMethod(){ + ... + } +} + +//FirstChild defines it's own description, and THEN inherits the description from Parent and adds to it +class FirstChild extends Parent{ + /** + * @desc This is the first child's myMethod description. + * @inheritDesc Here is some additional description text from FirstChild + */ + myMethod(){ + ... + } +} + +//SecondChild inherits the description from Parent (via FirstChild) and the extended description from +//FirstChild, and THEN defines it's own desctiption +class SecondChild extends FirstChild{ + /** + * @inheritDesc + * @desc Here is some additional description text from SecondChild + */ + myMethod(){ + ... + } +} +``` + +- **The `Parent` class description will be:<br>** + + `This is the parent myMethod description.`<br><br> + +- **The `FirstChild` class description will be:<br>** + + `This is the first child's myMethod description.`<br> + `This is the parent myMethod description.`<br> + `Here is some additional description text from FirstChild`<br><br> + +- **The `SecondChild` class summary will be:<br>** + + `This is the first child's myMethod description.`<br> + `This is the parent myMethod description.`<br> + `Here is some additional description text from FirstChild`<br> + `Here is some additional description text from SecondChild`<br><br> + +### Example 3: + +To demonstrate using `inheritable` tags WITHOUT a value, given the following class declarations: + +``` +class Parent{ + /** + * @desc This is the parent myMethod description. + */ + myMethod(){ + ... + } +} + +//FirstChild will inherit it's description from Parent +//Unlike in example 4, myMethod WILL have a description +class FirstChild extends Parent{ + /** @inheritDesc */ + myMethod(){ + ... + } +} + +//SecondChild inherits the description from Parent (via FirstChild), and adds to it +class SecondChild extends FirstChild{ + /** + * @inheritDesc Here is a description using the "inheritDesc" tag on SecondChild + */ + myMethod(){ + ... + } +} +``` + +- **The `Parent` class description will be:<br>** + + `This is the parent myMethod description.`<br><br> + +- **The `FirstChild` class description will be:<br>** + + `This is the parent myMethod description.`<br><br> + +- **The `SecondChild` class summary will be:<br>** + + `This is the parent myMethod description.`<br> + `Here is a description using the "inheritDesc" tag on SecondChild`<br><br> + +### Example 4: + +To demonstrate inheritance when a parent method has no description, given the following class declarations: + +``` +class Parent{ + /** + * @desc This is the parent myMethod description. + */ + myMethod(){ + ... + } +} + +//FirstChild does not implement a description, so it will be skipped when searching for a value +class FirstChild extends Parent{ + + myMethod(){ + ... + } +} + +//SecondChild inherits the description directly from Parent +class SecondChild extends FirstChild{ + /** + * @inheritDesc + */ + myMethod(){ + ... + } +} +``` + +- **The `Parent` class description will be:<br>** + + `This is the parent myMethod description.`<br><br> + +- **The `FirstChild` class will not have a description** + +- **The `SecondChild` class summary will be:<br>** + + `This is the parent myMethod description.`<br> + +### Example 5: + +To demonstrate the usage of the `@inheritParams` tag, given the following class declarations: + +``` +class Person{ + name; + + /** + * @param {string} name This is the person's name + */ + update(name){ + this.name=name; + ... + } +} + +//PersonWithAddress inherits the "name" param from Person, and adds the "address" param after +class PersonWithAddress extends Person{ + address; + /** + * @inheritParams + * @param {string} address This is the person's address + */ + update(name, address){ + this.address = address; + Person.prototype.update(name); + ... } } + +//Notice "phone" is the FIRST parameter in update(), and @inheritParams is placed AFTER it in the docblock +//Also notice that we have updated the description on the "name" param +//PersonWithAddressAndPhone adds the "phone" param, updates the "name" description and THEN inherits the "address" param from Person (via PersonWithAddress) +class PersonWithAddressAndPhone extends PersonWithAddress{ + phone; + /** + * @param {string} phone This is the person's phone number + * @param {string} name This is an updated description for the person's name + * @inheritParams + */ + update(phone, name, address){ + this.phone = phone; + PersonWithAddress.prototype.update(name, address); + ... + } +} +``` + +- **The `Person` class param declaration will effectively be:<br>** + +``` +/** + * @param {string} name This is the person's name + */ +``` + +- **The `PersonWithAddress` class param declaration will effectively be:<br>** + +``` +/** + * @param {string} name This is the person's name + * @param {string} address This is the person's address + */ ``` -## Extras +- **The `PersonWithAddressAndPhone` class param declaration will effectively be:<br>** -### typedef(import(...)) +``` +/** + * @param {string} phone This is the person's phone number + * @param {string} name This is an updated description for the person's name + * @param {string} address This is the person's address + */ +``` + +<a name="typedef-import-plugin"></a> +# typedef(import(...)) Plugin -better-docs also has one extra plugin for handling typescript'like types imports like (it has to be one-liner): +better-docs also has one extra plugin for handling typescript-like imports (it has to be one-liner) such as: ``` /** @typedef {import('./some-other-file').ExportedType} ExportedType */ ``` -It simply removes that from the code so JSDoc wont throw an error. In order to use it add this plugin to your plugins section: +It simply removes that from the code so JSDoc won't throw an error. + +<a name="typedef-import-installation"></a> +## Installation + +In order to use it add this plugin to your plugins section: ``` "plugins": [ @@ -631,6 +1240,7 @@ It simply removes that from the code so JSDoc wont throw an error. In order to u ], ``` +<a name="setting-up-for-development"></a> # Setting up for the development If you want to change the theme locally follow the steps: @@ -664,8 +1274,10 @@ yarn It supports following EVN variables: -* `DOCS_COMMAND` - a command in your root repo which you use to generate documentation: i.e. `DOCS_COMMAND='jsdoc -c jsdoc.json'` or `npm run docs` if you have `docs` command defined in `package.json` file -* `DOCS_OUTPUT` - where your documentation is generated. It should point to the same folder your jsdoc `--destination` conf. But make sure that it is relative to the path where you cloned `better-docs`. +* `DOCS_COMMAND` - a command in your root repo which you use to generate documentation: i.e. `DOCS_COMMAND='jsdoc -c jsdoc.json'` or `npm run docs` if you have + `docs` command defined in `package.json` file +* `DOCS_OUTPUT` - where your documentation is generated. It should point to the same folder your jsdoc `--destination` conf. But make sure that it is relative to + the path where you cloned `better-docs`. * `DOCS` - list of folders from your original repo what you want to watch for changes. Separated by comma. ``` @@ -682,6 +1294,7 @@ If you want to see how to setup jsdoc in your project - take a look at these bri - JSDoc - https://www.youtube.com/watch?v=Yl6WARA3IhQ - better-docs and Mermaid: https://www.youtube.com/watch?v=UBMYogTzsBk +<a name="license"></a> # License better-docs is Copyright © 2019 SoftwareBrothers.co. It is free software and may be redistributed under the terms specified in the [LICENSE](LICENSE) file - MIT. diff --git a/bundler.js b/bundler.js index 1074491f..62b8f01e 100644 --- a/bundler.js +++ b/bundler.js @@ -2,6 +2,7 @@ const fs = require('fs') const execSync = require('child_process').execSync const path = require('path')[process.platform === 'win32' ? 'win32' : 'posix'] +var env = require('jsdoc/env'); const VUE_WRAPPER = process.env.IS_DEV ? 'src/vue-wrapper.js' : 'lib/vue-wrapper.js' const REACT_WRAPPER = process.env.IS_DEV ? 'src/react-wrapper.jsx' : 'lib/react-wrapper.js' @@ -9,7 +10,7 @@ const pathCrossEnv = (path) => process.platform !== 'win32' ? path : path.replace(/\\/g, '/') module.exports = function bundle (Components, out, config) { - if (!Components.length) { + if (!Components.length || env.conf.templates.betterDocs.isReactNative) { return } const vueComponents = Components.filter(c => c.component.type === 'vue') diff --git a/gulpfile.js b/gulpfile.js index cc876959..814e2fe3 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,64 +1,63 @@ -const DOCS_COMMAND = process.env.DOCS_COMMAND || 'yarn docs' -const DOCS_OUTPUT = process.env.DOCS_OUTPUT || '../docs' +const DOCS_COMMAND = process.env.DOCS_COMMAND || 'yarn docs'; +const DOCS_OUTPUT = process.env.DOCS_OUTPUT || '../docs'; -const gulp = require('gulp') -const sass = require('gulp-sass') -const autoprefixer = require('gulp-autoprefixer') -const run = require('gulp-run') -const babel = require('gulp-babel') -const uglify = require('gulp-uglify') -const rename = require('gulp-rename') -const concat = require('gulp-concat') -const path = require('path') -const browserSync = require('browser-sync').create() +const gulp = require('gulp'); +const sass = require('gulp-sass')(require('sass')); +const autoprefixer = require('gulp-autoprefixer'); +const babel = require('gulp-babel'); +const uglify = require('gulp-uglify'); +const rename = require('gulp-rename'); +const concat = require('gulp-concat'); +const path = require('path'); +const browserSync = require('browser-sync').create(); +const exec = require('child_process').exec; -gulp.task('sass', () => { +gulp.task('sass', () => gulp.src('styles/app.sass') .pipe(sass({ outputStyle: 'compressed', })) .pipe(autoprefixer()) - .pipe(rename({ suffix: '.min' })) + .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('static/styles')) -}) +); -gulp.task('js', () => { - gulp.src(path.join('scripts/', '*.js'), { base: 'app' }) +gulp.task('js', () => + gulp.src(path.join('scripts/', '*.js'), {base: 'app'}) .pipe(concat('app.js')) .pipe(babel({ presets: ['@babel/env'], })) .pipe(uglify()) - .pipe(rename({ suffix: '.min' })) + .pipe(rename({suffix: '.min'})) .pipe(gulp.dest('static/scripts')) -}) +); -gulp.task('docs', function() { - return run(`cd .. && ${DOCS_COMMAND}`).exec() -}) +gulp.task('docs', (cb) => exec(`cd .. && ${DOCS_COMMAND}`, cb)); -gulp.task('watch', () => { - gulp.watch('styles/**/*.sass', ['sass', 'docs']) - gulp.watch('scripts/**/*.js', ['js', 'docs']) - gulp.watch('tmpl/**/*.tmpl', ['docs']) - gulp.watch('publish.js', ['docs']) +gulp.task('watch', function() { + gulp.watch('styles/**/*.sass', gulp.series(['sass', 'docs'])); + gulp.watch('scripts/**/*.js', gulp.series(['js', 'docs'])); + gulp.watch('tmpl/**/*.tmpl', gulp.series(['docs'])); + gulp.watch('publish.js', gulp.series(['docs'])); if (process.env.DOCS) { const array = [ ...process.env.DOCS.split(','), ...process.env.DOCS.split(',').map(src => '!' + src.replace('**/*', 'node_modules/**/*')) - ] - console.log(array) - gulp.watch(array, ['docs']) + ]; + console.log(array); + gulp.watch(array, gulp.series(['docs'])); } -}) +}); gulp.task('sync', () => { browserSync.init({ server: { baseDir: DOCS_OUTPUT } - }) - gulp.watch(`${DOCS_OUTPUT}/*`).on('change', browserSync.reload) -}) + }); -gulp.task('default', ['sass', 'js', 'docs', 'watch', 'sync']) + return gulp.watch(`${DOCS_OUTPUT}/*`, gulp.series([browserSync.reload])); +}); + +gulp.task('default', gulp.series(['sass', 'js', 'docs', gulp.parallel(['watch', 'sync'])])); diff --git a/inheritable.js b/inheritable.js new file mode 100644 index 00000000..190b9145 --- /dev/null +++ b/inheritable.js @@ -0,0 +1,475 @@ +exports.defineTags = function (dictionary) { + dictionary.defineTag('inheritDesc', { + canHaveType: false, + canHaveName: false, + isNamespace: false, + mustHaveValue: false, + mustNotHaveDescription: false, + mustNotHaveValue:false, + onTagged: function(doclet, tag) { + if(!doclet.inheritable || !doclet.inheritable.types || !doclet.inheritable.types.desc){ + doclet.inheritable = doclet.inheritable ? doclet.inheritable : {}; + doclet.inheritable.types = doclet.inheritable.types ? doclet.inheritable.types : {}; + + doclet.inheritable.types.desc={ + position: doclet.description ? 'append' : 'prepend', + append: tag.text ? tag.text : '' + }; + } + } + }); + + dictionary.defineTag('inheritSummary', { + canHaveType: false, + canHaveName: false, + isNamespace: false, + mustHaveValue: false, + mustNotHaveDescription: false, + mustNotHaveValue:false, + onTagged: function(doclet, tag) { + if(!doclet.inheritable || !doclet.inheritable.types || !doclet.inheritable.types.summary){ + doclet.inheritable = doclet.inheritable ? doclet.inheritable : {}; + doclet.inheritable.types = doclet.inheritable.types ? doclet.inheritable.types : {}; + + doclet.inheritable.types.summary={ + position: doclet.summary ? 'append' : 'prepend', + append: tag.text ? tag.text : '', + }; + } + } + }); + + dictionary.defineTag('inheritParams', { + canHaveType: false, + canHaveName: false, + isNamespace: false, + mustHaveValue: false, + mustNotHaveDescription: false, + mustNotHaveValue:false, + onTagged: function(doclet, tag) { + if(!doclet.inheritable || !doclet.inheritable.types || !doclet.inheritable.types.params){ + doclet.inheritable = doclet.inheritable ? doclet.inheritable : {}; + doclet.inheritable.types = doclet.inheritable.types ? doclet.inheritable.types : {}; + + doclet.inheritable.types.params=doclet.params && doclet.params.length>0 ? 'append' : 'prepend'; + } + } + }); + + dictionary.defineTag('inheritProperties', { + canHaveType: false, + canHaveName: false, + isNamespace: false, + mustHaveValue: false, + mustNotHaveDescription: false, + mustNotHaveValue:false, + onTagged: function(doclet, tag) { + if(!doclet.inheritable || !doclet.inheritable.types || !doclet.inheritable.types.properties){ + doclet.inheritable = doclet.inheritable ? doclet.inheritable : {}; + doclet.inheritable.types = doclet.inheritable.types ? doclet.inheritable.types : {}; + + doclet.inheritable.types.properties=doclet.properties && doclet.properties.length>0 ? 'append' : 'prepend'; + } + } + }); +}; + +exports.handlers = { + parseComplete: function(e){ + let all = {}; + let byMemberof = {}; + let toProcess = []; + let count=0; + let postProcess={params: {}}; + e.doclets.forEach((doclet) => { + + let name = getInheritableName(doclet); + //let memberName = getDocletName(doclet); + + all[name] = doclet; + //let memberof='none'; + //let parent = getParent(doclet.longname, e.doclets); + // + //if(parent){ + // memberof = getInheritableNameByLongname(e.doclets, parent.longname); + // //memberof = getInheritableNameByLongname(e.doclets, doclet.memberof); + //} + //byMemberof[memberof] = byMemberof[memberof] || {}; + //byMemberof[memberof][memberName] = doclet; + //let isInheritable = false; + // + //if(doclet.inheritable){ + // let keys = Object.keys(doclet.inheritable.types); + // for(var i=0;i<keys.length; i++){ + // if(doclet.inheritable.types[keys[i]]){ + // isInheritable=true; + // break; + // } + // } + //} + // + //if(isInheritable && memberof != 'none'){ + // if(doclet.comment.indexOf('@summary') < 0 && doclet.inheritable.types.summary){ + // doclet.summary = ''; + // } + // toProcess.unshift(doclet); + //} + }); + + e.doclets.forEach((doclet) => { + let memberName = getDocletName(doclet); + let memberof='none'; + let parent = getParent(doclet.longname, all); + + if(parent){ + memberof = getInheritableNameByLongname(e.doclets, parent.longname); + //memberof = getInheritableNameByLongname(e.doclets, doclet.memberof); + } + byMemberof[memberof] = byMemberof[memberof] || {}; + byMemberof[memberof][memberName] = doclet; + + let isInheritable = false; + + if(doclet.inheritable){ + let keys = Object.keys(doclet.inheritable.types); + for(var i=0;i<keys.length; i++){ + if(doclet.inheritable.types[keys[i]]){ + isInheritable=true; + break; + } + } + } + + if(isInheritable && memberof != 'none'){ + if(doclet.comment.indexOf('@summary') < 0 && doclet.inheritable.types.summary){ + doclet.summary = ''; + } + toProcess.unshift(doclet); + } + }); + + let processed = []; + toProcess.forEach(inherited => { + + let description = ''; + let summary = ''; + let params = []; + let properties = []; + //let inheritedMemberofName = getInheritableNameByLongname(e.doclets, inherited.memberof); + //let inheritedName = getInheritableName(inherited); + let inheritedMemberName = getDocletName(inherited); + let inheritedParent = getParent(inherited.longname, all); + let parents = []; + parents = inheritedParent ? [inheritedParent] : []; + let orderedParents = []; + + while(parents.length > 0){ + let parent = parents.shift(); + + if(parent.augments && parent.augments.length > 0){ + for(var j=0; j<parent.augments.length; j++){ + let augmentMemberofName = getInheritableNameByLongname(e.doclets, parent.augments[j]); + augment = all.hasOwnProperty(augmentMemberofName) ? all[augmentMemberofName] : null; + + if(augment){ + orderedParents.unshift(augment); + parents.unshift(augment); + } + } + } + } + if(inheritedParent){ + orderedParents.push(inheritedParent); + } + + while(orderedParents.length > 0){ + let parent = orderedParents.pop(); + + if(parent.augments && parent.augments.length > 0){ + for(var x=0; x<parent.augments.length; x++){ + let augmentMemberofName = getInheritableNameByLongname(e.doclets, parent.augments[x]); + augment = all.hasOwnProperty(augmentMemberofName) ? all[augmentMemberofName] : null; + if(augment){ + let augmentName = getInheritableName(augment); + //We have the augment class doclet + if(byMemberof.hasOwnProperty(augmentName) && byMemberof[augmentName].hasOwnProperty(inheritedMemberName)){ + let inheritFrom = byMemberof[augmentName][inheritedMemberName]; + + let inheritFromName = getInheritableName(inheritFrom); + + if(processed.indexOf(inheritFromName) < 0){ + processed.push(inheritFromName); + if(inheritFrom.description){ + description += inheritFrom.description+"\n"; + } + if(inheritFrom.summary){ + summary += inheritFrom.summary+"\n"; + } + + if(inheritFrom.params && inheritFrom.params.length > 0){ + params = mergeProps(params, inheritFrom.params, inherited.inheritable.types.params == 'append'); + } + + if(inheritFrom.properties && inheritFrom.properties.length > 0){ + properties = mergeProps(properties, inheritFrom.properties, inherited.inheritable.types.properties == 'append'); + } + } + } + } + } + } + } + let updateDoclet = null; + if(!isDocletConstructor(inherited)){ + updateDoclet = inherited; + }else{ + updateDoclet = inheritedParent; + } + + //We should have a description from the closest augments, if one exists + if(inherited.inheritable.types.desc && (description || inherited.inheritable.types.desc.append)){ + description = stripOuterParagraph(description); + inherited.inheritable.types.desc.append = stripOuterParagraph(inherited.inheritable.types.desc.append); + inherited.description = stripOuterParagraph(inherited.description); + if(inherited.inheritable.types.desc.position == 'append'){ + updateDoclet.description = "<p>"+(inherited.description ? inherited.description+"<br />" : '')+ + description+ + (inherited.inheritable.types.desc.append ? "<br />"+inherited.inheritable.types.desc.append : '')+"</p>"; + }else{ + updateDoclet.description = "<p>"+description+ + (inherited.inheritable.types.desc.append ? "<br />"+inherited.inheritable.types.desc.append : '')+ + (inherited.description ? "<br />"+inherited.description : '')+"</p>"; + } + } + + if(inherited.inheritable.types.summary && (summary || inherited.inheritable.types.summary.append)){ + summary = stripOuterParagraph(summary); + inherited.summary = stripOuterParagraph(inherited.summary); + inherited.inheritable.types.summary.append = stripOuterParagraph(inherited.inheritable.types.summary.append); + if(inherited.inheritable.types.summary.position == 'append'){ + updateDoclet.summary = "<p>"+(inherited.summary ? inherited.summary+"<br>" : '')+ + summary+ + (inherited.inheritable.types.summary.append ? "<br>"+inherited.inheritable.types.summary.append : '')+"</p>"; + }else{ + updateDoclet.summary = "<p>"+summary+ + (inherited.inheritable.types.summary.append ? "<br>"+inherited.inheritable.types.summary.append : '')+ + (inherited.summary ? "<br>"+inherited.summary : '')+"</p>"; + } + } + + + if(inherited.inheritable.types.params && params){ + updateDoclet.params = mergeProps(params, updateDoclet.params, inherited.inheritable.types.params == 'append'); + } + + if(inherited.inheritable.types.properties && properties){ + updateDoclet.properties = mergeProps(properties, updateDoclet.properties, inherited.inheritable.types.properties == 'append'); + } + }); + + + } +}; + +function stripOuterParagraph(string){ + string = string ? string : ''; + string = string.trim(); + if(string.substring(0, 3) == '<p>'){ + string = string.substring(3); + } + if(string.substring(string.length-4) == '</p>'){ + string = string.substring(0, string.length-4); + } + return string; +} + +function mergeProps(first, second, prepend){ + second = second ? second : []; + first = first ? first : []; + + if(first.length == 0 && second.length == 0){ + //both are empty + return []; + }else if(first.length == 0 && second.length > 0){ + //first is empty, second is not + return second; + }else if(first.length > 0 && second.length == 0){ + //second is empty, first is not + return first; + }else{ + //first and second have elements + let merged=[]; + //put any elements in first that are not in second into merged + //leave second alone, and we will append/prepend afterwards + //this way we can keep the params grouped by where they are defined + for(var x=0; x<first.length; x++){ + let index = second.findIndex((elem) => { + return elem.name == first[x].name; + }); + if(index < 0){ + merged.push(first[x]); + } + } + if(second.length > 0){ + if(!prepend){ + merged = [ + ...merged, + ...second + ]; + }else{ + merged = [ + ...second, + ...merged, + ]; + } + } + return merged; + } +} + +let inheritableNameMap={}; +function getInheritableName(doclet){ + let name; + if(inheritableNameMap[doclet.longname]){ + return inheritableNameMap[doclet.longname]; + }else{ + name = doclet.inheritable && doclet.inheritable.name ? doclet.inheritable.name : null; + let update = false; + if(!name){ + if(doclet.meta && doclet.meta.code && doclet.meta.code.id){ + name = doclet.meta.code.id; + update=!!doclet.inheritable; + }else{ + if(doclet.longname){ + name = doclet.longname; + update=!!doclet.inheritable; + }else{ + //doclet doesn't have a longname, so we'll try to use the ID + + } + } + } + if(name){ + if(update){ + doclet.inheritable.name = name; + }else{ + inheritableNameMap[doclet.longname] = name; + } + } + } + return name; +} + +let idMap = {}; +function getInheritableNameByLongname(list, searchName){ + let listKeys = Object.keys(list); + if(!listKeys || listKeys.length == 0 || !searchName){ + return null; + } + if(idMap.hasOwnProperty(searchName)){ + return idMap[searchName]; + } + + if(list.hasOwnProperty(searchName)){ + idMap[searchName] = getInheritableName(list[searchName]); + }else{ + let index = listKeys.findIndex(search => { + return list[search].longname == searchName; + }); + if(index >= 0){ + idMap[searchName] = getInheritableName(list[listKeys[index]]); + }else{ + //return null; + idMap[searchName] = null; + } + } + + return idMap[searchName]; +} + +let docletNameMap = {}; +function getDocletName(doclet){ + if(!doclet){ + return null; + } + if(docletNameMap[doclet.longname]){ + return docletNameMap[doclet.longname]; + }else{ + let name = doclet.name ? doclet.name : null; + if(isDocletConstructor(doclet)){ + name = 'constructor'; + } + + let theName = (doclet.kind ? doclet.kind+'.' : '')+ + (doclet.scope ? doclet.scope+'.' : '')+ + (name ? name : ''); + docletNameMap[doclet.longname] = theName; + return theName; + } +} + +function isDocletConstructor(doclet){ + if(doclet.kind == 'class' && doclet.meta && doclet.meta.code && doclet.meta.code.type == 'MethodDefinition'){ + return true; + } + return false; +} + +let parentMap={}; +function getParent(longname, all){ + let parent = null; + if(parentMap.hasOwnProperty(longname)){ + return parentMap[longname]; + }else{ + let docletName = getInheritableNameByLongname(all, longname); + let doclet = null; + let allKeys; + if(docletName){ + if(all.hasOwnProperty(docletName) && all[docletName]){ + doclet = all[docletName]; + }else{ + allKeys = Object.keys(all); + //all is not indexed by the doclet names. + let keyIndex = allKeys.findIndex(key => { + return getInheritableName(all[key]) == docletName; + }); + if(keyIndex >= 0){ + doclet = all[allKeys[keyIndex]] ? all[allKeys[keyIndex]] : null; + } + } + } + + if(doclet){ + + if(isDocletConstructor(doclet)){ + //This is a constructor, so the parent (memberof) is not going to be the class like other methods + //So we need to figure out what the parent class of this constructor is. + allKeys = allKeys ? allKeys : Object.keys(all); + let keyIndex = allKeys.findIndex(key => { + let doc = all[key]; + return doc.longname != doclet.longname && doc.memberof == doclet.memberof && doc.name == doclet.name && doc.kind == 'class'; + }); + if(keyIndex >= 0){ + parent = all[allKeys[keyIndex]]; + } + }else{ + let inheritedMemberofName = getInheritableNameByLongname(all, doclet.memberof); + parent = all[inheritedMemberofName] ? all[inheritedMemberofName] : null; + if(!parent){ + if(inheritedMemberofName){ + let keyIndex = allKeys.findIndex(key => { + return getInheritableName(all[key]) == inheritedMemberofName; + }); + if(keyIndex >= 0){ + parent = all[allKeys[keyIndex]] ? all[allKeys[keyIndex]] : null; + } + } + } + } + } + } + if(parent){ + parentMap[longname] = parent; + } + return parent; +} \ No newline at end of file diff --git a/lifecycle.js b/lifecycle.js new file mode 100644 index 00000000..03d7c6de --- /dev/null +++ b/lifecycle.js @@ -0,0 +1,35 @@ +exports.defineTags = function (dictionary) { + dictionary.defineTag('lifecycle', { + mustHaveValue: false, + mustNotHaveDescription: true, + canHaveType: false, + canHaveName: true, + onTagged: function(doclet, tag) { + doclet.lifecycle=true; + + doclet.tags = (doclet.tags || []); + doclet.tags.push({ + title: 'React Lifecycle', + originalTitle: 'React Lifecycle', + text: '', + }); + } + }); + + dictionary.defineTag('renders', { + mustHaveValue: false, + mustNotHaveDescription: true, + canHaveType: false, + canHaveName: true, + onTagged: function(doclet, tag) { + doclet.renders=true; + + doclet.tags = (doclet.tags || []); + doclet.tags.push({ + title: 'Causes Render', + originalTitle: 'Causes Render', + text: '', + }); + } + }); +}; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 53ca5fbc..2286e900 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5098,52 +5098,6 @@ } } }, - "cross-env": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.2.tgz", - "integrity": "sha512-KZP/bMEOJEDCkDQAyRhu3RL2ZO/SUVrxQVI0G3YEQ+OLbRA3c6zgixe8Mq8a/z7+HKlNEjo8oiLUs8iRijY2Rw==", - "requires": { - "cross-spawn": "^7.0.1" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -9344,7 +9298,8 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true }, "isobject": { "version": "3.0.1", diff --git a/publish.js b/publish.js index 2ca79b10..40c4de39 100644 --- a/publish.js +++ b/publish.js @@ -6,6 +6,7 @@ var fs = require('jsdoc/fs') var helper = require('jsdoc/util/templateHelper') var logger = require('jsdoc/util/logger') var path = require('jsdoc/path') +var inline = require('jsdoc/tag/inline'); var taffy = require('taffydb').taffy var template = require('jsdoc/template') var util = require('util') @@ -15,7 +16,179 @@ var bundler = require('./bundler') const markdownParser = getParser() var htmlsafe = helper.htmlsafe -var linkto = helper.linkto +var linkto = helper.linkto; +if (env.conf.templates["better-docs"].linkTagToNewTab) { + //Only override these functions if the configurations request it. + + //create a regex that will extract the parts of the link tag + const linkRegex = new RegExp(/^.*\{@link\s?([^\s]+)[\s+]?(.+)?.*\}.*/); + + //Parse the tag into it's constituant parts + const parseLink = (longname) => { + let matches = linkRegex.exec(longname); + let text = longname; + let link = longname; + let external = false; + //will only operate on @link tags + if(matches && matches.length > 1){ + text = matches[1].trim(); + link = matches[1].trim(); + + //UNescape URL's that got escaped (inside a <code>?) and now look like http(s):\\/\\/ + if((/(http|ftp)s?:/).test(longname)){ + external = true; + link = link.replace(text, text.replace(/\\\\\//ig, '/')); + } + if(matches[2] && matches[2].trim()){ + text = matches[2].trim(); + } + } + return { + text: text, + link: link, + external: external, + inline: inline.isInlineTag(longname) + }; + }; + const origLinkto = helper.linkto; + //Override this function so we can automatically open inline link tags to URL's in a new tab + linkto = helper.linkto = function(longname, linkText, cssClass, fragmentId){ + let parsed = parseLink(longname); + + if(parsed.inline && parsed.external){ + //This is an external link, so let's add a target to the anchor so it will open in another window + return util.format('<a target="_new" href="%s"%s>%s</a>', + encodeURI(parsed.link), + cssClass ? util.format(' class="%s"', cssClass) : '', + htmlsafe(parsed.text) + ); + }else{ + if(!linkText && parsed.text && parsed.text != longname){ + linkText = parsed.text; + } + let link = longname; + if(parsed.link && parsed.link != longname){ + link = parsed.link; + } + let rtn = origLinkto(link, linkText, cssClass, fragmentId); + + let skip = [ + 'null', + 'object', + 'string', + 'bool', + 'boolean', + 'function', + 'int', + 'float', + 'number', + 'undefined', + 'promise', + '*', + 'array', + 'uint8array', + 'arraybufferview', + 'arraybuffer', + 'date', + 'enum', + 'error', + ]; + + if(skip.indexOf(longname.toLowerCase()) < 0 && rtn.indexOf('<a') < 0){ + let found=false; + let types = []; + if(longname.indexOf('.<') >= 0){ + let matches = (new RegExp(/^(.*).<\(?(.*)[\)?]>/)).exec(longname); + if(matches && matches.length >= 1){ + if(matches.length >= 2){ + types = matches[2].split('|'); + Object.keys(types).forEach(key => types[key] = types[key].trim()); + } + if(matches[1].trim()){ + types.unshift(matches[1].trim()); + } + } + } + if(types.length <= 0){ + skip.forEach(type => { + if('Array.<'+type+'>' == longname){ + found=true; + } + }); + if(!found){ + console.log('Invalid link to '+longname, linkText); + } + }else{ + types.forEach(type => { + if(skip.indexOf(type.toLowerCase()) < 0){ + console.log('Invalid link to '+type+' for '+longname, linkText); + } + }); + } + + } + + return rtn; + } + }; + //save the original resolveLinks so we can use it after we are done with our alterations + const resolveLinks = helper.resolveLinks; + var visited=[]; + //replace the inline tag with an actual link + const doReplace = (string, {completeTag, text, tag}) => { + let tagIndex = string.indexOf(completeTag); + if(visited.indexOf(tagIndex) < 0){ + visited.push(tagIndex); + let parsed = parseLink(completeTag); + //Only operate on external links, and let the original resolveLinks handle the others later. + if(parsed.external){ + let linkText = parsed.text && parsed.text != completeTag ? parsed.text : null; + let theLink = linkto(completeTag, linkText); + + return string.replace( completeTag, theLink ); + }else{ + //if we return an unaltered string, then the processing of inline link tags will stop + //so we'll add a space to the end, and then remove them before calling the original resolveLinks + return string+' '; + } + }else{ + //we don't want to get stuck in a loop continuously trying to parse the same tag + //but we can't return the same string or we'll never visit subsequent links + //so we'll replace the tag with an unknown tag, which will be put back to a link AFTER we've + //processed the whole file. + + return string.replace( completeTag, completeTag.replace('{@'+tag, '{@betterdocsreplaced'+tag) ); + } + }; + const restoreBetterDocsReplaced = (string, {completeTag, text, tag}) => { + let type = tag.replace('betterdocsreplaced',''); + return string.replace( completeTag, completeTag.replace('{@'+tag, '{@'+type) ); + }; + + helper.resolveLinks = string => { + //let's handle the link tags that we are going to operate on + let processors = { + link: doReplace, + linkcode: doReplace, + linkplain: doReplace, + }; + string = inline.replaceInlineTags(string, processors).newString; + + //now let's put back the betterdocsreplaced tags that we added in doReplace + let betterDocsProcessors = {}; + Object.keys(processors).forEach(name => { + betterDocsProcessors['betterdocsreplaced'+name] = restoreBetterDocsReplaced; + }); + string = inline.replaceInlineTags(string, betterDocsProcessors).newString; + + //Empty our visited so we're ready for the next file. + visited=[]; + //Now let the original resolveLinks handle whatever we didn't + //doReplace may have added spaces to the end of the string, so we'll remove them with a trim() + return resolveLinks(string.trim()); + }; +} + var resolveAuthorLinks = helper.resolveAuthorLinks var hasOwnProp = Object.prototype.hasOwnProperty @@ -199,6 +372,17 @@ function addSignatureTypes(f) { function addAttribs(f) { var attribs = helper.getAttribs(f) + + //For the @lifecycle tag when using the lifecycle plugin + if(f.hasOwnProperty('lifecycle') && f.lifecycle){ + attribs.push('React Lifecycle'); + } + + //For the @renders tag when using the lifecycle plugin + if(f.hasOwnProperty('renders') && f.renders){ + attribs.push('Causes Render'); + } + var attribsString = buildAttribsString(attribs) f.attribs = util.format('<span class="type-signature">%s</span>', attribsString) @@ -388,6 +572,9 @@ function linktoExternal(longName, name) { } function buildGroupNav (members, title) { + if (env.conf.templates.betterDocs.useNestedCategories) { + return buildGroupNavNested(members, title); + } var globalNav var seenTutorials = {} var nav = '' @@ -446,7 +633,10 @@ function buildGroupNav (members, title) { function buildNav(members, navTypes = null, betterDocs) { const href = betterDocs.landing ? 'docs.html' : 'index.html' var nav = navTypes ? '' : `<h2><a href="${href}">Documentation</a></h2>` - + if (env.conf.templates.betterDocs.includeTodoPage) { + let todoHref = 'Todo.html'; + nav += `<h2><a href="${todoHref}">TODO</a></h2>`; + } var categorised = {} var rootScope = {} @@ -476,6 +666,222 @@ function buildNav(members, navTypes = null, betterDocs) { return nav } +/** + * + * Build the navigation for a given set of members which belong to the category defined in the title + * + * @param {object} items The members that will be used to create the sidebar. + * @param {array<object>} items.classes + * @param {array<object>} items.components + * @param {array<object>} items.externals + * @param {array<object>} items.globals + * @param {array<object>} items.mixins + * @param {array<object>} items.modules + * @param {array<object>} items.namespaces + * @param {array<object>} items.tutorials + * @param {array<object>} items.events + * @param {array<object>} items.interfaces + * @param {String} title The name of the group to build the navigation for + * + * @return {string} The HTML for a groups navigation in the sidebar. + * + */ +function buildGroupNavNested (members, title) { + var globalNav; + var seenTutorials = {}; + var nav = ''; + var seen = {}; + //define our types so we can just loop through them + let types = { + tutorials: {name: 'Tutorials', seen: seenTutorials, link: linktoTutorial}, + modules: {name: 'Modules', seen: {}, link: linkto}, + externals: {name: 'Externals', seen: seen, link: linktoExternal}, + namespaces: {name: 'Namespaces', seen: seen, link: linkto}, + classes: {name: 'Classes', seen: seen, link: linkto}, + interfaces: {name: 'Interfaces', seen: seen, link: linkto}, + events: {name: 'Events', seen: seen, link: linkto}, + mixins: {name: 'Mixins', seen: seen, link: linkto}, + components: {name: 'Components', seen: seen, link: linkto}, + globals: {name: 'Global', seen: seen, link: linkto}, + }; + //organize the members according to their category and then type + let categorized = {}; + Object.keys(types).forEach(type => { + if(members[type]){ + members[type].forEach(member => { + let subCat = member.subCategory || ''; + categorized[subCat] = categorized[subCat] || {}; + if(type != 'events' || (type == 'events' && !member.memberof)){ + categorized[subCat][type] = categorized[subCat][type] || []; + categorized[subCat][type].push(member); + } + }); + } + }); + + //determine if this subcategory list is a mixed list of subcategories and members + + + + let categorizedKeys = Object.keys(categorized); + let hasEmptySubcats=categorizedKeys.indexOf('') >= 0; + let hasNonEmptySubcats=(hasEmptySubcats && categorizedKeys.length > 1) || (!hasEmptySubcats && categorizedKeys.length > 0); + categorizedKeys.forEach(subCat => { + let typeKeys = Object.keys(categorized[subCat]); + }); + + + + nav += "\n\n<div class=\"category"+(title ? ' nested' : '')+"\">\n"; + if (title) { + if (env.conf.templates.betterDocs.useNavFolding) { + nav += " <a href=\"javascript:void(0);\" class=\"category-opener\" data-cat=\""+title+"\">\n"+ + " <i class=\"fas fa-caret-"+(env.conf.templates.betterDocs.foldingDefaultClosed ? 'right' : 'down')+"\"></i>\n "; + } + nav += " <h2>" + title + "</h2>\n"; + if (env.conf.templates.betterDocs.useNavFolding) { + nav += " </a>\n"; + } + nav += ' <ul class="subcategories'; + if (env.conf.templates.betterDocs.useNavFolding) { + nav += ' '+(env.conf.templates.betterDocs.foldingDefaultClosed ? 'closed' : 'opened'); + } + if(hasEmptySubcats && hasNonEmptySubcats){ + nav+= ' is-mixed'; + } + + nav += "\" data-cat=\""+title+"\">\n"; + } + + + categorizedKeys.forEach(subCat => { + + if(title && subCat){ + if (env.conf.templates.betterDocs.useNavFolding) { + nav += " <li class=\""+(env.conf.templates.betterDocs.foldingDefaultClosed ? 'closed' : 'opened')+"\" data-cat=\""+title+"\">\n"+ + " <a href=\"javascript:void(0);\" class=\"category-opener\" data-subcat=\""+subCat+"\">\n"+ + " <i class=\"fas fa-caret-"+(env.conf.templates.betterDocs.foldingDefaultClosed ? 'right' : 'down')+"\"></i>\n"+ + " <h3 class=\"subCat\">"+subCat+"</h3>\n"+ + " </a>\n"+ + " <ul class=\"types\">\n"; + }else{ + nav += " <li>\n"+ + " <h3>"+subCat+"</h3>\n"+ + " <ul>\n"; + } + } + let typeKeys = Object.keys(categorized[subCat]); + typeKeys.forEach(type => { + if(typeKeys.length > 1){ + nav += title ? " <li data-subcat=\""+subCat+"\">\n" : ''; + } + nav += buildMemberNavNested(categorized[subCat][type] || [], types[type].name, types[type].seen, types[type].link, title, subCat, !title || typeKeys.length > 1); + if(typeKeys.length > 1){ + nav += title ? " </li><!-- /members for '"+subCat+"\"' -->\n" : ''; + } + }); + if(title && subCat){ + nav += " </ul> <!-- /types for subcategory '"+subCat+"' -->\n"+ + " </li>\n"; + } + + }); + if(title){ + nav += " </ul><!-- /subcategories for '"+title+"' -->\n"+ + "</div>"; + } + + //if (members.globals && members.globals.length) { + // globalNav = '' + // + // members.globals.forEach(function(g) { + // if ( g.kind !== 'typedef' && !hasOwnProp.call(seen, g.longname) ) { + // globalNav += '<li>' + linkto(g.longname, g.name) + '</li>' + // } + // seen[g.longname] = true + // }) + // + // if (!globalNav) { + // // turn the heading into a link so you can actually get to the global page + // nav += '<h3>' + linkto('global', 'Global') + '</h3>' + // } + // else { + // if (env.conf.templates.betterDocs.useNavFolding) { + // nav += ''+ + // '<div class="member-container '+(env.conf.templates.betterDocs.foldingDefaultClosed ? 'closed' : 'opened')+'">'+ + // '<a href="javascript:void(0);" class="member-opener" data-member="Global">'+ + // '<i class="fas fa-caret-'+(env.conf.templates.betterDocs.foldingDefaultClosed ? 'right' : 'down')+'"></i>'+ + // '<h3>Global</h3><ul data-member="Global">' + globalNav + '</ul>'; + // }else{ + // nav += '<h3>Global</h3><ul>' + globalNav + '</ul>' + // } + // + // + // + // + // + // } + //} + + return nav; +} + +/** + * Build the memberNav with the subcategories nested under the categories, and the + * member types nested under the subcategories + * + * @param {array<object>} items A list of members for a specific category, subcategory, and member type + * @param {string} itemHeading The name of the member type heading for these items + * @param {object} itemsSeen An object containing the members that have already been placed in the navigation indexed by the longname + * @param {function} linktoFn A function that is used to build a link to a specific member's page + * @param {string} catHeading + * @param {string} subCatHeading + * @param {bool} useItemHeading Determines if the items should use a heading. Set to false when not nesting items in their itemHeading. + */ +function buildMemberNavNested(items, itemHeading, itemsSeen, linktoFn, catHeading, subCatHeading, useItemHeading) { + let nav = ''; + if(items){ + if(useItemHeading){ + let hNum = catHeading && subCatHeading ? '4' : '3'; + let heading = " <h"+hNum+">"+itemHeading+"</h"+hNum+">\n"; + if (env.conf.templates.betterDocs.useNavFolding) { + nav += ''+ + ' <div class="member-container '+(env.conf.templates.betterDocs.foldingDefaultClosed ? 'closed' : 'opened')+'">'+"\n"+ + ' <a href="javascript:void(0);" class="member-opener" data-member="'+itemHeading+'">'+"\n"+ + ' <i class="fas fa-caret-'+(env.conf.templates.betterDocs.foldingDefaultClosed ? 'right' : 'down')+'"></i>'+"\n"; + } + nav += heading; + if (env.conf.templates.betterDocs.useNavFolding) { + nav += " </a>\n"; + } + nav += ' <ul data-member="'+itemHeading+'">'+"\n"; + } + items.forEach(item => { + nav += " <li>"; + let displayName; + if ( !hasOwnProp.call(item, 'longname') ) { + nav += linktoFn('', item.name); + }else if ( !hasOwnProp.call(itemsSeen, item.longname) ) { + if (env.conf.templates.default.useLongnameInNav) { + displayName = item.longname; + } else { + displayName = item.name; + } + nav += linktoFn(item.longname, displayName.replace(/\b(module|event):/g, '')); + itemsSeen[item.longname] = true; + } + nav += "</li>\n"; + }); + if(useItemHeading){ + nav += " </ul>\n"; + } + if(useItemHeading && env.conf.templates.betterDocs.useNavFolding){ + nav += " </div>\n"; + } + } + return nav; +} + /** @param {TAFFY} taffyData See <http://taffydb.com/>. @param {object} opts @@ -735,6 +1141,27 @@ exports.publish = function(taffyData, opts, tutorials) { longname: (opts.mainpagetitle) ? opts.mainpagetitle : 'Main Page' }] ).concat(files), indexUrl) + + if (env.conf.templates.betterDocs.includeTodoPage) { + //Generate the todo page + let docs = {}; + //Gather all the members that have a TODO + data().each(function(member) { + if(member && Object.keys(member).indexOf('todo') >= 0){ + if(!docs.hasOwnProperty(member.meta.shortpath)){ + docs[member.meta.shortpath] = { + shortpath: member.meta.shortpath, + path: member.meta.path, + filepath: path.join(member.meta.path, member.meta.filename), + members: [] + } + } + docs[member.meta.shortpath].members.push(member); + } + }); + + generate('TODO', '', [{kind: 'todo', docs:docs}], helper.getUniqueFilename('Todo')); + } // set up the lists that we'll use to generate pages classes = taffy(members.classes) diff --git a/scripts/app.js b/scripts/app.js index d7a7677b..646ad3e9 100644 --- a/scripts/app.js +++ b/scripts/app.js @@ -1,2 +1,66 @@ -$().ready(() => { -}) \ No newline at end of file +$(window).on('load', () => { + if(window.location.hash){ + scrollToHash(window.location.hash); + } + if(usePropertyFolding){ + $('table.props .property-opener, table.params .property-opener').on('click', function(e){ + let row = $(this).parents('tr').first(); + togglePropertyFold(row); + e.preventDefault(); + }); + } +}); + +function scrollToHash(hash){ + //If the browser doesn't take us to the right place, then manually scroll there. + let currentPos = $('#main-content-wrapper').scrollTop(); + let anchorPos = Math.round($('a.href-link[href="'+hash+'"]').offset().top); + let margin = OFFSET ? OFFSET : Math.round($('#main-content-wrapper').outerHeight()*0.05); + let posMin = anchorPos-margin+currentPos; + let posMax = anchorPos+margin+currentPos; + if(anchorPos >= posMin && anchorPos <= posMax){ + $('a:not(.href-link)[href="'+hash+'"]').click(); + } +} + +function togglePropertyFold(row){ + //let row = $(this).parents('tr').first(); + let table = row.parents('table').first(); + let propName = row.attr('data-prop'); + let level = parseInt(row.attr('data-level')); + let levelRows = table.find('tr[data-parentprop="'+propName+'"][data-level="'+(level+1)+'"]').toArray(); + + let toToggle = Object.assign([], levelRows); + let levelRow; + while(levelRow = levelRows.pop()){ + propName = $(levelRow).attr('data-prop'); + level = parseInt($(levelRow).attr('data-level')); + let tempRows = table.find('tr[data-parentprop="'+propName+'"][data-level="'+(level+1)+'"]').toArray(); + tempRows.forEach((elem) => { + toToggle.push($(elem)); + levelRows.push($(elem)); + }); + } + //toToggle now contains all the rows that need to be toggled + let opening = !row.hasClass('is-open'); + if(opening){ + //row.removeClass('was-closed').addClass('was-open'); + row.find('.property-opener i').removeClass('fa-caret-right').addClass('fa-caret-down'); + row.removeClass('is-closed').addClass('is-open'); + }else{ + //row.removeClass('was-open').addClass('was-closed'); + row.find('.property-opener i').removeClass('fa-caret-down').addClass('fa-caret-right'); + row.removeClass('is-open').addClass('is-closed'); + } + toToggle.forEach(elem => { + elem = $(elem); + if(opening){ + //restore previous toggle state + elem.removeClass('hide is-closed').addClass('show is-open'); + elem.find('.property-opener i').removeClass('fa-caret-right').addClass('fa-caret-down'); + }else{ + elem.removeClass('show is-open').addClass('hide is-closed'); + elem.find('.property-opener i').removeClass('fa-caret-down').addClass('fa-caret-right'); + } + }); +} \ No newline at end of file diff --git a/scripts/side-nav.js b/scripts/side-nav.js index 610c35ad..9884d965 100644 --- a/scripts/side-nav.js +++ b/scripts/side-nav.js @@ -11,6 +11,30 @@ $().ready(() => { if (!$('.vertical-section').length) { wrapper.hide() } + + if(subsectionsInSideNav){ + //Add subsections to the side navigation + $('.subsection').each((i, el) => { + const subsection = $(el) + const type=subsection.attr('data-type'); + if(subsectionsInSideNav.indexOf(type) >= 0){ + const subsectionName = subsection.find('> .subsection-title').text(); + if(subsectionName){ + wrapper.append($('<h4/>').text(subsectionName)) + const list = $('<ul></ul>') + subsection.find('dl dt a').each((i, el) => { + const navLink = $(el) + const name = navLink.clone().children().remove().end().text(); + const href = navLink.attr('href') + const link = $(`<a href="${href}" />`).text(name) + list.append($('<li></li>').append(link)) + //links.push({ link, offset: navLink.offset().top}) + }) + wrapper.append(list) + } + } + }); + } $('.vertical-section').each((i, el) => { const section = $(el) @@ -25,7 +49,7 @@ $().ready(() => { const href = navLink.find('a').attr('href') const link = $(`<a href="${href}" />`).text(name) list.append($('<li></li>').append(link)) - links.push({ link, offset: navLink.offset().top}) + links.push({ link, offset: navLink.offset().top, navLink:navLink}) }) wrapper.append(list) } @@ -37,10 +61,12 @@ $().ready(() => { const href = navLink.find('a').attr('href') const link = $(`<a href="${href}" />`).text(name) wrapper.append(link) - links.push({ link, offset: navLink.offset().top}) + links.push({ link, offset: navLink.offset().top, navLink:navLink}) }) } }) + + if (!$.trim(wrapper.text())) { return wrapper.hide() @@ -54,7 +80,7 @@ $().ready(() => { for (let index = (links.length-1); index >= 0; index--) { const link = links[index] link.link.removeClass('is-active') - if ((position + OFFSET) >= link.offset) { + if ((position + OFFSET) >= (core.scrollTop() + link.navLink.offset().top)) { if (!activeSet) { link.link.addClass('is-active') activeSet = true @@ -72,7 +98,7 @@ $().ready(() => { links.forEach(link => { link.link.click(() => { - core.animate({ scrollTop: link.offset - OFFSET + 1 }, 500) + core.animate({ scrollTop: (core.scrollTop() + link.navLink.offset().top) - OFFSET + 1 }, 500) }) }) }) \ No newline at end of file diff --git a/scripts/sidebar-active.js b/scripts/sidebar-active.js index 445635e8..89b76ac9 100644 --- a/scripts/sidebar-active.js +++ b/scripts/sidebar-active.js @@ -1,9 +1,294 @@ $().ready(() => { - $('#sidebarNav a').each((index, el) => { - const href = $(el).attr('href'); - if (window.location.pathname.match('/' + href)) { - $(el).addClass('active') - $('#sidebarNav').scrollTop($(el).offset().top - 150) - } - }) -}) \ No newline at end of file + //If we are using navigation folding, then listen to click events and restore + //the folded state + if(useNavFolding){ + initCatFolding(); + initSubcatFolding(); + initMemberFolding(); + restoreCatFolding(); + restoreSubcatFolding(); + restoreMemberFolding(); + } + + //Set the active sidebar link based on the url + restoreSideNavActiveState(); + //set the scroll position of the sidebar back to where it was + restoreSideNavScrollState(); + //register scroll event to keep track of the scroll position + initSideNavScrollState(); +}); + +function initCatFolding(){ + $('.use-nav-folding .sidebar .category.nested > .category-opener').on('click', function(){ + let a = $(this); + let parent = a.parent(); + let ul = parent.find('ul.subcategories'); + let icon = a.find('i').first(); + + let catFoldState = window.localStorage.getItem('catFoldState'); + if(!catFoldState){ + catFoldState = {opened:[], closed:[]}; + }else{ + catFoldState = JSON.parse(catFoldState); + } + let cat = a.attr('data-cat'); + let selector = ' > a.category-opener[data-cat="'+cat+'"]'; + + if(ul.hasClass('opened')){ + //closing + ul.removeClass('opened').addClass('closed'); + icon.removeClass('fa-caret-down').addClass('fa-caret-right'); + + let index = catFoldState.opened.indexOf(selector); + if(index >= 0){ + catFoldState.opened.splice(index, 1); + } + + if(catFoldState.closed.indexOf(selector) < 0){ + catFoldState.closed.push(selector); + } + }else{ + //opening + ul.removeClass('closed').addClass('opened'); + icon.removeClass('fa-caret-right').addClass('fa-caret-down'); + + if(catFoldState.opened.indexOf(selector) < 0){ + catFoldState.opened.push(selector); + } + let index = catFoldState.closed.indexOf(selector); + if(index >= 0){ + catFoldState.closed.splice(index, 1); + } + } + + window.localStorage.setItem('catFoldState', JSON.stringify(catFoldState)); + }); +} + +function initSubcatFolding(){ + $('.use-nav-folding .sidebar .category.nested .subcategories > li > a').on('click', function(){ + var a = $(this); + var parent = a.parent(); + + let foldState = window.localStorage.getItem('subcatFoldState'); + if(!foldState){ + foldState = {opened:[], closed:[]}; + }else{ + foldState = JSON.parse(foldState); + } + let cat = a.attr('data-subcat'); + //let selector = '.sidebar .category.nested .subcategories a[data-subcat="'+cat+'"]'; + if(parent.hasClass('opened')){ + parent.removeClass('opened').addClass('closed'); + a.find('i').removeClass('fa-caret-down').addClass('fa-caret-right'); + let index = foldState.opened.indexOf(cat); + if(cat && index >= 0){ + foldState.opened.splice(index,1); + + } + if(cat && foldState.closed.indexOf(cat) < 0){ + foldState.closed.push(cat); + } + }else{ + parent.removeClass('closed').addClass('opened'); + a.find('i').removeClass('fa-caret-right').addClass('fa-caret-down'); + let index = foldState.closed.indexOf(cat); + if(cat && index >= 0){ + foldState.closed.splice(index, 1); + } + if(cat && foldState.opened.indexOf(cat) < 0){ + foldState.opened.push(cat); + } + } + window.localStorage.setItem('subcatFoldState', JSON.stringify(foldState)); + }); +} + +function initMemberFolding(){ + $('.use-nav-folding .sidebar .member-opener').on('click', function(){ + let container = $(this).parents('.member-container').first(); + let icon = $(this).find('i').first(); + + let memberFoldState = window.localStorage.getItem('memberFoldState'); + if(!memberFoldState){ + memberFoldState = {opened:[], closed:[]}; + }else{ + memberFoldState = JSON.parse(memberFoldState); + } + + let selector = 'a[data-member="'+$(this).attr('data-member')+'"]'; + if(container.parents('.subcategories').length > 0){ + //this is a member in a subcategory + + let cat = container.parents('[data-cat]').first(); + let subcat = cat.find('[data-subcat]').first(); + selector = '[data-cat="'+cat.attr('data-cat')+'"] [data-subcat="'+subcat.attr('data-subcat')+'"] '+selector; + }else{ + selector = '> .member-container > '+selector; + } + + if(container.hasClass('opened')){ + //we are closing + container.removeClass('opened').addClass('closed'); + icon.removeClass('fa-caret-down').addClass('fa-caret-right'); + let index = memberFoldState.opened.indexOf(selector); + if(index >= 0){ + memberFoldState.opened.splice(index, 1); + } + + if(memberFoldState.closed.indexOf(selector) < 0){ + memberFoldState.closed.push(selector); + } + + }else{ + //we are opening + container.removeClass('closed').addClass('opened'); + icon.removeClass('fa-caret-right').addClass('fa-caret-down'); + + if(memberFoldState.opened.indexOf(selector) < 0){ + memberFoldState.opened.push(selector); + } + let index = memberFoldState.closed.indexOf(selector); + if(index >= 0){ + memberFoldState.closed.splice(index, 1); + } + } + + window.localStorage.setItem('memberFoldState', JSON.stringify(memberFoldState)); + }); +} + +function restoreCatFolding(){ + let catFoldState = window.localStorage.getItem('catFoldState'); + if(!catFoldState){ + catFoldState = {opened:[], closed:[]}; + }else{ + catFoldState = JSON.parse(catFoldState); + } + + + catFoldState.opened.forEach(selector => { + let cat = $('.sidebar .category '+selector); + //This cat should be opened + if(cat.length > 0 && !cat.parents('.category').first().find('.subcategories').first().hasClass('opened')){ + //cat is not opened. Trigger a click to let the event handler open it + cat.click(); + } + }); + + catFoldState.closed.forEach(selector => { + let cat = $('.sidebar .category '+selector); + //This member should be closed + if(cat.length > 0 && !cat.parents('.category').first().find('.subcategories').first().hasClass('closed')){ + //member is not closed. Trigger a click to let the event handler close it + cat.click(); + } + }); +} + +function restoreSubcatFolding(){ + //re-open any nested categories that were open before this page was loaded + let foldState = window.localStorage.getItem('subcatFoldState'); + if(!foldState){ + foldState = {opened:[], closed:[]}; + }else{ + foldState = JSON.parse(foldState); + } + foldState.opened.forEach(subCat => { + //let the click handler open this element, so everything stays consistent + $('.sidebar .category.nested .subcategories [data-cat].closed [data-subcat="'+subCat+'"]').click(); + }); + + foldState.closed.forEach(subCat => { + //let the click handler close this element, so everything stays consistent + $('.sidebar .category.nested .subcategories [data-cat].opened [data-subcat="'+subCat+'"]').click(); + }); +} + +function restoreMemberFolding(){ + let memberFoldState = window.localStorage.getItem('memberFoldState'); + if(!memberFoldState){ + memberFoldState = {opened:[], closed:[]}; + }else{ + memberFoldState = JSON.parse(memberFoldState); + } + + + memberFoldState.opened.forEach(selector => { + let member = $('.sidebar .category '+selector); + //This member should be opened + if(member.length > 0 && !member.parents('.member-container').first().hasClass('opened')){ + //member is not opened. Trigger a click to let the event handler open it + member.click(); + } + }); + + memberFoldState.closed.forEach(selector => { + let member = $('.sidebar .category '+selector); + //This member should be closed + if(member.length > 0 && !member.parents('.member-container').first().hasClass('closed')){ + //member is not closed. Trigger a click to let the event handler close it + member.click(); + } + }); +} + + +function initSideNavScrollState(){ + $('#sidebarNav').on('scroll', function(){ + let scrollState = window.localStorage.getItem('scrollState'); + if(!scrollState){ + scrollState = {}; + }else{ + scrollState = JSON.parse(scrollState); + } + if(!scrollState.hasOwnProperty('sidebarNav')){ + scrollState.sidebarNav = 0; + } + scrollState.sidebarNav = $('#sidebarNav').scrollTop(); + window.localStorage.setItem('scrollState', JSON.stringify(scrollState)); + }); +} + +function restoreSideNavScrollState(){ + let scrollState = window.localStorage.getItem('scrollState'); + if(!scrollState){ + scrollState = {}; + }else{ + scrollState = JSON.parse(scrollState); + } + if(scrollState.hasOwnProperty('sidebarNav')){ + $('#sidebarNav').scrollTop(scrollState.sidebarNav); + }else{ + let target = getSideNavActiveElem(); + if(target){ + $('#sidebarNav').scrollTop(target.offset().top - 150); + } + } +} + +function restoreSideNavActiveState(){ + if($('#sidebarNav a.active').length == 0){ + let target = getSideNavActiveElem(); + if(target && !target.is('.active')){ + target.addClass('active'); + } + } +} + +function getSideNavActiveElem(){ + let currentActive = $('#sidebarNav a.active'); + if(currentActive.length == 0){ + let target = $('#sidebarNav a[href="'+window.location.pathname.replace('/','')+'"]'); + if(!target || target.length == 0 && window.location.hash){ + target = $('#sidebarNav a[href="'+window.location.pathname.replace('/','')+window.location.hash+'"]'); + } + if(target && target.length > 0){ + return target.first(); + }else{ + return null; + } + }else{ + return currentActive.first(); + } +} \ No newline at end of file diff --git a/static/scripts/app.min.js b/static/scripts/app.min.js deleted file mode 100644 index 9411fc03..00000000 --- a/static/scripts/app.min.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";$().ready(function(){});var sidebarIsVisible=!1,toggleSidebar=function(e){var a=!(0<arguments.length&&void 0!==e)||e;$("#sidebarNav").toggleClass("sticky",a),$("#stickyNavbarOverlay").toggleClass("active",a),$("#hamburger").toggleClass("is-active"),sidebarIsVisible=a};$().ready(function(){$("#hamburger").click(function(){toggleSidebar(!sidebarIsVisible)}),$("#stickyNavbarOverlay").click(function(){sidebarIsVisible&&toggleSidebar(!1)})});var OFFSET=150;$().ready(function(){var o=$("#side-nav"),c=[];if($(".vertical-section").length||o.hide(),$(".vertical-section").each(function(e,a){var i=$(a),t=i.find("> h1").text();if(t){o.append($("<h3/>").text(t));var s=$("<ul></ul>");i.find(".members h4.name").each(function(e,a){var i=$(a),t=i.find(".code-name").clone().children().remove().end().text(),n=i.find("a").attr("href"),r=$('<a href="'.concat(n,'" />')).text(t);s.append($("<li></li>").append(r)),c.push({link:r,offset:i.offset().top})}),o.append(s)}else i.find(".members h4.name").each(function(e,a){var i=$(a),t=i.find(".code-name").clone().children().remove().end().text(),n=i.find("a").attr("href"),r=$('<a href="'.concat(n,'" />')).text(t);o.append(r),c.push({link:r,offset:i.offset().top})})}),!$.trim(o.text()))return o.hide();function e(){for(var e=n.scrollTop(),a=!1,i=c.length-1;0<=i;i--){var t=c[i];t.link.removeClass("is-active"),e+OFFSET>=t.offset?a?t.link.addClass("is-past"):(t.link.addClass("is-active"),a=!0):t.link.removeClass("is-past")}}var n=$("#main-content-wrapper");n.on("scroll",e),e(),c.forEach(function(e){e.link.click(function(){n.animate({scrollTop:e.offset-OFFSET+1},500)})})}),$().ready(function(){$("#sidebarNav a").each(function(e,a){var i=$(a).attr("href");window.location.pathname.match("/"+i)&&($(a).addClass("active"),$("#sidebarNav").scrollTop($(a).offset().top-150))})}); \ No newline at end of file diff --git a/static/styles/app.min.css b/static/styles/app.min.css deleted file mode 100644 index 16207525..00000000 --- a/static/styles/app.min.css +++ /dev/null @@ -1 +0,0 @@ -/*! bulma.io v0.7.5 | MIT License | github.com/jgthms/bulma */@-webkit-keyframes spinAround{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spinAround{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.delete,.modal-close,.is-unselectable,.button,.file,.breadcrumb,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.tabs{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select:not(.is-multiple):not(.is-loading)::after,.navbar-link:not(.is-arrowless)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:center;transform-origin:center;width:0.625em}.box:not(:last-child),.content:not(:last-child),.notification:not(:last-child),.progress:not(:last-child),.table:not(:last-child),.table-container:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.block:not(:last-child),.highlight:not(:last-child),.breadcrumb:not(:last-child),.level:not(:last-child),.list:not(:last-child),.message:not(:last-child),.tabs:not(:last-child){margin-bottom:1.5rem}.delete,.modal-close{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.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:none;position:relative;vertical-align:top;width:20px}.delete::before,.modal-close::before,.delete::after,.modal-close::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;-webkit-transform:translateX(-50%) translateY(-50%) rotate(45deg);transform:translateX(-50%) translateY(-50%) rotate(45deg);-webkit-transform-origin:center center;transform-origin:center center}.delete::before,.modal-close::before{height:2px;width:50%}.delete::after,.modal-close::after{height:50%;width:2px}.delete:hover,.modal-close:hover,.delete:focus,.modal-close:focus{background-color:rgba(10,10,10,0.3)}.delete:active,.modal-close:active{background-color:rgba(10,10,10,0.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,.loader,.select.is-loading::after,.control.is-loading::after{-webkit-animation:spinAround 500ms infinite linear;animation:spinAround 500ms 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}.is-overlay,.image.is-square img,.image.is-square .has-ratio,.image.is-1by1 img,.image.is-1by1 .has-ratio,.image.is-5by4 img,.image.is-5by4 .has-ratio,.image.is-4by3 img,.image.is-4by3 .has-ratio,.image.is-3by2 img,.image.is-3by2 .has-ratio,.image.is-5by3 img,.image.is-5by3 .has-ratio,.image.is-16by9 img,.image.is-16by9 .has-ratio,.image.is-2by1 img,.image.is-2by1 .has-ratio,.image.is-3by1 img,.image.is-3by1 .has-ratio,.image.is-4by5 img,.image.is-4by5 .has-ratio,.image.is-3by4 img,.image.is-3by4 .has-ratio,.image.is-2by3 img,.image.is-2by3 .has-ratio,.image.is-3by5 img,.image.is-3by5 .has-ratio,.image.is-9by16 img,.image.is-9by16 .has-ratio,.image.is-1by2 img,.image.is-1by2 .has-ratio,.image.is-1by3 img,.image.is-1by3 .has-ratio,.modal,.modal-background,.hero-video{bottom:0;left:0;position:absolute;right:0;top:0}.button,.input,.textarea,.select select,.file-cta,.file-name,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{-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.25em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.375em - 1px);padding-left:calc(0.625em - 1px);padding-right:calc(0.625em - 1px);padding-top:calc(0.375em - 1px);position:relative;vertical-align:top}.button:focus,.input:focus,.textarea:focus,.select select:focus,.file-cta:focus,.file-name:focus,.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.is-focused.button,.is-focused.input,.is-focused.textarea,.select select.is-focused,.is-focused.file-cta,.is-focused.file-name,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.button:active,.input:active,.textarea:active,.select select:active,.file-cta:active,.file-name:active,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.is-active.button,.is-active.input,.is-active.textarea,.select select.is-active,.is-active.file-cta,.is-active.file-name,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis{outline:none}.button[disabled],.input[disabled],.textarea[disabled],.select select[disabled],.file-cta[disabled],.file-name[disabled],.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],fieldset[disabled] .button,fieldset[disabled] .input,fieldset[disabled] .textarea,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis{cursor:not-allowed}/*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,embed,iframe,object,video{height:auto;max-width:100%}audio{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:left}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,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:#ff3860;font-size:.875em;font-weight:normal;padding:0.25em 0.5em 0.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:left}table th{color:#363636}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-clipped{overflow:hidden !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-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#00d1b2 !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#009e86 !important}.has-background-primary{background-color:#00d1b2 !important}.has-text-link{color:#3273dc !important}a.has-text-link:hover,a.has-text-link:focus{color:#205bbc !important}.has-background-link{background-color:#3273dc !important}.has-text-info{color:#209cee !important}a.has-text-info:hover,a.has-text-info:focus{color:#0f81cc !important}.has-background-info{background-color:#209cee !important}.has-text-success{color:#23d160 !important}a.has-text-success:hover,a.has-text-success:focus{color:#1ca64c !important}.has-background-success{background-color:#23d160 !important}.has-text-warning{color:#ffdd57 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#ffd324 !important}.has-background-warning{background-color:#ffdd57 !important}.has-text-danger{color:#ff3860 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#ff0537 !important}.has-background-danger{background-color:#ff3860 !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}.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:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.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}}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-relative{position:relative !important}.box{background-color:#fff;border-radius:6px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#4a4a4a;display:block;padding:1.25rem}a.box:hover,a.box:focus{box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px #3273dc}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.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(0.375em - 1px);padding-left:.75em;padding-right:.75em;padding-top:calc(0.375em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-small,.button .icon.is-medium,.button .icon.is-large{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-0.375em - 1px);margin-right:0.1875em}.button .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:calc(-0.375em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-0.375em - 1px);margin-right:calc(-0.375em - 1px)}.button:hover,.button.is-hovered{border-color:#b5b5b5;color:#363636}.button:focus,.button.is-focused{border-color:#3273dc;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(50,115,220,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#4a4a4a;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:#f5f5f5;color:#363636}.button.is-text:active,.button.is-text.is-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:hover,.button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white:focus,.button.is-white.is-focused{border-color:transparent;color:#0a0a0a}.button.is-white:focus:not(:active),.button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.button.is-white:active,.button.is-white.is-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:hover,.button.is-white.is-inverted.is-hovered{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:hover,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined.is-focused{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:hover::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.is-focused::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:hover,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading:hover::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.is-focused::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:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:#fff}.button.is-black:focus:not(:active),.button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.button.is-black:active,.button.is-black.is-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:hover,.button.is-black.is-inverted.is-hovered{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:hover,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined.is-focused{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:hover::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.is-focused::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:hover,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading:hover::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.is-focused::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:#363636}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:#363636}.button.is-light:focus,.button.is-light.is-focused{border-color:transparent;color:#363636}.button.is-light:focus:not(:active),.button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.button.is-light:active,.button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:#363636}.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:#363636;color:#f5f5f5}.button.is-light.is-inverted:hover,.button.is-light.is-inverted.is-hovered{background-color:#292929}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:#363636;border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined:hover,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:#363636}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-outlined.is-loading:hover::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.is-focused::after{border-color:transparent transparent #363636 #363636 !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:#363636;color:#363636}.button.is-light.is-inverted.is-outlined:hover,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined.is-focused{background-color:#363636;color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading:hover::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.is-focused::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:#363636;box-shadow:none;color:#363636}.button.is-dark{background-color:#363636;border-color:transparent;color:#f5f5f5}.button.is-dark:hover,.button.is-dark.is-hovered{background-color:#2f2f2f;border-color:transparent;color:#f5f5f5}.button.is-dark:focus,.button.is-dark.is-focused{border-color:transparent;color:#f5f5f5}.button.is-dark:focus:not(:active),.button.is-dark.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.button.is-dark:active,.button.is-dark.is-active{background-color:#292929;border-color:transparent;color:#f5f5f5}.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:#f5f5f5;color:#363636}.button.is-dark.is-inverted:hover,.button.is-dark.is-inverted.is-hovered{background-color:#e8e8e8}.button.is-dark.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted{background-color:#f5f5f5;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-dark.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined:hover,.button.is-dark.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.button.is-dark.is-outlined.is-focused{background-color:#363636;border-color:#363636;color:#f5f5f5}.button.is-dark.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-outlined.is-loading:hover::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.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !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:#f5f5f5;color:#f5f5f5}.button.is-dark.is-inverted.is-outlined:hover,.button.is-dark.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined.is-focused{background-color:#f5f5f5;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading:hover::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.is-focused::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:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-primary{background-color:#00d1b2;border-color:transparent;color:#fff}.button.is-primary:hover,.button.is-primary.is-hovered{background-color:#00c4a7;border-color:transparent;color:#fff}.button.is-primary:focus,.button.is-primary.is-focused{border-color:transparent;color:#fff}.button.is-primary:focus:not(:active),.button.is-primary.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(0,209,178,0.25)}.button.is-primary:active,.button.is-primary.is-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:hover,.button.is-primary.is-inverted.is-hovered{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:hover,.button.is-primary.is-outlined.is-hovered,.button.is-primary.is-outlined:focus,.button.is-primary.is-outlined.is-focused{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:hover::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.is-focused::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:hover,.button.is-primary.is-inverted.is-outlined.is-hovered,.button.is-primary.is-inverted.is-outlined:focus,.button.is-primary.is-inverted.is-outlined.is-focused{background-color:#fff;color:#00d1b2}.button.is-primary.is-inverted.is-outlined.is-loading:hover::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.is-focused::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-link{background-color:#3273dc;border-color:transparent;color:#fff}.button.is-link:hover,.button.is-link.is-hovered{background-color:#276cda;border-color:transparent;color:#fff}.button.is-link:focus,.button.is-link.is-focused{border-color:transparent;color:#fff}.button.is-link:focus:not(:active),.button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(50,115,220,0.25)}.button.is-link:active,.button.is-link.is-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:hover,.button.is-link.is-inverted.is-hovered{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:hover,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined.is-focused{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:hover::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.is-focused::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:hover,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#3273dc}.button.is-link.is-inverted.is-outlined.is-loading:hover::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.is-focused::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-info{background-color:#209cee;border-color:transparent;color:#fff}.button.is-info:hover,.button.is-info.is-hovered{background-color:#1496ed;border-color:transparent;color:#fff}.button.is-info:focus,.button.is-info.is-focused{border-color:transparent;color:#fff}.button.is-info:focus:not(:active),.button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#118fe4;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#209cee;border-color:transparent;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#209cee}.button.is-info.is-inverted:hover,.button.is-info.is-inverted.is-hovered{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:#209cee}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined{background-color:transparent;border-color:#209cee;color:#209cee}.button.is-info.is-outlined:hover,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined.is-focused{background-color:#209cee;border-color:#209cee;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-outlined.is-loading:hover::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.is-focused::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:#209cee;box-shadow:none;color:#209cee}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined:hover,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#209cee}.button.is-info.is-inverted.is-outlined.is-loading:hover::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.is-focused::after{border-color:transparent transparent #209cee #209cee !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-success{background-color:#23d160;border-color:transparent;color:#fff}.button.is-success:hover,.button.is-success.is-hovered{background-color:#22c65b;border-color:transparent;color:#fff}.button.is-success:focus,.button.is-success.is-focused{border-color:transparent;color:#fff}.button.is-success:focus:not(:active),.button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(35,209,96,0.25)}.button.is-success:active,.button.is-success.is-active{background-color:#20bc56;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#23d160;border-color:transparent;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#23d160}.button.is-success.is-inverted:hover,.button.is-success.is-inverted.is-hovered{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:#23d160}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined{background-color:transparent;border-color:#23d160;color:#23d160}.button.is-success.is-outlined:hover,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined.is-focused{background-color:#23d160;border-color:#23d160;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #23d160 #23d160 !important}.button.is-success.is-outlined.is-loading:hover::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.is-focused::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:#23d160;box-shadow:none;color:#23d160}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined:hover,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#23d160}.button.is-success.is-inverted.is-outlined.is-loading:hover::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.is-focused::after{border-color:transparent transparent #23d160 #23d160 !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-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:hover,.button.is-warning.is-hovered{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#ffd83d;border-color:transparent;color:rgba(0,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,0.7);color:#ffdd57}.button.is-warning.is-inverted:hover,.button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,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,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined:hover,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined.is-focused{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,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:hover::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.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,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,0.7);color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted.is-outlined:hover,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading:hover::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.is-focused::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,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-danger{background-color:#ff3860;border-color:transparent;color:#fff}.button.is-danger:hover,.button.is-danger.is-hovered{background-color:#ff2b56;border-color:transparent;color:#fff}.button.is-danger:focus,.button.is-danger.is-focused{border-color:transparent;color:#fff}.button.is-danger:focus:not(:active),.button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,56,96,0.25)}.button.is-danger:active,.button.is-danger.is-active{background-color:#ff1f4b;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#ff3860;border-color:transparent;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#ff3860}.button.is-danger.is-inverted:hover,.button.is-danger.is-inverted.is-hovered{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:#ff3860}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined{background-color:transparent;border-color:#ff3860;color:#ff3860}.button.is-danger.is-outlined:hover,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined.is-focused{background-color:#ff3860;border-color:#ff3860;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #ff3860 #ff3860 !important}.button.is-danger.is-outlined.is-loading:hover::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.is-focused::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:#ff3860;box-shadow:none;color:#ff3860}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined:hover,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#ff3860}.button.is-danger.is-inverted.is-outlined.is-loading:hover::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.is-focused::after{border-color:transparent transparent #ff3860 #ff3860 !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-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:1em;padding-right:1em}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:0.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:0.5rem}.buttons:last-child{margin-bottom:-0.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:hover,.buttons.has-addons .button.is-hovered{z-index:2}.buttons.has-addons .button:focus,.buttons.has-addons .button.is-focused,.buttons.has-addons .button:active,.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-selected{z-index:3}.buttons.has-addons .button:focus:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-selected: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:0.25rem;margin-right:0.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}@media screen and (min-width: 1024px){.container{max-width:960px}.container.is-fluid{margin-left:32px;margin-right:32px;max-width:none}}@media screen and (max-width: 1215px){.container.is-widescreen{max-width:1152px}}@media screen and (max-width: 1407px){.container.is-fullhd{max-width:1344px}}@media screen and (min-width: 1216px){.container{max-width:1152px}}@media screen and (min-width: 1408px){.container{max-width:1344px}}.content li+li{margin-top:0.25em}.content p:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content ul:not(:last-child),.content blockquote:not(:last-child),.content pre:not(:last-child),.content table: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:0.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:0.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:0.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:0.8em}.content h5{font-size:1.125em;margin-bottom:0.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:0.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 sup,.content sub{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.content table th{color:#363636}.content table th:not([align]){text-align:left}.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-square img,.image.is-square .has-ratio,.image.is-1by1 img,.image.is-1by1 .has-ratio,.image.is-5by4 img,.image.is-5by4 .has-ratio,.image.is-4by3 img,.image.is-4by3 .has-ratio,.image.is-3by2 img,.image.is-3by2 .has-ratio,.image.is-5by3 img,.image.is-5by3 .has-ratio,.image.is-16by9 img,.image.is-16by9 .has-ratio,.image.is-2by1 img,.image.is-2by1 .has-ratio,.image.is-3by1 img,.image.is-3by1 .has-ratio,.image.is-4by5 img,.image.is-4by5 .has-ratio,.image.is-3by4 img,.image.is-3by4 .has-ratio,.image.is-2by3 img,.image.is-2by3 .has-ratio,.image.is-3by5 img,.image.is-3by5 .has-ratio,.image.is-9by16 img,.image.is-9by16 .has-ratio,.image.is-1by2 img,.image.is-1by2 .has-ratio,.image.is-1by3 img,.image.is-1by3 .has-ratio{height:100%;width:100%}.image.is-square,.image.is-1by1{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;padding:1.25rem 2.5rem 1.25rem 1.5rem;position:relative}.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:transparent}.notification>.delete{position:absolute;right:0.5rem;top:0.5rem}.notification .title,.notification .subtitle,.notification .content{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:#363636}.notification.is-dark{background-color:#363636;color:#f5f5f5}.notification.is-primary{background-color:#00d1b2;color:#fff}.notification.is-link{background-color:#3273dc;color:#fff}.notification.is-info{background-color:#209cee;color:#fff}.notification.is-success{background-color:#23d160;color:#fff}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.notification.is-danger{background-color:#ff3860;color:#fff}.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:#dbdbdb}.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%, #dbdbdb 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%, #dbdbdb 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%, #dbdbdb 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%, #dbdbdb 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%, #dbdbdb 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%, #dbdbdb 30%)}.progress.is-info::-webkit-progress-value{background-color:#209cee}.progress.is-info::-moz-progress-bar{background-color:#209cee}.progress.is-info::-ms-fill{background-color:#209cee}.progress.is-info:indeterminate{background-image:linear-gradient(to right, #209cee 30%, #dbdbdb 30%)}.progress.is-success::-webkit-progress-value{background-color:#23d160}.progress.is-success::-moz-progress-bar{background-color:#23d160}.progress.is-success::-ms-fill{background-color:#23d160}.progress.is-success:indeterminate{background-image:linear-gradient(to right, #23d160 30%, #dbdbdb 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%, #dbdbdb 30%)}.progress.is-danger::-webkit-progress-value{background-color:#ff3860}.progress.is-danger::-moz-progress-bar{background-color:#ff3860}.progress.is-danger::-ms-fill{background-color:#ff3860}.progress.is-danger:indeterminate{background-image:linear-gradient(to right, #ff3860 30%, #dbdbdb 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:#dbdbdb;background-image:linear-gradient(to right, #4a4a4a 30%, #dbdbdb 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.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:0.5em 0.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:#363636}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#f5f5f5}.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:#209cee;border-color:#209cee;color:#fff}.table td.is-success,.table th.is-success{background-color:#23d160;border-color:#23d160;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.table td.is-danger,.table th.is-danger{background-color:#ff3860;border-color:#ff3860;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 th{color:#363636}.table th:not([align]){text-align:left}.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:rgba(0,0,0,0)}.table thead td,.table thead th{border-width:0 0 2px;color:#363636}.table tfoot{background-color:rgba(0,0,0,0)}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#363636}.table tbody{background-color:rgba(0,0,0,0)}.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:0.25em 0.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:0.5rem}.tags .tag:not(:last-child){margin-right:0.5rem}.tags:last-child{margin-bottom:-0.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:0.25rem;margin-left:0.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child){margin-left:0.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-bottom-left-radius:0;border-top-left-radius:0}.tags.has-addons .tag:not(:last-child){border-bottom-right-radius:0;border-top-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:0.75em;padding-right:0.75em;white-space:nowrap}.tag:not(body) .delete{margin-left:0.25rem;margin-right:-0.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:#363636}.tag:not(body).is-dark{background-color:#363636;color:#f5f5f5}.tag:not(body).is-primary{background-color:#00d1b2;color:#fff}.tag:not(body).is-link{background-color:#3273dc;color:#fff}.tag:not(body).is-info{background-color:#209cee;color:#fff}.tag:not(body).is-success{background-color:#23d160;color:#fff}.tag:not(body).is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.tag:not(body).is-danger{background-color:#ff3860;color:#fff}.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:-0.375em;margin-right:0.1875em}.tag:not(body) .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:-0.375em}.tag:not(body) .icon:first-child:last-child{margin-left:-0.375em;margin-right:-0.375em}.tag:not(body).is-delete{margin-left:1px;padding:0;position:relative;width:2em}.tag:not(body).is-delete::before,.tag:not(body).is-delete::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;-webkit-transform:translateX(-50%) translateY(-50%) rotate(45deg);transform:translateX(-50%) translateY(-50%) rotate(45deg);-webkit-transform-origin:center center;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:hover,.tag:not(body).is-delete:focus{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}.title,.subtitle{word-break:break-word}.title em,.title span,.subtitle em,.subtitle span{font-weight:inherit}.title sub,.subtitle sub{font-size:.75em}.title sup,.subtitle sup{font-size:.75em}.title .tag,.subtitle .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:-0.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:0.25rem 0.5rem;text-align:center;vertical-align:top}.input,.textarea,.select select{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#363636}.input::-moz-placeholder,.textarea::-moz-placeholder,.select select::-moz-placeholder{color:rgba(54,54,54,0.3)}.input::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.select select::-webkit-input-placeholder{color:rgba(54,54,54,0.3)}.input:-moz-placeholder,.textarea:-moz-placeholder,.select select:-moz-placeholder{color:rgba(54,54,54,0.3)}.input:-ms-input-placeholder,.textarea:-ms-input-placeholder,.select select:-ms-input-placeholder{color:rgba(54,54,54,0.3)}.input:hover,.textarea:hover,.select select:hover,.is-hovered.input,.is-hovered.textarea,.select select.is-hovered{border-color:#b5b5b5}.input:focus,.textarea:focus,.select select:focus,.is-focused.input,.is-focused.textarea,.select select.is-focused,.input:active,.textarea:active,.select select:active,.is-active.input,.is-active.textarea,.select select.is-active{border-color:#3273dc;box-shadow:0 0 0 0.125em rgba(50,115,220,0.25)}.input[disabled],.textarea[disabled],.select select[disabled],fieldset[disabled] .input,fieldset[disabled] .textarea,fieldset[disabled] .select select,.select fieldset[disabled] select{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#7a7a7a}.input[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.select select[disabled]::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder{color:rgba(122,122,122,0.3)}.input[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.select select[disabled]::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder{color:rgba(122,122,122,0.3)}.input[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.select select[disabled]:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder{color:rgba(122,122,122,0.3)}.input[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.select select[disabled]:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder{color:rgba(122,122,122,0.3)}.input,.textarea{box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);max-width:100%;width:100%}.input[readonly],.textarea[readonly]{box-shadow:none}.is-white.input,.is-white.textarea{border-color:#fff}.is-white.input:focus,.is-white.textarea:focus,.is-white.is-focused.input,.is-white.is-focused.textarea,.is-white.input:active,.is-white.textarea:active,.is-white.is-active.input,.is-white.is-active.textarea{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.input,.is-black.textarea{border-color:#0a0a0a}.is-black.input:focus,.is-black.textarea:focus,.is-black.is-focused.input,.is-black.is-focused.textarea,.is-black.input:active,.is-black.textarea:active,.is-black.is-active.input,.is-black.is-active.textarea{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.input,.is-light.textarea{border-color:#f5f5f5}.is-light.input:focus,.is-light.textarea:focus,.is-light.is-focused.input,.is-light.is-focused.textarea,.is-light.input:active,.is-light.textarea:active,.is-light.is-active.input,.is-light.is-active.textarea{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.input,.is-dark.textarea{border-color:#363636}.is-dark.input:focus,.is-dark.textarea:focus,.is-dark.is-focused.input,.is-dark.is-focused.textarea,.is-dark.input:active,.is-dark.textarea:active,.is-dark.is-active.input,.is-dark.is-active.textarea{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.input,.is-primary.textarea{border-color:#00d1b2}.is-primary.input:focus,.is-primary.textarea:focus,.is-primary.is-focused.input,.is-primary.is-focused.textarea,.is-primary.input:active,.is-primary.textarea:active,.is-primary.is-active.input,.is-primary.is-active.textarea{box-shadow:0 0 0 0.125em rgba(0,209,178,0.25)}.is-link.input,.is-link.textarea{border-color:#3273dc}.is-link.input:focus,.is-link.textarea:focus,.is-link.is-focused.input,.is-link.is-focused.textarea,.is-link.input:active,.is-link.textarea:active,.is-link.is-active.input,.is-link.is-active.textarea{box-shadow:0 0 0 0.125em rgba(50,115,220,0.25)}.is-info.input,.is-info.textarea{border-color:#209cee}.is-info.input:focus,.is-info.textarea:focus,.is-info.is-focused.input,.is-info.is-focused.textarea,.is-info.input:active,.is-info.textarea:active,.is-info.is-active.input,.is-info.is-active.textarea{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.is-success.input,.is-success.textarea{border-color:#23d160}.is-success.input:focus,.is-success.textarea:focus,.is-success.is-focused.input,.is-success.is-focused.textarea,.is-success.input:active,.is-success.textarea:active,.is-success.is-active.input,.is-success.is-active.textarea{box-shadow:0 0 0 0.125em rgba(35,209,96,0.25)}.is-warning.input,.is-warning.textarea{border-color:#ffdd57}.is-warning.input:focus,.is-warning.textarea:focus,.is-warning.is-focused.input,.is-warning.is-focused.textarea,.is-warning.input:active,.is-warning.textarea:active,.is-warning.is-active.input,.is-warning.is-active.textarea{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.is-danger.input,.is-danger.textarea{border-color:#ff3860}.is-danger.input:focus,.is-danger.textarea:focus,.is-danger.is-focused.input,.is-danger.is-focused.textarea,.is-danger.input:active,.is-danger.textarea:active,.is-danger.is-active.input,.is-danger.is-active.textarea{box-shadow:0 0 0 0.125em rgba(255,56,96,0.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:1em;padding-right:1em}.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:0.625em;resize:vertical}.textarea:not([rows]){max-height:600px;min-height:120px}.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[disabled],.radio[disabled],fieldset[disabled] .checkbox,fieldset[disabled] .radio{color:#7a7a7a;cursor:not-allowed}.radio+.radio{margin-left:0.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.25em}.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:none}.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:0.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:hover,.select.is-white select.is-hovered{border-color:#f2f2f2}.select.is-white select:focus,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select:hover,.select.is-black select.is-hovered{border-color:#000}.select.is-black select:focus,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select:hover,.select.is-light select.is-hovered{border-color:#e8e8e8}.select.is-light select:focus,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.select.is-dark:not(:hover)::after{border-color:#363636}.select.is-dark select{border-color:#363636}.select.is-dark select:hover,.select.is-dark select.is-hovered{border-color:#292929}.select.is-dark select:focus,.select.is-dark select.is-focused,.select.is-dark select:active,.select.is-dark select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.select.is-primary:not(:hover)::after{border-color:#00d1b2}.select.is-primary select{border-color:#00d1b2}.select.is-primary select:hover,.select.is-primary select.is-hovered{border-color:#00b89c}.select.is-primary select:focus,.select.is-primary select.is-focused,.select.is-primary select:active,.select.is-primary select.is-active{box-shadow:0 0 0 0.125em rgba(0,209,178,0.25)}.select.is-link:not(:hover)::after{border-color:#3273dc}.select.is-link select{border-color:#3273dc}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#2366d1}.select.is-link select:focus,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(50,115,220,0.25)}.select.is-info:not(:hover)::after{border-color:#209cee}.select.is-info select{border-color:#209cee}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#118fe4}.select.is-info select:focus,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.select.is-success:not(:hover)::after{border-color:#23d160}.select.is-success select{border-color:#23d160}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#20bc56}.select.is-success select:focus,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(35,209,96,0.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#ffd83d}.select.is-warning select:focus,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.select.is-danger:not(:hover)::after{border-color:#ff3860}.select.is-danger select{border-color:#ff3860}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#ff1f4b}.select.is-danger select:focus,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(255,56,96,0.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:0.625em;top:0.625em;-webkit-transform:none;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:hover .file-cta,.file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white:focus .file-cta,.file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}.file.is-white:active .file-cta,.file.is-white.is-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:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black:focus .file-cta,.file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}.file.is-black:active .file-cta,.file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:#363636}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:#363636}.file.is-light:focus .file-cta,.file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:#363636}.file.is-light:active .file-cta,.file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:#363636}.file.is-dark .file-cta{background-color:#363636;border-color:transparent;color:#f5f5f5}.file.is-dark:hover .file-cta,.file.is-dark.is-hovered .file-cta{background-color:#2f2f2f;border-color:transparent;color:#f5f5f5}.file.is-dark:focus .file-cta,.file.is-dark.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,54,54,0.25);color:#f5f5f5}.file.is-dark:active .file-cta,.file.is-dark.is-active .file-cta{background-color:#292929;border-color:transparent;color:#f5f5f5}.file.is-primary .file-cta{background-color:#00d1b2;border-color:transparent;color:#fff}.file.is-primary:hover .file-cta,.file.is-primary.is-hovered .file-cta{background-color:#00c4a7;border-color:transparent;color:#fff}.file.is-primary:focus .file-cta,.file.is-primary.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(0,209,178,0.25);color:#fff}.file.is-primary:active .file-cta,.file.is-primary.is-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:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#276cda;border-color:transparent;color:#fff}.file.is-link:focus .file-cta,.file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(50,115,220,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#2366d1;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#209cee;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#1496ed;border-color:transparent;color:#fff}.file.is-info:focus .file-cta,.file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(32,156,238,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#118fe4;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#23d160;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#22c65b;border-color:transparent;color:#fff}.file.is-success:focus .file-cta,.file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(35,209,96,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#20bc56;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,221,87,0.25);color:rgba(0,0,0,0.7)}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-danger .file-cta{background-color:#ff3860;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#ff2b56;border-color:transparent;color:#fff}.file.is-danger:focus .file-cta,.file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,56,96,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#ff1f4b;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:none;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:left;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:0.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:0.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:0.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:#209cee}.help.is-success{color:#23d160}.help.is-warning{color:#ffdd57}.help.is-danger{color:#ff3860}.field:not(:last-child){margin-bottom:0.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]):hover,.field.has-addons .control .button:not([disabled]).is-hovered,.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control .input:not([disabled]).is-hovered,.field.has-addons .control .select select:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]).is-hovered{z-index:2}.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .button:not([disabled]).is-focused,.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button:not([disabled]).is-active,.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control .input:not([disabled]).is-focused,.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control .input:not([disabled]).is-active,.field.has-addons .control .select select:not([disabled]):focus,.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]).is-active{z-index:3}.field.has-addons .control .button:not([disabled]):focus: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]).is-active:hover,.field.has-addons .control .input:not([disabled]):focus: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]).is-active:hover,.field.has-addons .control .select select:not([disabled]):focus: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]).is-active: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:0.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:0.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.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:0.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:0.375em}.field-label.is-normal{padding-top:0.375em}.field-label.is-medium{font-size:1.25rem;padding-top:0.375em}.field-label.is-large{font-size:1.5rem;padding-top:0.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:0.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:left}.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:#7a7a7a}.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.25em;pointer-events:none;position:absolute;top:0;width:2.25em;z-index:4}.control.has-icons-left .input,.control.has-icons-left .select select{padding-left:2.25em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right .select select{padding-right:2.25em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute !important;right:0.625em;top:0.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 ul,.breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:0.5em}.breadcrumb .icon:last-child{margin-left:0.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;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#4a4a4a;max-width:100%;position:relative}.card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 1px 2px rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#363636;display:flex;flex-grow:1;font-weight:700;padding:.75rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{align-items:center;cursor:pointer;display:flex;justify-content:center;padding:.75rem}.card-image{display:block;position:relative}.card-content{background-color:rgba(0,0,0,0);padding:1.5rem}.card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #dbdbdb;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 #dbdbdb}.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 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#4a4a4a;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:left;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:#dbdbdb;border:none;display:block;height:1px;margin:0.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 .title,.level-item .subtitle{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}}.list{background-color:#fff;border-radius:4px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1)}.list-item{display:block;padding:0.5em 1em}.list-item:not(a){color:#4a4a4a}.list-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-item:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.list-item:not(:last-child){border-bottom:1px solid #dbdbdb}.list-item.is-active{background-color:#3273dc;color:#fff}a.list-item{background-color:#f5f5f5;cursor:pointer}.media{align-items:flex-start;display:flex;text-align:left}.media .content:not(:last-child){margin-bottom:0.75rem}.media .media{border-top:1px solid rgba(219,219,219,0.5);display:flex;padding-top:0.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:0.5rem}.media .media .media{padding-top:0.5rem}.media .media .media+.media{margin-top:0.5rem}.media+.media{border-top:1px solid rgba(219,219,219,0.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:left}@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:0.5em 0.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;color:#4d4d4d}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a;color:#090909}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:#363636}.message.is-light .message-body{border-color:#f5f5f5;color:#505050}.message.is-dark{background-color:#fafafa}.message.is-dark .message-header{background-color:#363636;color:#f5f5f5}.message.is-dark .message-body{border-color:#363636;color:#2a2a2a}.message.is-primary{background-color:#f5fffd}.message.is-primary .message-header{background-color:#00d1b2;color:#fff}.message.is-primary .message-body{border-color:#00d1b2;color:#021310}.message.is-link{background-color:#f6f9fe}.message.is-link .message-header{background-color:#3273dc;color:#fff}.message.is-link .message-body{border-color:#3273dc;color:#22509a}.message.is-info{background-color:#f6fbfe}.message.is-info .message-header{background-color:#209cee;color:#fff}.message.is-info .message-body{border-color:#209cee;color:#12537e}.message.is-success{background-color:#f6fef9}.message.is-success .message-header{background-color:#23d160;color:#fff}.message.is-success .message-body{border-color:#23d160;color:#0e301a}.message.is-warning{background-color:#fffdf5}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#3b3108}.message.is-danger{background-color:#fff5f7}.message.is-danger .message-header{background-color:#ff3860;color:#fff}.message.is-danger .message-body{border-color:#ff3860;color:#cd0930}.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:0.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:0.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:rgba(0,0,0,0)}.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,0.86)}.modal-content,.modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px), print{.modal-content,.modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:none;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-head,.modal-card-foot{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:0.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-item,.navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand .navbar-link.is-active{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-start>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-start .navbar-link::after,.navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-white .navbar-item.has-dropdown.is-active .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-item,.navbar.is-black .navbar-brand .navbar-link{color:#fff}.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand .navbar-link.is-active{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-start>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-end .navbar-link{color:#fff}.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-black .navbar-item.has-dropdown.is-active .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:#363636}.navbar.is-light .navbar-brand>.navbar-item,.navbar.is-light .navbar-brand .navbar-link{color:#363636}.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:#363636}.navbar.is-light .navbar-brand .navbar-link::after{border-color:#363636}.navbar.is-light .navbar-burger{color:#363636}@media screen and (min-width: 1024px){.navbar.is-light .navbar-start>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-end .navbar-link{color:#363636}.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:#363636}.navbar.is-light .navbar-start .navbar-link::after,.navbar.is-light .navbar-end .navbar-link::after{border-color:#363636}.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:#363636}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#363636}}.navbar.is-dark{background-color:#363636;color:#f5f5f5}.navbar.is-dark .navbar-brand>.navbar-item,.navbar.is-dark .navbar-brand .navbar-link{color:#f5f5f5}.navbar.is-dark .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand .navbar-link.is-active{background-color:#292929;color:#f5f5f5}.navbar.is-dark .navbar-brand .navbar-link::after{border-color:#f5f5f5}.navbar.is-dark .navbar-burger{color:#f5f5f5}@media screen and (min-width: 1024px){.navbar.is-dark .navbar-start>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.navbar.is-dark .navbar-end .navbar-link{color:#f5f5f5}.navbar.is-dark .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end .navbar-link.is-active{background-color:#292929;color:#f5f5f5}.navbar.is-dark .navbar-start .navbar-link::after,.navbar.is-dark .navbar-end .navbar-link::after{border-color:#f5f5f5}.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link{background-color:#292929;color:#f5f5f5}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#f5f5f5}}.navbar.is-primary{background-color:#00d1b2;color:#fff}.navbar.is-primary .navbar-brand>.navbar-item,.navbar.is-primary .navbar-brand .navbar-link{color:#fff}.navbar.is-primary .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand .navbar-link.is-active{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-start>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.navbar.is-primary .navbar-end .navbar-link{color:#fff}.navbar.is-primary .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end .navbar-link.is-active{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-start .navbar-link::after,.navbar.is-primary .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-primary .navbar-item.has-dropdown.is-active .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-item,.navbar.is-link .navbar-brand .navbar-link{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand .navbar-link.is-active{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-start>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-end .navbar-link{color:#fff}.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end .navbar-link.is-active{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-start .navbar-link::after,.navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-link .navbar-item.has-dropdown.is-active .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:#209cee;color:#fff}.navbar.is-info .navbar-brand>.navbar-item,.navbar.is-info .navbar-brand .navbar-link{color:#fff}.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#118fe4;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-start>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-end .navbar-link{color:#fff}.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end .navbar-link.is-active{background-color:#118fe4;color:#fff}.navbar.is-info .navbar-start .navbar-link::after,.navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#118fe4;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#209cee;color:#fff}}.navbar.is-success{background-color:#23d160;color:#fff}.navbar.is-success .navbar-brand>.navbar-item,.navbar.is-success .navbar-brand .navbar-link{color:#fff}.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#20bc56;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-start>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-end .navbar-link{color:#fff}.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end .navbar-link.is-active{background-color:#20bc56;color:#fff}.navbar.is-success .navbar-start .navbar-link::after,.navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#20bc56;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#23d160;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#ffd83d;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1024px){.navbar.is-warning .navbar-start>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#ffd83d;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ffd83d;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,0.7)}}.navbar.is-danger{background-color:#ff3860;color:#fff}.navbar.is-danger .navbar-brand>.navbar-item,.navbar.is-danger .navbar-brand .navbar-link{color:#fff}.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#ff1f4b;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-start>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-end .navbar-link{color:#fff}.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#ff1f4b;color:#fff}.navbar.is-danger .navbar-start .navbar-link::after,.navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ff1f4b;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#ff3860;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}html.has-navbar-fixed-top,body.has-navbar-fixed-top{padding-top:3.25rem}html.has-navbar-fixed-bottom,body.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;-webkit-transform-origin:center;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, -webkit-transform;transition-property:background-color, opacity, transform;transition-property:background-color, opacity, transform, -webkit-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,0.05)}.navbar-burger.is-active span:nth-child(1){-webkit-transform:translateY(5px) rotate(45deg);transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){-webkit-transform:translateY(-5px) rotate(-45deg);transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#4a4a4a;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}a.navbar-item,.navbar-link{cursor:pointer}a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover,a.navbar-item.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,.navbar-link.is-active{background-color:#fafafa;color:#3273dc}.navbar-item{display:block;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(0.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#3273dc}.navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#3273dc;border-bottom-style:solid;border-bottom-width:3px;color:#3273dc;padding-bottom:calc(0.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:-0.375em;right:1.125em}.navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.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:0.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,0.1);padding:0.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,0.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}html.has-navbar-fixed-top-touch,body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.has-navbar-fixed-bottom-touch,body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1024px){.navbar,.navbar-menu,.navbar-start,.navbar-end{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-start,.navbar.is-spaced .navbar-end{align-items:center}.navbar.is-spaced a.navbar-item,.navbar.is-spaced .navbar-link{border-radius:4px}.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent .navbar-link.is-active{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{display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{-webkit-transform:rotate(135deg) translate(0.25em, -0.25em);transform:rotate(135deg) translate(0.25em, -0.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,0.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.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;-webkit-transform:translateY(0);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,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:0.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.is-spaced .navbar-dropdown,.navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));-webkit-transform:translateY(-5px);transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, -webkit-transform;transition-property:opacity, transform;transition-property:opacity, transform, -webkit-transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.navbar>.container .navbar-brand,.container>.navbar .navbar-brand{margin-left:-.75rem}.navbar>.container .navbar-menu,.container>.navbar .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,0.1)}.navbar.is-fixed-top-desktop{top:0}html.has-navbar-fixed-top-desktop,body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.has-navbar-fixed-bottom-desktop,body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.has-spaced-navbar-fixed-top,body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.has-spaced-navbar-fixed-bottom,body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}a.navbar-item.is-active,.navbar-link.is-active{color:#0a0a0a}a.navbar-item.is-active:not(:focus):not(:hover),.navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .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-previous,.pagination.is-rounded .pagination-next{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-previous,.pagination-next,.pagination-link,.pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-previous,.pagination-next,.pagination-link{border-color:#dbdbdb;color:#363636;min-width:2.25em}.pagination-previous:hover,.pagination-next:hover,.pagination-link:hover{border-color:#b5b5b5;color:#363636}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus{border-color:#3273dc}.pagination-previous:active,.pagination-next:active,.pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled]{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#7a7a7a;opacity:0.5}.pagination-previous,.pagination-next{padding-left:0.75em;padding-right:0.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-previous,.pagination-next{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{font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel-heading,.panel-tabs,.panel-block{border-bottom:1px solid #dbdbdb;border-left:1px solid #dbdbdb;border-right:1px solid #dbdbdb}.panel-heading:first-child,.panel-tabs:first-child,.panel-block:first-child{border-top:1px solid #dbdbdb}.panel-heading{background-color:#f5f5f5;border-radius:4px 4px 0 0;color:#363636;font-size:1.25em;font-weight:300;line-height:1.25;padding:0.5em 0.75em}.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:0.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:0.5em 0.75em}.panel-block input[type="checkbox"]{margin-right:0.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}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:0.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:0.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:0.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}.tabs .icon:first-child{margin-right:0.5em}.tabs .icon:last-child{margin-left:0.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:rgba(0,0,0,0) !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-radius:4px 0 0 4px}.tabs.is-toggle li:last-child a{border-radius:0 4px 4px 0}.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: .25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px), print{.columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1023px){.columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1023px){.columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1024px){.columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1024px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: .25rem}}.columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px), print{.columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1023px){.columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1023px){.columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1024px){.columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1024px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: .5rem}}.columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px), print{.columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1023px){.columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1023px){.columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1024px){.columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1024px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: .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%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:none}.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,0.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,0.7)}.hero.is-white a.navbar-item:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white .navbar-link:hover,.hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:0.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,0.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,0.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,0.7)}.hero.is-black a.navbar-item:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black .navbar-link:hover,.hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:0.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,0.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:#363636}.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:#363636}.hero.is-light .subtitle{color:rgba(54,54,54,0.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:#363636}@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(54,54,54,0.7)}.hero.is-light a.navbar-item:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light .navbar-link:hover,.hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:#363636}.hero.is-light .tabs a{color:#363636;opacity:0.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:#363636}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.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:#363636;border-color:#363636;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:#f5f5f5}.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:#f5f5f5}.hero.is-dark .subtitle{color:rgba(245,245,245,0.9)}.hero.is-dark .subtitle a:not(.button),.hero.is-dark .subtitle strong{color:#f5f5f5}@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(245,245,245,0.7)}.hero.is-dark a.navbar-item:hover,.hero.is-dark a.navbar-item.is-active,.hero.is-dark .navbar-link:hover,.hero.is-dark .navbar-link.is-active{background-color:#292929;color:#f5f5f5}.hero.is-dark .tabs a{color:#f5f5f5;opacity:0.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:#f5f5f5}.hero.is-dark .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.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:#f5f5f5;border-color:#f5f5f5;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,0.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,0.7)}.hero.is-primary a.navbar-item:hover,.hero.is-primary a.navbar-item.is-active,.hero.is-primary .navbar-link:hover,.hero.is-primary .navbar-link.is-active{background-color:#00b89c;color:#fff}.hero.is-primary .tabs a{color:#fff;opacity:0.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,0.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,0.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,0.7)}.hero.is-link a.navbar-item:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link .navbar-link:hover,.hero.is-link .navbar-link.is-active{background-color:#2366d1;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:0.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,0.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:#209cee;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,0.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:#209cee}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-info a.navbar-item:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info .navbar-link:hover,.hero.is-info .navbar-link.is-active{background-color:#118fe4;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:0.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,0.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:#209cee}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%)}}.hero.is-success{background-color:#23d160;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,0.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:#23d160}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-success a.navbar-item:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success .navbar-link:hover,.hero.is-success .navbar-link.is-active{background-color:#20bc56;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:0.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,0.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:#23d160}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #12af2f 0%, #23d160 71%, #2ce28a 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #12af2f 0%, #23d160 71%, #2ce28a 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,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,0.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,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,0.7)}.hero.is-warning a.navbar-item:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning .navbar-link.is-active{background-color:#ffd83d;color:rgba(0,0,0,0.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.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,0.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.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,0.7);border-color:rgba(0,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:#ff3860;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,0.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:#ff3860}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-danger a.navbar-item:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger .navbar-link.is-active{background-color:#ff1f4b;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:0.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,0.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:#ff3860}.hero.is-danger.is-bold{background-image:linear-gradient(141deg, #ff0561 0%, #ff3860 71%, #ff5257 100%)}@media screen and (max-width: 768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ff0561 0%, #ff3860 71%, #ff5257 100%)}}.hero.is-small .hero-body{padding-bottom:1.5rem;padding-top:1.5rem}@media screen and (min-width: 769px), print{.hero.is-medium .hero-body{padding-bottom:9rem;padding-top:9rem}}@media screen and (min-width: 769px), print{.hero.is-large .hero-body{padding-bottom:18rem;padding-top:18rem}}.hero.is-halfheight .hero-body,.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}.hero.is-halfheight .hero-body>.container,.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .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%;-webkit-transform:translate3d(-50%, -50%, 0);transform:translate3d(-50%, -50%, 0)}.hero-video.is-transparent{opacity:0.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:0.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-head,.hero-foot{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}html{height:100%;width:100%}body{font-family:"TT Norms Medium",sans-serif;font-size:15px;position:relative;height:100%;width:100%;overflow-x:hidden}body.small-header .top-nav{height:75px}body.small-header #main{padding-top:75px}.top-nav{height:120px}@media screen and (max-width: 1023px){.top-nav{height:75px}}#main{height:100%;display:flex;flex-direction:row;background:#F8F8F9;padding-top:120px;overflow-x:hidden;width:100%}@media screen and (max-width: 1023px){#main{padding-top:75px}}#main>.sidebar{padding:40px 30px;flex-grow:0;flex-shrink:0;width:240px;border-right:1px solid #EAEAF1;height:100%;overflow:auto}#main>.sidebar.tutorials{width:320px}#main>.core{padding:28px;height:100%;overflow:auto;flex-grow:1}@media screen and (max-width: 768px){#main>.core{padding:0px}}#main>.core>.content{background:#fff;padding:40px;border-radius:4px;box-shadow:0 0 40px 0 rgba(115,134,160,0.24)}#main>.side-nav{width:240px;padding:40px 20px;flex-grow:0;flex-shrink:0;height:100%;border-left:1px solid #EAEAF1;overflow:auto}.content{margin-bottom:50px}.content blockquote{margin:30px 0 !important}.content .signature-attributes{margin-left:8px;margin-right:3px;font-style:italic}.content header.page-title p{font-size:13px;margin:0 0 5px;text-transform:uppercase}.content header p{font-size:20px}.content h1,.content header.page-title h1{font-family:"TT Norms Medium",sans-serif;font-size:47px;font-weight:bold;margin:8px 0}.content h2{font-size:26px;line-height:48px;font-weight:bold;margin-bottom:26px}.content h3,.content h4,.content h5,.content h6{font-family:"TT Norms Medium",sans-serif;font-weight:900;letter-spacing:0}.content code{color:#101010;font-family:"Inconsolata",monospace}.content .container-overview .prettyprint:last-child{margin-bottom:50px}.content .vertical-section{padding:16px 0}@media screen and (max-width: 1023px){#main-content-wrapper{padding:0 30px}}body.landing>.top-nav{box-shadow:none;transition:margin-top 0.3s;color:#fff;background:#4268F6}body.landing>.top-nav.hidden{transition:margin-top 0.3s;margin-top:-130px}@media screen and (max-width: 1023px){body.landing>.top-nav.hidden{margin-top:-85px}}body.landing>.top-nav.sticky{box-shadow:0 0 20px 0 rgba(0,0,255,0.5)}body.landing>.top-nav .inner{margin:0 auto;max-width:1226px}body.landing>.top-nav a.button{color:#fff;border-color:#fff;background:transparent}body.landing>.top-nav a.button:hover{background:#fff;border-color:#fff;color:#192035}body.landing>.top-nav .menu .navigation a.link{color:#fff}body.landing>.top-nav .menu .navigation a.link:hover{border-color:#fff}body.landing>.top-nav .image img{content:url("../images/logo.svg")}body.landing>.top-nav #hamburger{display:none}body.landing #main{display:block;height:auto}body.landing .main-hero{background:#4268F6;color:#fff;padding:300px 40% 160px;border-bottom-left-radius:50%;border-bottom-right-radius:50%;margin:-250px -30% 0;text-align:center}body.landing .main-hero .action-buttons{margin:60px 0;vertical-align:middle}body.landing .main-hero .action-buttons span{color:#fff}body.landing .main-hero h3{font-size:24px;line-height:65px;font-weight:lighter}body.landing .main-hero h1{font-size:52px;line-height:65px;font-weight:lighter;max-width:900px;margin-left:auto;margin-right:auto}body.landing .main-hero strong{color:#fff}body.landing .gif-box{margin-top:-140px;text-align:center}body.landing .grey-logos{text-align:center;margin-bottom:50px}body.landing .grey-logos .column{display:flex;align-items:center;justify-content:center}body.landing .white-oval{background:#fff;padding:110px 500px 100px;margin:0 -500px;text-align:center;border-bottom-left-radius:50%;border-bottom-right-radius:50%}body.landing h2{font-weight:bold;font-size:36px;line-height:48px;color:#101010;margin-bottom:15px}body.landing h2+p{color:#767676;font-size:16px}body.landing h4{font-weight:bold;font-size:24px;line-height:32px}body.landing .header-message{margin-bottom:80px}body.landing .todo-actions{text-align:left;padding:100px 0 100px 100px}@media screen and (max-width: 1215px){body.landing .todo-actions{padding-top:20px}}body.landing .todo-actions h4{margin-bottom:60px;position:relative}body.landing .todo-actions h4:before{content:'';position:absolute;left:-50px;top:0;height:30px;width:30px;background:url("../images/check.svg") no-repeat 50% 50%}body.landing .action-buttons span{line-height:36px;margin:0 10px;color:#4268F6}body.landing .credentials{text-align:center;padding:100px 0;background:url("../images/map.svg") no-repeat 50% 50%}body.landing .credentials .fa-youtube{color:#FF0000}body.landing .credentials .fa-reddit{color:#FF4500}body.landing .credentials .fa-github{color:#101010}body.landing .credentials .columns{margin-bottom:20px}body.landing .credentials .column{display:flex;flex-direction:column}body.landing .credentials .box{flex-direction:column;padding:30px;height:100%;box-shadow:0px 0px 40px rgba(115,134,160,0.25);display:flex;justify-content:center}body.landing .credentials .box:hover{box-shadow:0px 0px 40px rgba(115,134,160,0.5)}body.landing .credentials .box h5{align-self:center;font-size:22px;line-height:26px;margin-bottom:30px}body.landing .credentials .box span{font-size:11px}body.landing .stat-box{padding:40px 65px;box-shadow:0px 0px 40px rgba(115,134,160,0.25)}@media screen and (max-width: 768px){body.landing .stat-box .column:first-child{padding-bottom:40px}}body.landing .stat-box .fa-github{color:#101010}body.landing .stat-box h2{margin:0 0 60px}body.landing .stat-box h4{font-size:32px;font-weight:bolder;margin-top:15px;color:#101010}body.landing .stat-box h4 strong{color:#101010}body.landing .stat-box .level{border-bottom:#4C73F7 3px solid;margin-bottom:-3px}body.landing .stat-box .level img{position:relative;bottom:-3px}body.landing .stat-box .action-buttons{margin:50px 0 0}body.landing .feature-docs{margin-top:-200px;padding-top:300px}@media screen and (min-width: 1216px){body.landing .feature-docs .container .columns.is-multiline{margin:0 8.333%}}body.landing .feature-docs .columns.is-multiline .column{display:flex}body.landing .feature-docs .box{color:#101010}body.landing .feature-docs .box:hover{box-shadow:4px 8px 12px rgba(115,134,160,0.25)}body.landing .feature-docs .box img{margin:-10px 0}body.landing .feature-docs .box h4{line-height:36px;font-size:26px}body.landing .feature-docs .box p{font-size:20px;line-height:26px;margin:35px 0}body.landing .feature-docs .action-buttons{margin:100px 0 50px}body.landing .feature-side-blocks .bg-crud{background:url("../images/bg-crud.png") no-repeat 100% 50%}@media screen and (max-width: 1215px){body.landing .feature-side-blocks .bg-crud{background-position-x:150%}}@media screen and (max-width: 1023px){body.landing .feature-side-blocks .bg-crud{background:none;text-align:center}}body.landing .feature-side-blocks .bg-filter{background:url("../images/bg-filter.png") no-repeat 0% 50%}@media screen and (max-width: 1215px){body.landing .feature-side-blocks .bg-filter{background-position-x:-200px}}@media screen and (max-width: 1023px){body.landing .feature-side-blocks .bg-filter{background:none;text-align:center}}body.landing .feature-side-blocks .column{justify-content:center;display:flex;flex-direction:column}@media screen and (min-width: 1024px){body.landing .feature-side-blocks .column{height:700px}}body.landing .feature-side-blocks .container{margin-top:50px;margin-bottom:50px}body.landing .feature-side-blocks .action-buttons{margin:30px 0}body.landing .support-block{padding:80px 0 350px;background:#fff;margin-bottom:-200px}body.landing .support-block .column{display:flex;flex-direction:column}body.landing .support-block .column .box{flex-grow:1}body.landing .support-block .img{text-align:center;border-bottom:1px solid #D8D8D8;margin:0 -20px 20px}body.landing .support-block h4{font-weight:bolder;font-size:26px;line-height:48px}body.landing .support-block .text{padding:0 10px 20px}body.landing .support-block .form{background:#4268F6;padding:40px;border-radius:10px}body.landing .button.is-success{width:170px;height:50px}body.landing .form{color:#fff}body.landing .form .success-msg{display:none}body.landing .form .success-msg img{width:150px;margin:100px 0}body.landing .form.completed .success-msg{display:block}body.landing .form.completed .form-fields{display:none}body.landing .form h2{color:#fff;margin-bottom:30px}body.landing .form .label{font-size:20px}body.landing .form .field{margin-bottom:40px;color:#fff}body.landing .form .field label{color:#fff;font-weight:bold}body.landing .form .field input{border-radius:4px;height:54px}body.landing .form .checkbox{display:block;padding:8px 0;font-size:16px}body.landing .form .checkbox:hover{color:#fff}body.landing .form .checkbox input{margin-right:5px}body.landing .form .interested{padding:0 0 20px}body.landing .form .interested .label{color:#fff}body.landing .form textarea{height:80px}body.landing .form .notice{font-size:14px;font-weight:lighter;padding:10px 30px}body.landing .curved-footer{background:#4268F6;padding:110px 500px;margin:0 -500px;border-top-left-radius:50%;border-top-right-radius:50%;color:#fff}body.landing .curved-footer .the-part{position:relative}body.landing .curved-footer .the-part h2{font-size:90px;line-height:120px;opacity:0.08;color:#fff}@media screen and (max-width: 1023px){body.landing .curved-footer .the-part h2{font-size:70px}}body.landing .curved-footer .the-part h4{font-size:56px;line-height:65px;position:absolute;left:0;top:0;right:0;padding:80px 0}body.landing .button.is-link{background:transparent}body.landing .button.is-link span{border-bottom:1px solid #fff}body.landing .button.is-link:hover span{border-bottom:none}body.landing .top{border-bottom:1px solid rgba(255,255,255,0.2);padding-bottom:120px;text-align:center}body.landing .bottom{font-size:14px;padding:65px 0 0}@media screen and (max-width: 768px){body.landing .bottom{padding:20px}}body.landing .bottom strong{color:#fff}body.landing .bottom p{padding:6px 0}body.landing .bottom a{color:#fff}body.landing .bottom .sb{padding-top:40px}body.landing .bottom .logo{padding-bottom:30px}body.landing .bottom .button.is-success{margin-top:40px;height:54px}body.landing .bottom .form{margin-top:30px}.top-nav{background:#fff;padding:8px 24px;box-shadow:0 0 40px 0 rgba(115,134,160,0.24);position:fixed;top:0;left:0;right:0;z-index:5}@media screen and (max-width: 768px){.top-nav{padding:8px}}.top-nav h1{font-size:20px}.top-nav .inner{display:flex;align-items:center}.top-nav #hamburger{margin-left:0}@media screen and (max-width: 768px){.top-nav .logo{display:none}}.top-nav .menu{flex-grow:1}.top-nav .menu .top-buttons{text-align:right;margin-bottom:8px;margin-top:2px}@media screen and (max-width: 1023px){.top-nav .menu .top-buttons{display:none}}.top-nav .menu .top-buttons .button{margin-left:16px}.top-nav .menu .navigation{text-align:right;margin-bottom:4px}.top-nav .menu .navigation .link{border:none;display:inline-block;padding:4px 8px;color:#101010;margin-right:2px;line-height:48px;height:48px;vertical-align:middle;height:46px}.top-nav .menu .navigation .link:hover:not(.no-hover){border-bottom:2px solid #101010}@media screen and (max-width: 768px){.top-nav .menu .navigation .link.user-link{display:none}}.sidebar{padding-bottom:120px}.sidebar .search-wrapper{margin:-20px -15px 21px}.sidebar .search-wrapper input{border-radius:0}.sidebar a{color:#798897;overflow-wrap:break-word}.sidebar a:hover,.sidebar a.active{color:#E6282B}.sidebar h3{margin:1.6rem 0 .4rem;color:#211D1A;font-size:12px;text-transform:uppercase}.sidebar ul{padding:0 0 .26667rem 1.06667rem}.sidebar ul li{padding:.2rem 0}.sidebar li>ul{padding:0 0 0px 25px}.sidebar .category h2{color:#000;font-size:20px;margin-top:40px}#sidebarNav.sticky{left:0;transition:left 0.5s}@media screen and (max-width: 1023px){#sidebarNav{z-index:100;top:0;left:-300px;position:fixed;transition:left 0.5s;padding:28px;width:300px;bottom:0;overflow:auto;background:#fff}#sidebarNav .sidebar{padding-bottom:10px}}#stickyNavbarOverlay{position:absolute;left:0;right:0;bottom:0;top:0;z-index:40;background:rgba(0,0,0,0.2);display:none}#stickyNavbarOverlay.active{display:block}.side-nav a{color:#798897;overflow-wrap:break-word}.side-nav a:hover,.side-nav a.is-active{color:#E6282B}.side-nav a.is-past{opacity:0.7}.side-nav h3{margin:1.6rem 0 .4rem;color:#211D1A;font-size:12px;text-transform:uppercase}.side-nav ul{padding:0 0 .26667rem 1.06667rem}.side-nav ul li{padding:.2rem 0}@media screen and (max-width: 768px){.side-nav{display:none}}.footer{border-top:1px solid #EAEAF1;padding:20px;margin:0 -30px -30px;background:#F8F8F9}.footer .content{margin-bottom:0}.footer .fas{color:#E6282B}.footer a{font-weight:bold}.footer a:hover{color:#E6282B}.members{margin-top:24px}.member:not(:last-child):after{content:"";background:#EAEAF1;height:2px;display:block;margin:45px -40px 40px}.member>.is-pulled-right{position:relative;z-index:2}.member>.name{color:#211D1A;font-size:20px;line-height:26px;position:relative;margin-bottom:8px}.member>.name .code-name{font-family:"Inconsolata",monospace;display:block;font-size:25px;line-height:30px;margin-top:8px}.member>.name .code-name:first-child{margin-left:0}.member>.name .tag{position:relative;top:-1px;margin-right:3px}.member>.name .href-link{color:#211D1A;position:absolute;padding:1px;left:-20px;top:0;bottom:0;width:21px;opacity:0}.member>.name:hover .href-link{opacity:1}.member h5{font-size:20px}.member>.description{margin-bottom:25px}.member>.description p{font-size:20px;margin:25px 0}table.params,table.props{border:1px solid #EAEAF1;line-height:26px}table.params thead,table.props thead{border:none}table.params thead th,table.props thead th{font-weight:normal;padding:13px 26px}table.params tr,table.props tr{border-bottom:1px solid #EAEAF1}table.params td,table.props td{padding:13px 26px}table.params td.name code,table.props td.name code{background:transparent;padding:0;font-size:15px;color:#211D1A}table.params tr.deep-level-1,table.props tr.deep-level-1{background:#fafafa}table.params tr.deep-level-1 .name code,table.props tr.deep-level-1 .name code{padding-left:25px;margin-left:0px;border-left:1px solid #DEE1E5}table.params tr.deep-level-2,table.props tr.deep-level-2{background:#f5f5f5}table.params tr.deep-level-2 .name code,table.props tr.deep-level-2 .name code{padding-left:25px;margin-left:25px;border-left:1px solid #DEE1E5}table.params tr.deep-level-3,table.props tr.deep-level-3{background:#f0f0f0}table.params tr.deep-level-3 .name code,table.props tr.deep-level-3 .name code{padding-left:25px;margin-left:50px;border-left:1px solid #DEE1E5}table.params tr.deep-level-4,table.props tr.deep-level-4{background:#ebebeb}table.params tr.deep-level-4 .name code,table.props tr.deep-level-4 .name code{padding-left:25px;margin-left:75px;border-left:1px solid #DEE1E5}table.params tr.deep-level-5,table.props tr.deep-level-5{background:#e6e6e6}table.params tr.deep-level-5 .name code,table.props tr.deep-level-5 .name code{padding-left:25px;margin-left:100px;border-left:1px solid #DEE1E5}table.params tr.deep-level-6,table.props tr.deep-level-6{background:#e0e0e0}table.params tr.deep-level-6 .name code,table.props tr.deep-level-6 .name code{padding-left:25px;margin-left:125px;border-left:1px solid #DEE1E5}table.params tr.deep-level-7,table.props tr.deep-level-7{background:#dbdbdb}table.params tr.deep-level-7 .name code,table.props tr.deep-level-7 .name code{padding-left:25px;margin-left:150px;border-left:1px solid #DEE1E5}table.params tr.deep-level-8,table.props tr.deep-level-8{background:#d6d6d6}table.params tr.deep-level-8 .name code,table.props tr.deep-level-8 .name code{padding-left:25px;margin-left:175px;border-left:1px solid #DEE1E5}table.params tr.deep-level-9,table.props tr.deep-level-9{background:#d1d1d1}table.params tr.deep-level-9 .name code,table.props tr.deep-level-9 .name code{padding-left:25px;margin-left:200px;border-left:1px solid #DEE1E5}table.params tr.deep-level-10,table.props tr.deep-level-10{background:#ccc}table.params tr.deep-level-10 .name code,table.props tr.deep-level-10 .name code{padding-left:25px;margin-left:225px;border-left:1px solid #DEE1E5}.prettyprint{border-radius:2px;background-color:#2F4858}.prettyprint code{font-family:"Inconsolata",monospace}pre.prettyprint li.L0,pre.prettyprint li.L1,pre.prettyprint li.L2,pre.prettyprint li.L3,pre.prettyprint li.L4,pre.prettyprint li.L5,pre.prettyprint li.L6,pre.prettyprint li.L7,pre.prettyprint li.L8,pre.prettyprint li.L9{background:none}.button{transition:all 0.2s;border-radius:4px;padding:8px 24px;height:40px;border-color:#4268F6;color:#4268F6}.button:hover{color:#535B8E;border-color:#535B8E;transition:all 0.2s}.button.is-primary{background-color:#4268F6}.button.is-primary:hover{background-color:#535B8E}.button.is-primary.is-outlined{border-color:#4268F6;color:#4268F6}.button.is-primary.is-outlined:hover{border-color:#535B8E;color:#535B8E;background:transparent}.button.is-success{background:#69D6D4}.button.is-white.is-outlined{background:transparent;border-color:#fff}.button>i:first-child{margin-right:8px;margin-left:-8px}.tag-source{margin:28px 0}.tag-source span{display:inline-block;padding:13px 14px}.tag-source span a{color:#EAEAF1}.tag-source span a:hover{color:#798897}.method-parameter{font-size:20px}.method-parameter label{color:18px}.method-parameter ul{margin:0 0 0 25px}.mermaid .edgeLabel{background:white;color:#2F4858;font-size:15px;font-weight:normal}.mermaid .node circle,.mermaid .node ellipse,.mermaid .node polygon,.mermaid .node rect{fill:rgba(248,249,250,0.8) !important;stroke:rgba(121,136,151,0.6) !important}.mermaid .cluster rect{fill:rgba(125,132,255,0.1) !important;stroke:rgba(125,132,255,0.5) !important}.mermaid .node g.label{color:#2F4858}.mermaid .node g.label div{font-weight:normal;font-size:15px}.tag{text-transform:uppercase}.details dt{font-size:20px;border-left:2px solid #008DDF;padding-left:16px} diff --git a/styles/base/layout.sass b/styles/base/layout.sass index 31fecbcb..7a2db6e9 100644 --- a/styles/base/layout.sass +++ b/styles/base/layout.sass @@ -35,7 +35,9 @@ body padding: 40px 30px flex-grow: 0 flex-shrink: 0 - width: 240px + max-width: 30% + overflow-x: auto + white-space: nowrap border-right: 1px solid $border height: 100% overflow: auto @@ -56,7 +58,7 @@ body border-radius: 4px box-shadow: 0 0 40px 0 rgba(115,134,160,0.24) & > .side-nav - width: 240px + max-width: 25% padding: 40px 20px flex-grow: 0 flex-shrink: 0 diff --git a/styles/components/params.sass b/styles/components/params.sass index bd680f6e..5ffcb2ef 100644 --- a/styles/components/params.sass +++ b/styles/components/params.sass @@ -8,13 +8,30 @@ table.params, table.props padding: 13px 26px tr border-bottom: 1px solid $border + + &.show + display:table-row + + &.hide + display: none td padding: 13px 26px - td.name code - background: transparent - padding: 0 - font-size: 15px - color: $main-nav + + &:first-of-type + white-space: nowrap; + + td.name + code + background: transparent + padding: 0 + font-size: 15px + color: $main-nav + .property-opener + text-decoration: none + color: $main-nav + & > i + display: inline-block + @for $i from 1 through 10 tr.deep-level-#{$i} diff --git a/styles/components/sidebar.sass b/styles/components/sidebar.sass index 2f7c2f9b..d98c415d 100644 --- a/styles/components/sidebar.sass +++ b/styles/components/sidebar.sass @@ -11,23 +11,59 @@ overflow-wrap: break-word &:hover, &.active color: $red-active - h3 + h3, .category.nested .types h4 margin: rem(24px) 0 rem(6px) color: $main-nav font-size: 12px text-transform: uppercase + .member-opener + h3, h4 + display: inline-block + i + margin-right: 5px; ul padding: 0 0 rem(4px) rem(16px) li padding: rem(3px) 0 li > ul padding: 0 0 0px 25px - + .category + &.nested + .category-opener + i, h2{display: inline-block;} + + .subcategories + &.opened + display: block; + &.closed + display: none; + &.is-mixed > li:not([data-cat]) + padding: 0 0 0 25px; + margin-top: 1rem; + > li + &.opened .types + display: block; + &.closed .types + display: none; + h3.subCat + text-transform: none; + font-size: rem(15px); + display: inline-block; + margin-top: rem(15px); + > a > i + margin-right: rem(5px); + .types > li + h3, h4 + margin-top: rem(10px); h2 color: #000 font-size: 20px margin-top: 40px + .member-container.closed > ul + display: none + .member-container.opened > ul + display: block #sidebarNav.sticky left: 0 diff --git a/styles/components/tags.sass b/styles/components/tags.sass index 47611b07..cd0f3c23 100644 --- a/styles/components/tags.sass +++ b/styles/components/tags.sass @@ -1,9 +1,12 @@ .tag-source margin: 28px 0 - span + & > div display: inline-block padding: 13px 14px + .source-links + display: inline-block + color: $grey a - color: $border + color: $grey &:hover - color: $grey \ No newline at end of file + color: $grey100 \ No newline at end of file diff --git a/table.js b/table.js new file mode 100644 index 00000000..927024c0 --- /dev/null +++ b/table.js @@ -0,0 +1,17 @@ +exports.defineTags = function (dictionary) { + dictionary.defineTag('table', { + mustHaveValue: false, + mustNotHaveDescription: true, + canHaveType: false, + canHaveName: false, + onTagged: function(doclet, tag) { + doclet.table=true; + doclet.tags = (doclet.tags || []); + doclet.tags.push({ + title: 'Table', + originalTitle: 'Table', + text: '', + }); + } + }); +}; \ No newline at end of file diff --git a/tmpl/container.tmpl b/tmpl/container.tmpl index c2fcaeed..cef88937 100644 --- a/tmpl/container.tmpl +++ b/tmpl/container.tmpl @@ -11,7 +11,9 @@ isGlobalPage = (doc.kind === 'globalobj'); } ?> -<?js if (doc.kind === 'mainpage' || (doc.kind === 'package')) { ?> +<?js if (doc.kind === 'todo') { ?> + <?js= self.partial('todo.tmpl', doc) ?> +<?js }else if (doc.kind === 'mainpage' || (doc.kind === 'package')) { ?> <?js= self.partial('mainpage.tmpl', doc) ?> <?js } else if (doc.kind === 'source') { ?> <?js= self.partial('source.tmpl', doc) ?> @@ -60,16 +62,7 @@ <?js }) ?> <?js } else if (doc.kind === 'class' || (doc.kind === 'namespace' && doc.signature)) { ?> <?js if (doc.kind === 'class' && !doc.hideconstructor) { ?> - <div class='vertical-section'> - <div class="members"> - <div class="member"> - <div class=name> - <span class="tag">Constructor</span> - </div> - <?js= self.partial('method.tmpl', doc) ?> - </div> - </div> - </div> + <?js } else { ?> <?js= self.partial('method.tmpl', doc) ?> <?js } ?> @@ -107,76 +100,109 @@ <?js }; ?> <?js }; ?> <?js if (doc.augments && doc.augments.length) { ?> - <h3 class="subsection-title">Extends</h3> - - <?js= self.partial('augments.tmpl', doc) ?> + <div class="subsection" data-type="augments"> + <h3 class="subsection-title">Extends</h3> + + <?js= self.partial('augments.tmpl', doc) ?> + </div> <?js } ?> <?js if (doc.requires && doc.requires.length) { ?> - <h3 class="subsection-title">Requires</h3> - - <ul><?js doc.requires.forEach(function(r) { ?> - <li><?js= self.linkto(r, r) ?></li> - <?js }); ?></ul> + <div class="subsection" data-type="requires"> + <h3 class="subsection-title">Requires</h3> + + <ul><?js doc.requires.forEach(function(r) { ?> + <li><?js= self.linkto(r, r) ?></li> + <?js }); ?></ul> + </div> <?js } ?> <?js var classes = self.find({kind: 'class', memberof: doc.longname}); + classes = classes.filter(elem => { + return elem.longname != doc.longname; + }); if (!isGlobalPage && classes && classes.length) { ?> - <h3 class="subsection-title">Classes</h3> - - <dl><?js classes.forEach(function(c) { ?> - <dt><?js= self.linkto(c.longname, c.name) ?></dt> - <dd><?js if (c.summary) { ?><?js= c.summary ?><?js } ?></dd> - <?js }); ?></dl> + <div class="subsection" data-type="classes"> + <h3 class="subsection-title">Classes</h3> + + <dl><?js classes.forEach(function(c) { ?> + <dt><?js= self.linkto(c.longname, c.name) ?></dt> + <dd><?js if (c.summary) { ?><?js= c.summary ?><?js } ?></dd> + <?js }); ?></dl> + </div> <?js } ?> <?js var interfaces = self.find({kind: 'interface', memberof: doc.longname}); if (!isGlobalPage && interfaces && interfaces.length) { ?> - <h3 class="subsection-title">Interfaces</h3> - - <dl><?js interfaces.forEach(function(i) { ?> - <dt><?js= self.linkto(i.longname, i.name) ?></dt> - <dd><?js if (i.summary) { ?><?js= i.summary ?><?js } ?></dd> - <?js }); ?></dl> + <div class="subsection" data-type="interfaces"> + <h3 class="subsection-title">Interfaces</h3> + + <dl><?js interfaces.forEach(function(i) { ?> + <dt><?js= self.linkto(i.longname, i.name) ?></dt> + <dd><?js if (i.summary) { ?><?js= i.summary ?><?js } ?></dd> + <?js }); ?></dl> + </div> <?js } ?> <?js var mixins = self.find({kind: 'mixin', memberof: doc.longname}); if (!isGlobalPage && mixins && mixins.length) { ?> - <h3 class="subsection-title">Mixins</h3> - - <dl><?js mixins.forEach(function(m) { ?> - <dt><?js= self.linkto(m.longname, m.name) ?></dt> - <dd><?js if (m.summary) { ?><?js= m.summary ?><?js } ?></dd> - <?js }); ?></dl> + <div class="subsection" data-type="mixins"> + <h3 class="subsection-title">Mixins</h3> + + <dl><?js mixins.forEach(function(m) { ?> + <dt><?js= self.linkto(m.longname, m.name) ?></dt> + <dd><?js if (m.summary) { ?><?js= m.summary ?><?js } ?></dd> + <?js }); ?></dl> + </div> <?js } ?> <?js var namespaces = self.find({kind: 'namespace', memberof: doc.longname}); if (!isGlobalPage && namespaces && namespaces.length) { ?> - <h3 class="subsection-title">Namespaces</h3> - - <dl><?js namespaces.forEach(function(n) { ?> - <dt><?js= self.linkto(n.longname, n.name) ?></dt> - <dd><?js if (n.summary) { ?><?js= n.summary ?><?js } ?></dd> - <?js }); ?></dl> + <div class="subsection" data-type="namespaces"> + <h3 class="subsection-title">Namespaces</h3> + + <dl><?js namespaces.forEach(function(n) { ?> + <dt><?js= self.linkto(n.longname, n.name) ?></dt> + <dd><?js if (n.summary) { ?><?js= n.summary ?><?js } ?></dd> + <?js }); ?></dl> + </div> + <?js } ?> + + <?js if (doc.kind === 'class' && !doc.hideconstructor) { ?> + <?js if (doc.meta && self.outputSourceFiles) { ?> + <?js= self.partial('view-source.tmpl', doc) ?> + <?js } ?> + <div class='vertical-section'> + <div class="members"> + <div class="member"> + <div class=name> + <span class="tag">Constructor</span> + </div> + <?js= self.partial('method.tmpl', doc) ?> + </div> + </div> + </div> <?js } ?> <?js var members = self.find({kind: 'member', memberof: isGlobalPage ? {isUndefined: true} : doc.longname}); // symbols that are assigned to module.exports are not globals, even though they're not a memberof anything - if (isGlobalPage && members && members.length && members.forEach) { + if (members && members.length && members.forEach) { members = members.filter(function(m) { - return m.longname + return (!isGlobalPage && !m.table) + || (m.longname && m.longname.indexOf('module:') !== 0 - && m.access !== 'private'; + && m.access !== 'private' + && !m.table); }); } if (members && members.length && members.forEach) { @@ -190,13 +216,58 @@ </div> </div> <?js } ?> + + <?js + var tables = self.find({kind: 'member', memberof: isGlobalPage ? {isUndefined: true} : doc.longname}); + + // we're only selecting members with the @table tag + if (tables && tables.length && tables.forEach) { + tables = tables.filter(function(m) { + return (!isGlobalPage && m.table) + || (m.longname + && m.longname.indexOf('module:') !== 0 + && m.access !== 'private' + && m.table); + }); + } + + if (tables && tables.length && tables.forEach) { + ?> + <div class='vertical-section'> + <h1>Tables</h1> + <div class="members"> + <?js tables.forEach(function(p) { ?> + <div class="member"><?js= self.partial('members.tmpl', p) ?></div> + <?js }); ?> + </div> + </div> + <?js } ?> + + <?js + var methods = self.find({kind: 'function', memberof: isGlobalPage ? {isUndefined: true} : doc.longname}); + if (methods && methods.length && methods.forEach) { + methods = methods.filter(function(m) { + return m.access !== 'private' && m.lifecycle; + }); + if (methods && methods.length){ + ?> + <div class='vertical-section'> + <h1>Lifecycle Methods</h1> + <div class="members"> + <?js methods.forEach(function(m) { ?> + <div class="member"><?js= self.partial('method.tmpl', m) ?></div> + <?js }); ?> + </div> + </div> + <?js }} ?> <?js var methods = self.find({kind: 'function', memberof: isGlobalPage ? {isUndefined: true} : doc.longname}); if (methods && methods.length && methods.forEach) { methods = methods.filter(function(m) { - return m.access !== 'private'; + return m.access !== 'private' && !m.lifecycle; }); + if (methods && methods.length){ ?> <div class='vertical-section'> <h1>Methods</h1> @@ -206,7 +277,7 @@ <?js }); ?> </div> </div> - <?js } ?> + <?js }} ?> <?js var typedefs = self.find({kind: 'typedef', memberof: isGlobalPage ? {isUndefined: true} : doc.longname}); diff --git a/tmpl/details.tmpl b/tmpl/details.tmpl index a95d96c1..d9118586 100644 --- a/tmpl/details.tmpl +++ b/tmpl/details.tmpl @@ -132,13 +132,4 @@ if (data.defaultvalue && (data.defaultvaluetype === 'object' || data.defaultvalu <?js }); ?></ul> </dd> <?js } ?> - - <?js if (data.meta && self.outputSourceFiles) {?> - <p class="tag-source"> - <?js= self.linkto(meta.shortpath, 'View Source', 'button') ?> - <span> - <?js= self.linkto(meta.shortpath) ?>, <?js= self.linkto(meta.shortpath, 'line ' + meta.lineno, null, 'line' + meta.lineno) ?> - </span> - </p> - <?js } ?> </dl> diff --git a/tmpl/head.tmpl b/tmpl/head.tmpl index 1e787c1e..cd284341 100644 --- a/tmpl/head.tmpl +++ b/tmpl/head.tmpl @@ -9,7 +9,9 @@ <script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script> <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script> + <?js if(!betterDocs.isReactNative){ ?> <script src="./build/entry.js"></script> + <?js } ?> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> @@ -25,5 +27,11 @@ <?js if (betterDocs.head) { ?> <?js= betterDocs.head ?> <?js } ?> + <script> + var useNavFolding = <?js= (betterDocs.useNavFolding ? 'true' : 'false') ?>; + var usePropertyFolding = <?js= (betterDocs.usePropertyFolding ? 'true' : 'false') ?>; + var foldingDefaultClosed = <?js= (betterDocs.foldingDefaultClosed ? 'true' : 'false') ?>; + var subsectionsInSideNav = <?js= (betterDocs.subsectionsInSideNav ? JSON.stringify(betterDocs.subsectionsInSideNav) : '[]') ?>; + </script> </head> diff --git a/tmpl/layout.tmpl b/tmpl/layout.tmpl index dcb93774..6114932c 100644 --- a/tmpl/layout.tmpl +++ b/tmpl/layout.tmpl @@ -21,7 +21,7 @@ var search = env.conf.templates && env.conf.templates.search <body class="<?js= self.smallHeader ? 'layout small-header' : 'layout'?>"> <div id="stickyNavbarOverlay"></div> <?js= this.partial('topnav.tmpl', { betterDocs }) ?> - <div id="main"> + <div id="main" class="<?js= ((betterDocs.useNavFolding ? ' use-nav-folding' : '')+(betterDocs.foldingDefaultClosed && betterDocs.useNavFolding ? ' folding-default-closed' : (betterDocs.useNavFolding ? ' folding-default-opened' : ''))).trim() ?>"> <div class="sidebar <?js= isTutorial ? 'tutorials' : '' ?>" id="sidebarNav" diff --git a/tmpl/members.tmpl b/tmpl/members.tmpl index 7b52a232..a3cb35ca 100644 --- a/tmpl/members.tmpl +++ b/tmpl/members.tmpl @@ -50,3 +50,7 @@ var self = this; <h5>Example<?js= examples.length > 1? 's':'' ?></h5> <?js= this.partial('examples.tmpl', data) ?> <?js } ?> + +<?js if (data.meta && self.outputSourceFiles) {?> + <?js= self.partial('view-source.tmpl', data) ?> +<?js } ?> \ No newline at end of file diff --git a/tmpl/method.tmpl b/tmpl/method.tmpl index c7b7afff..9703e953 100644 --- a/tmpl/method.tmpl +++ b/tmpl/method.tmpl @@ -55,7 +55,7 @@ var self = this; <?js if (data.component) { ?> <?js if (data.component.props && data.component.props.length) { ?> - <h5>PropTypes:</h5> + <h5>Props:</h5> <?js= self.partial('proptypes.tmpl', data.component) ?> <?js } ?> <?js } ?> @@ -169,3 +169,7 @@ var self = this; <h5>Example<?js= examples.length > 1? 's':'' ?></h5> <?js= this.partial('examples.tmpl', data) ?> <?js } ?> + +<?js if (data.meta && self.outputSourceFiles) {?> + <?js= self.partial('view-source.tmpl', data) ?> +<?js } ?> \ No newline at end of file diff --git a/tmpl/name-link.tmpl b/tmpl/name-link.tmpl index 4b242abe..88ceb6de 100644 --- a/tmpl/name-link.tmpl +++ b/tmpl/name-link.tmpl @@ -1 +1 @@ -<a class="href-link" href="#<?js= obj.id ?>">#</a> \ No newline at end of file +<a class="href-link" href="#<?js= obj.id ?>" id="<?js= obj.id ?>">#</a> \ No newline at end of file diff --git a/tmpl/properties.tmpl b/tmpl/properties.tmpl index 29fb011d..f9fcca70 100644 --- a/tmpl/properties.tmpl +++ b/tmpl/properties.tmpl @@ -1,9 +1,14 @@ <?js var data = obj; + if(env.conf.templates && env.conf.templates.betterDocs) { + betterDocs = env.conf.templates.betterDocs + } else { + betterDocs = {} + } var props = data.subprops || data.properties; /* sort subprops under their parent props (like opts.classname) */ - var parentProp = null; + /*var parentProp = null; props.forEach(function(prop, i) { if (!prop) { return; } if ( parentProp && prop.name && prop.name.indexOf(parentProp.name + '.') === 0 ) { @@ -15,6 +20,55 @@ else { parentProp = prop; } + });*/ + + /* rewrite the nesting build, since the above implementation ony goes to a depth of 1 */ + let maxDepth=betterDocs.maxPropertyDepth !== undefined ? betterDocs.maxPropertyDepth : 1; + let parentProp=null; + let depth = 0; + props.forEach(function(prop, i) { + if (!prop) { return; } + let origPropName = prop.name; + if(parentProp && prop.name && prop.name.indexOf(parentProp.name + '.') === 0 ){ + let parents = prop.name.split('.'); + let propName = parents.splice(parents.length-1, 1)[0]; + let subprops = parentProp.subprops || []; + let theParent=parentProp; + + depth=1; + for(var x=0; x<parents.length; x++){ + let parentName = parents[x]; + let subpropIndex = subprops.findIndex(subprop => { + return subprop.name == parentName; + }); + if(subpropIndex >= 0){ + if(depth < maxDepth){ + theParent = subprops[subpropIndex]; + subprops = theParent.subprops || []; + depth++; + }else{ + let prefix = ''; + for(y=x; y<parents.length; y++){ + prefix += parents[y]+'.'; + } + //prefix = prefix.substr(0, prefix.length-1); + propName = prefix+propName; + + } + } + } + if(theParent && maxDepth > 0){ + prop.name = propName; + theParent.subprops = theParent.subprops || []; + theParent.subprops.push(prop); + props[i] = null; + + } + //props[i] = null; + }else{ + depth = 0 + parentProp=prop; + } }); /* determine if we need extra columns, "attributes" and "default" */ @@ -51,6 +105,28 @@ if (typeof subprop.defaultvalue !== 'undefined' && !data.isEnum) { props.hasDefault = true; } + + /* dive through the rest of the subprops nesting to find out if we have attributes, name, or defaults */ + let subprops = subprop.subprops; + let depth = 1; + while(subprops && depth < maxDepth && (!props.hasAttributes || !props.hasName || !props.hasDefault)){ + subprops.forEach(function(subsubprop) { + if (!subsubprop) { return; } + if (subsubprop.optional || subsubprop.nullable) { + props.hasAttributes = true; + } + + if (subsubprop.name) { + props.hasName = true; + } + + if (typeof subsubprop.defaultvalue !== 'undefined' && !data.isEnum) { + props.hasDefault = true; + } + }) + subprops.subprops; + depth++; + } }) } }); diff --git a/tmpl/property.tmpl b/tmpl/property.tmpl index 951b158b..10db57b6 100644 --- a/tmpl/property.tmpl +++ b/tmpl/property.tmpl @@ -1,13 +1,45 @@ <?js + if(env.conf.templates && env.conf.templates.betterDocs) { + betterDocs = env.conf.templates.betterDocs + } else { + betterDocs = {} + } var data = obj; var props = data.props; var prop = data.prop; var level = data.level; + var parentProp = parentProp ? parentProp : null; var self = this; + var hasSubprops = prop.subprops ? (prop.subprops.findIndex(subprop => subprop) >= 0) : false; + let foldClasses = ''; + if(betterDocs.usePropertyFolding){ + if(betterDocs.foldingDefaultClosed && level > 0){ + foldClasses += ' hide'; + }else{ + foldClasses += ' show'; + } + if(level > 0){ + foldClasses += ' is-closed'; + }else{ + foldClasses += ' is-closed'; + } + } ?> -<tr class="deep-level-<?js= level ?>"> - <?js if (props.hasName) {?> - <td class="name"><code><?js= prop.name ?></code></td> + +<tr class="deep-level-<?js= level ?><?js= foldClasses ?>" data-level="<?js= level ?>" <?js= (parentProp ? 'data-parentprop="'+parentProp.name+'" ' : '') ?>data-prop="<?js= prop.name?>"> + <?js if (props.hasName) { ?> + <td class="name"> + <code> + <?js if(hasSubprops && betterDocs.usePropertyFolding){ ?> + <a href="javascript:void(0);" class="property-opener"> + <i class="fas fa-caret-<?js= betterDocs.foldingDefaultClosed ? 'right' : 'down' ?>"></i> + <?js } ?> + <?js= prop.name ?> + <?js if(hasSubprops && betterDocs.usePropertyFolding){ ?> + </a> + <?js } ?> + </code> + </td> <?js } ?> <td class="type"> @@ -47,6 +79,7 @@ props: props, prop: subprop, level: level + 1, + parentProp: prop, } ?> <?js= self.partial('property.tmpl', propData) ?> diff --git a/tmpl/proptypes.tmpl b/tmpl/proptypes.tmpl index 13997f24..dd399bb1 100644 --- a/tmpl/proptypes.tmpl +++ b/tmpl/proptypes.tmpl @@ -23,7 +23,7 @@ var self = this; <tr class="deep-level-0"> <td class="name"><code><?js= propType.name ?></code></td> <td> - <?js= propType.type ?> + <?js= self.linkto(propType.type, self.htmlsafe(propType.type)) ?> </td> <td><?js= propType.required ? 'Yes' : 'No' ?></td> <td><?js= propType.description ?></td> diff --git a/tmpl/todo.tmpl b/tmpl/todo.tmpl new file mode 100644 index 00000000..b1da9d6f --- /dev/null +++ b/tmpl/todo.tmpl @@ -0,0 +1,43 @@ +<?js +var data = obj; +var self = this; +?> + +<article class="vertical-section"> + <h1 style="font-size:35px">Files</h1> + <div class="members"> + <?js Object.keys(data.docs).forEach(key => { ?> + <section class="member"> + + <h4 class="name" id="<?js= data.docs[key].shortpath ?>"> + <a class="href-link" href="#<?js= data.docs[key].shortpath ?>">#</a> + <span class="code-name"><?js= data.docs[key].shortpath ?></span> + </h4> + <ul class="description"> + <?js data.docs[key].members.forEach(member => { ?> + <?js member.todo.forEach(todo => { + let lines = member.comment.split('\n'); + let todoline = lines.findIndex(line => { return line.indexOf(todo) >= 0 }); + let lineno = member.meta.lineno - lines.length + (todoline >= 0 ? todoline : 0); + lineno = lineno < 0 ? 0 : lineno; + ?> + <li style="margin: 35px 0;"> + <div> + <p style="margin:0;"><?js= todo ?></p> + </div> + <dl class="details"> + <dt style="display:inline-block;vertical-align:middle;font-size:16px;margin-left:1px;padding-left:10px;">Source:</dt> + <dd class="tag-source" style="margin:0px 0px 0px 10px;display:inline-block;vertical-align:middle;"> + <div class="source-links" style="padding:0"> + <?js= this.linkto(member.meta.shortpath, member.meta.shortpath+(lineno ? ', line ' + lineno : ''), null, (lineno ? 'line' + lineno : null)) ?> + </div> + </dd> + </li> + <?js }) ?> + <?js }) ?> + </ul> + + </section> + <?js }) ?> + </div> +</article> \ No newline at end of file diff --git a/tmpl/view-source.tmpl b/tmpl/view-source.tmpl new file mode 100644 index 00000000..b44513aa --- /dev/null +++ b/tmpl/view-source.tmpl @@ -0,0 +1,10 @@ +<?js if (obj.meta && this.outputSourceFiles) {?> + <div class="tag-source"> + <div> + <div class="source-button"><?js= this.linkto(meta.shortpath, 'View Source', 'button', meta.lineno ? 'line' + meta.lineno : '') ?></div> + <div class="source-links"> + <?js= this.linkto(meta.shortpath)+(meta.lineno ? ', '+this.linkto(meta.shortpath, 'line ' + meta.lineno, null, 'line' + meta.lineno) : '') ?> + </div> + </div> + </div> +<?js } ?> \ No newline at end of file